一:函數的嵌套
函數的嵌套定義是指一個函數裏用def語句來創建其它的函數。(在一個函數def的內部,還有其它的def語句)
示例:
def fn_outer():
print(‘fn_outer被調用!’)
def fn_inner():
print(‘fn_inner被調用’)
fn_inner()
fn_inner()
print(‘fn_outter調用結束’)
fn_outer()
print(‘==========’)
fx = fn_outer()
fx()
分析:在程序外部首先定義一個函數:fn_outer,並調用打印輸出,接着在函數fn_outer內部又定義了一個函數:fn_inner,並在內部調用兩次,最後函數fn_outter調用結束。代碼如下圖:
二:python的作用域
1、作用域也叫名字空問,是訪問變量時,查找變量名的範圍空間。
2、Python的四個作用域(LEGB)
局部作用域 Local function(局部函數的作用域)
外部嵌套函數作用域 Enclosing Function Locals
函數定義所在模塊(文件)的作用域 Global(Mudule)
Python內置模塊的作用域 Builtin(python)
3、變量名的查找規則
L –》E—》G—》B
在默認情況下,對變量名賦值會創建或改變本作用域內的變量
三:global語句
1、作用:
告訴解釋器,global語句聲明的一個或多個變量,這些變量的作用域爲模塊級的作用域,也稱全局變量。全局聲明(global)將變量賦值映射到模塊文件內部的作用域。
2、語法:
global 變量1,變量2,……
示例:
V = 100
def fn():
global v
v = 200
fn()
print(v)
說明:
全局變量如果要在函數內部被賦值,則必須經過全局聲明(否則會被認爲是局部變量)
全局變量在函數內部不經過聲明就可以直接訪問
不能先聲明局部的變量,再用global聲明爲全局變量,此做法不符合規則
Global變量列表裏的變量不能出現在此作用域內的形參列表裏。
三:nonlocal語句
1、作用:
告訴解釋器,nonlocal聲明的變量不是局部變量,也不是全局變量,而是外部嵌套函數內的變量。
語法:
nonlocal 變量名1, 變量名2,……
說明:
1、語句只能在被嵌套函數內部進行使用。
2、訪問nonlocal變量將外部嵌套函數的作用域的變量進行操作
3、當有兩層或兩層以上的函數嵌套時,訪問nonlocal變量只對最近一層的變量進行操作。
4、Nonlocal語句的變量列表裏的變量名,不能出現在此函數的參數列表中。
四:Lambda表達式(又稱匿名函數)
1、作用:
創建一個匿名函數對象,同def類似,但不提供函數名。
2、語法:
Lambda[參數1,參數2,……]:表達式 []裏的內容可以省略
3、示例:
def myadd(x, y)
return x + y
以上函數可以改寫爲:
myadd = lambda x, y : x + y
print(‘2 + 3 = ‘, myadd(x, y))
4、語法說明:
1、lambda只是一個表達式,它用來創建一個函數對象。
2、當lambda表達式調用時,先執行冒號後(:)的表達式,並返回表達式的結果的引用。
3、Lambda表達式創建的函數只能包含一條‘表達式’。
4、Lambda比函數簡單,且可以隨時創建和銷燬,有利於減少程序的偶合度(函數各個模塊之間的牽連關係)。
五:練習
1、寫一個lambda表達式,判斷這個數的2次方+1是否能被2整除,如果能整除返回True,否則返回False。
說明:
此時lambda的參數一個,表達式返回的值是這個數的平方加1。
2、寫一個lambda表達式,求兩個變量的最大值。
說明:lambda有兩個參數(x, y),表達式爲max(x, y)
推薦我們的Python學習扣qun:784758214 ,看看前輩們是如何學習的!從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF,實戰源碼】,零基礎到項目實戰的資料都有整理。送給每一位python的小夥伴!每天都有大牛定時講解Python技術,分享一些學習的方法和需要注意的小細節,點擊加入我們的 python學習者聚集地
總結:
函數的作用域一共有4種,global聲明的是全局變量,如在外部函數嵌套裏聲明瞭global,會把局部變量變爲全局變量輸出;Nonloca只能在嵌套的函數內部使用,改變的是外部函數的變量;lambda是可以實現和函數一樣功能的語句。有關函數等內容小編就介紹到這裏,如果朋友們喜歡小編的內容,請加粉、互評、關注!謝謝!