python函數的作用域,閉包,默認值等

函數的區間
程序中的函數要在被調用的前邊來定義
同一個函數名可以多次定義,定義后會覆蓋前一個函數,調用時會調用調用處最新定義的那個函數
在函數外代碼區中定義的變量,又稱為全局變量,可以在函數中調用它 (必須在調用函數的語句之前定義這個變量,要不然會報錯)
函數中可以定義和全局變量名相同的一個變量,這樣得到的變量只能夠在函數內使用,外部無法訪問(賦值即定義)
函數如果使用了全局變量(函數內沒有定義就引用),就不能夠在使用和全局變量變量名相同的變量
全局變量如果為不可變類型, ?數值型,字符串,元組等. 函數引用它時就不能對它做任何修改,其實外部也不能對它做任何修改,但是外部能夠重新定義它可以在函數中聲明(使用 global)這是一個外部變量,使得函數中也可以重新定義這個變量
全局變量如果為可變類型,list,set,dict等.函數中可以對它做出修改,并在外部訪問變量時訪問到修改后的變量,但是也不能夠重新定義它,同樣它可以在函數中聲明(使用 global)這是一個外部變量,使得函數中也可以重新定義這個變量
函數的嵌套
一個函數內部定義一個函數,這個函數可以調用或者不調用,這個函數的函數名可以是任意的甚至是和它的外部函數同名,而不引起歧義.當然這個函數內部也可以定義函數. 這種情況稱為函數的嵌套
函數內定義的變量的作用域在函數內部以及它包含的函數中
c=100 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?左邊的函數內部定義的 c ,由于定義的是全局變量,因此訪問到的c的值為100
def counter():?? ??? ??? ??? ??? ?? ? ?如果沒有使用global 它將訪問counter() 中的c
? ? c=5?? ??? ??? ??? ??? ??? ??? ??? ?? ? ?但是使用上面的c,不能對它進行從新的定義,這里遇到的情況和函數中使用全局變量的類似
? ? a=10?? ??? ??? ??? ??? ??? ??? ??? ?? 使用nonlocal關鍵字,將變量標記為在上級的局部作用域中, 但它不能替代global使用
? ? def inc():?? ??? ??? ??? ??? ??? ??? ?? (nonlocal 只能是對外部函數中定義的那個變量使用,并使其局部作用域增大
?? ?? ? global c ?–>nonlocal ?c
?? ?? ? c+=1
?? ?? ? return c
? ? return inc
foo = counter()
foo()
函數的 __defaults__屬性
函數在第一遍執行時就會獲取這個屬性,它包含函數定義的所有的參數的默認值,這個屬性對象伴隨整個函數生命周期
可變類型默認值,如果使用默認值,就可能修改這個默認值
再次執行,如果繼續使用這個可變類型默認值,就會使用修改過了后的默認值,這樣又會改變那個可變默認值
修改默認值之后,如果再次調用函數,而不使用這個可變類型的默認值,__defaults__屬性又會回歸未修改的

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87832

(0)
daishitongdaishitong
上一篇 2017-10-16 09:41
下一篇 2017-10-16 13:47

相關推薦

欧美性久久久久