關於Python函式的一些問題

2021-09-20 23:46:34 字數 1717 閱讀 5917

先看一段**

1

2

3

4

5

i=5

deftest(arg=i):

print(arg)

i=6

test()

測試一下,結果為5,這跟一般的程式語言結果不一樣。按照python的說法,是函式預設值只能被賦值一次,也就是說一開始arg被賦值為5後,就不會再被賦值了,儘管在執行函式前i被賦值為6,不知道這樣理解對不對,這個要注意,很容易出錯。

下一段**

1

2

3

4

5

6

deftest(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 是基於計算機的儀器。計算機和儀器的密切結合是目前儀器發展的乙個重要方向。粗略地說這種結合有兩種方式,一種是將計算機裝入儀器,其典型的例子就是所謂智慧型化的儀器。隨著計算機功能的日益強大以及...