先看一段**
1
2
3
4
5
i
=
5
def
test(arg
=
i):
print
(arg)
i
=
6
test()
測試一下,結果為5,這跟一般的程式語言結果不一樣。按照python的說法,是函式預設值只能被賦值一次,也就是說一開始arg被賦值為5後,就不會再被賦值了,儘管在執行函式前i被賦值為6,不知道這樣理解對不對,這個要注意,很容易出錯。
下一段**
1
2
3
4
5
6
def
test(i,l
=
):
print
(l)
test(
1
)
test(
2
)
test(
3
)
測試後結果為
1
2
3
[1]
[1, 2]
[1, 2, 3]
這個結果也和大部分的程式語言不一樣,因為l這個變數被初始為空列表,如果在函式呼叫中沒有再給定義,那麼後續呼叫過程中會累積(前面)傳給它的引數。
這是比較深入的解答:
對於傳統語言,上面這段**的執行方式將會是,先在記憶體中申明乙個p的變數,然後將1存入變數p所在記憶體。執行加法操作的時候得到2的結果,將2這個數值再次存入到p所在記憶體位址中。可見整個執行過程中,變化的是變數p所在記憶體位址上的值
而這段**中,python實際上是現在執行記憶體中建立了乙個1的物件,並將p指向了它。在執行加法操作的時候,實際上通過加法操作得到了乙個2的新物件,並將p指向這個新的物件。可見整個執行過程中,變化的是p指向的記憶體位址
如果想要避免這種情況,要麼不要用能夠變化的物件作為預設引數,要麼
1
2
3
4
5
def test(i, l=none):
if l is none:
l =
return l
關於函式的一些問題
1 乙個基類的生命中有純虛函式被稱為抽象類,該基類的派生類如果沒有實現所有的純虛函式則還是抽象類。2 靜態成員被所有類的物件共有。不能加const修飾符。同時靜態函式也不可以加const修飾符,也不能訪問成員變數,因為static成員不是任何物件的組成部分,所以static成員不能被宣告為const...
關於面試的一些問題
面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...
關於Labview的一些問題
第一章 虛擬儀器及 labview入門 1 虛擬儀器概述 虛擬儀器 virtual instrumention 是基於計算機的儀器。計算機和儀器的密切結合是目前儀器發展的乙個重要方向。粗略地說這種結合有兩種方式,一種是將計算機裝入儀器,其典型的例子就是所謂智慧型化的儀器。隨著計算機功能的日益強大以及...