日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

函数进阶

發(fā)布時(shí)間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数进阶 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

命名空間一共分為三種:

  全局命名空間

  局部命名空間

  內(nèi)置命名空間

*內(nèi)置命名空間中存放了python解釋器為我們提供的名字:input,print,str,list,tuple...它們都是我們熟悉的,拿過(guò)來(lái)就可以用的方法。

三種命名空間之間的加載與取值順序:

加載順序:內(nèi)置命名空間(程序運(yùn)行前加載)->全局命名空間(程序運(yùn)行中:從上到下加載)->局部命名空間(程序運(yùn)行中:調(diào)用時(shí)才加載)

取值:

  在局部調(diào)用:局部命名空間->全局命名空間->內(nèi)置命名空間

x = 1 def f(x):print(x)print(10)

  在全局調(diào)用:全局命名空間->內(nèi)置命名空間

x = 1 def f(x):print(x)f(10) print(x) print(max)

?

?

作用域

作用域就是作用范圍,按照生效范圍可以分為全局作用域和局部作用域。

全局作用域:包含內(nèi)置名稱空間、全局名稱空間,在整個(gè)文件的任意位置都能被引用、全局有效

局部作用域:局部名稱空間,只能在局部范圍內(nèi)生效

globals和locals方法

print(globals()) print(locals()) def func():a = 12b = 20print(locals())print(globals()) func()

global關(guān)鍵字

a = 10 def func():global aa = 20print(a) func() print(a)


函數(shù)的嵌套和作用域鏈

函數(shù)的嵌套調(diào)用

函數(shù)的嵌套定義

?

def f1():a = 1def f2():a = 2f2()print('a in f1 : ',a)f1()

?

a in f1 : 1

nonlocal關(guān)鍵字

# 1.外部必須有這個(gè)變量
# 2.在內(nèi)部函數(shù)聲明nonlocal變量之前不能再出現(xiàn)同名變量
# 3.內(nèi)部修改這個(gè)變量如果想在外部有這個(gè)變量的第一層函數(shù)中生效

?

def f1():a = 1def f2():nonlocal aa = 2f2()print('a in f1 : ',a)f1()

?

函數(shù)名的本質(zhì)

函數(shù)名本質(zhì)上就是函數(shù)的內(nèi)存地址

?

1.可以被引用

?

def func():print('in func') f = func print(f)

?

2.可以被當(dāng)作容器類型的元素

def f1():print('f1') def f2(): print('f2') def f3(): print('f3') l = [f1,f2,f3] d = {'f1':f1,'f2':f2,'f3':f3} #調(diào)用 l[0]() d['f2']()

閉包

def func():name = 'eva'def inner(): print(name)

閉包函數(shù):

內(nèi)部函數(shù)包含對(duì)外部作用域而非全劇作用域名字的引用,該內(nèi)部函數(shù)稱為閉包函數(shù)
#函數(shù)內(nèi)部定義的函數(shù)稱為內(nèi)部函數(shù)

由于有了作用域的關(guān)系,我們就不能拿到函數(shù)內(nèi)部的變量和函數(shù)了。如果我們就是想拿怎么辦呢?返回呀!

我們都知道函數(shù)內(nèi)的變量我們要想在函數(shù)外部用,可以直接返回這個(gè)變量,那么如果我們想在函數(shù)外部調(diào)用函數(shù)內(nèi)部的函數(shù)呢?

是不是直接就把這個(gè)函數(shù)的名字返回就好了?

這才是閉包函數(shù)最常用的用法

def func():name = 'eva'def inner(): print(name) return inner f = func() f()

判斷閉包函數(shù)的方法__closure__

#輸出的__closure__有cell元素 :是閉包函數(shù) def func():name = 'eva' def inner(): print(name) print(inner.__closure__) return inner f = func() f() #輸出的__closure__為None :不是閉包函數(shù) name = 'egon' def func2(): def inner(): print(name) print(inner.__closure__) return inner f2 = func2() f2()

def wrapper():money = 1000def func():name = 'eva' def inner(): print(name,money) return inner return func f = wrapper() i = f() i()


轉(zhuǎn)載于:https://www.cnblogs.com/limengishero/p/10007091.html

總結(jié)

以上是生活随笔為你收集整理的函数进阶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。