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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数进阶

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数进阶 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

命名空間一共分為三種:

  全局命名空間

  局部命名空間

  內置命名空間

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

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

加載順序:內置命名空間(程序運行前加載)->全局命名空間(程序運行中:從上到下加載)->局部命名空間(程序運行中:調用時才加載)

取值:

  在局部調用:局部命名空間->全局命名空間->內置命名空間

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

  在全局調用:全局命名空間->內置命名空間

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

?

?

作用域

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

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

局部作用域:局部名稱空間,只能在局部范圍生效

globals和locals方法

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

global關鍵字

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


函數的嵌套和作用域鏈

函數的嵌套調用

函數的嵌套定義

?

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

?

a in f1 : 1

nonlocal關鍵字

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

?

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

?

函數名的本質

函數名本質上就是函數的內存地址

?

1.可以被引用

?

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

?

2.可以被當作容器類型的元素

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

閉包

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

閉包函數:

內部函數包含對外部作用域而非全劇作用域名字的引用,該內部函數稱為閉包函數
#函數內部定義的函數稱為內部函數

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

我們都知道函數內的變量我們要想在函數外部用,可以直接返回這個變量,那么如果我們想在函數外部調用函數內部的函數呢?

是不是直接就把這個函數的名字返回就好了?

這才是閉包函數最常用的用法

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

判斷閉包函數的方法__closure__

#輸出的__closure__有cell元素 :是閉包函數 def func():name = 'eva' def inner(): print(name) print(inner.__closure__) return inner f = func() f() #輸出的__closure__為None :不是閉包函數 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()


轉載于:https://www.cnblogs.com/limengishero/p/10007091.html

總結

以上是生活随笔為你收集整理的函数进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。