python學習日記(十)
擠出時間來學了兩天,這幾天真的是忙死了,越到年底越能體會到時間的珍貴,唯一開心的是雙十二搶到衣服了
1.有返回值的叫函式,沒有的叫過程
如果沒有使用return語句指定返回值,Python也不是什麼都不返回的,Ta會返回一個None物件,所以我們說Python所有的函式都有返回值。
2.嚴格來說,python只有函式,沒有過程
3.函式變數的作用域(變數的可見性):全域性變數、區域性變數
在函式裡面定義的引數都是區域性變數
全域性變數的作用域是整個程式碼段
4.如果試圖在函式中修改一個全域性變數的值,python會自動建立一個新的區域性變數代替,名字和原先的全域性變數一樣。
5.global關鍵字:將區域性變數變成全域性變數
在巢狀的函式中,如果希望在內部函式修改外部函式的區域性變數,應該使nonlocal
6.閉包:函數語言程式設計的重要語法形式
如果在一個內部函式裡,對在外部作用域(但是不是在全域性作用域)的變數進行引用,那麼內部函式就被稱為閉包
由於閉包的定義由內部函式而來,所以不能在外部函式外面對內部函式進行引用
>>> def funx(x):
def funy(y):
return x*y
return funy
>>> i=funx(8)
>>> i
<function funx.<locals>.funy at 0x000001F95FCD5950>
>>> type(i)
<class 'function'>
>>> i(5)
40
>>> funx(8)(5)
40
此時,funy就是一個閉包,i被定義為了函式
7.這裡在funy()裡修改了全域性變數x,是不能的.
>>> def funx():
x=5
def funy():
x*=x
return x
return funy()
>>> funx()
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
funx()
File "<pyshell#78>", line 6, in funx
return funy()
File "<pyshell#78>", line 4, in funy
x*=x
UnboundLocalError: local variable 'x' referenced before assignment
使用nonlocal關鍵字可以在內嵌函式裡修改外圍函式的變數值
>>> def funx():
x=5
def funy():
nonlocal x
x*=x
return x
return funy()
>>> funx()
25
>>> def funx():
x=5
def funy():
nonlocal x
x*=x
return x
print('example:',x)
return funy()
>>> funx()
example: 5
25
>>>