020Python初學筆記 內嵌函式和閉包

2021-09-10 17:26:44 字數 1891 閱讀 2086

#**段1

>>> def fun1():

print('外層函式正在被呼叫')

def fun2():

print('內層函式正在被呼叫')

>>> fun1()

外層函式正在被呼叫

#**段2

>>> def fun1():

print('外層函式正在被呼叫')

def fun2():

print('內層函式正在被呼叫')

fun2()

>>> fun1()

外層函式正在被呼叫

內層函式正在被呼叫

>>> fun2() #內嵌函式直接被呼叫

traceback (most recent call last):

file "", line 1, in fun2()

nameerror: name 'fun2' is not defined

注:①內嵌函式不能再外層函式被呼叫的過程中自動被呼叫 ②內部函式不能被外部直接使用,需要通過其外層函式的呼叫發揮作用

>>> def funx(x):

def funy(y):

return x*y

return funy #返回內層函式

>>> funx(2)(5) #對閉包的呼叫

10#注:

>>> m=funx(2) #只對外層函式進行了呼叫

>>> type(m) #所以函式的返回型別及m的型別為function

>>> m(3) #繼續對內層函式進行呼叫

6

>>> num=3

>>> def count():

global num

num=5

print(num)

>>> count()

5>>> num

5

注:能不直接訪問全域性變數盡量不要訪問,如需使用全域性變數可以使用函式進行傳參。

>>> def fun1():

x=5def fun2():

nonlocal x

x+=7

return x

return fun2

>>> fun1()()

12

#例子1:

def funx():

x=5def funy():

nonlocal x

x+=1

return x

return funy

a=funx()

print(a())

print(a())

print(a())

#例子2:

def funx():

x=5def funy():

nonlocal x

x+=1

return x

return funy

a=funx()

print(a())

a=funx()

print(a())

a=funx()

print(a())

#例子1結果:67

8#例子2結果:66

6

注:例子2中區域性變數x在每次呼叫時都被重新賦值了,所以結果都是6。但是例子1中,a=funx()的時候,只要a變數沒有被重新賦值,funx()就沒有被釋放,也就是說區域性變數x沒有被重新初始化。

注:當全域性變數不適用時,可以考慮使用閉包更安全更穩定

020 Python變數的三個特徵

對於每個變數,python都提供了這三個方法分別獲取變數的三個特徵,其中python的內建功能id 記憶體位址不一樣,則id 後列印的結果不一樣,因為每乙個變數值都有其記憶體位址,而id是用來反映變數值在記憶體中的位置,記憶體位址不同則id不同 x 10print x 獲取變數的變數值 print ...

Python初學筆記

工作需要,要接觸python的程式,學習一下 使用的3.2版本 話說比2.5變化還真多 print都變了 總體感覺,py比較perl來說,特點還是非常之強烈的 1 py可以自動字串複製 x 3 x 3 333 2 py是強型別變數,和perl不同,型別變數不能混用 3 字串連線 號和join等str...

Python 初學筆記

def to celsius t return t 32.0 5.0 9.0 在函式名後用冒號,不是等號。函式實際定義在下一行,該行縮排4個空格,並以return 標記。str t 將t轉換為字串 12 str 34 56 123456 在字串兩端的單引號或者雙引號分別替代成3個,即可擴充套件為多行...