什麼是python函數的嵌套和作用域?lambda與函數有什麼不同?

一:函數的嵌套

函數的嵌套定義是指一個函數裏用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是可以實現和函數一樣功能的語句。有關函數等內容小編就介紹到這裏,如果朋友們喜歡小編的內容,請加粉、互評、關注!謝謝!

發佈了54 篇原創文章 · 獲贊 68 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章