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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python在工厂中的应用_什么是工厂函数?Python 中工厂函数怎么理解?

發布時間:2023/12/19 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python在工厂中的应用_什么是工厂函数?Python 中工厂函数怎么理解? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其實談工廠函數前必須首先把嵌套作用域和閉包講清楚

python有一個很有意思的地方,就是def函數可以嵌套在另一個def函數之中。調用外層函數時,運行到的內層def語句僅僅是完成對內層函數的定義,而不會去調用內層函數,除非在嵌套函數之后又顯式的對其進行調用。

x = 99

def f1():

x = 88

def f2():

print(x)

f2()

f1()

88

可以看出,f1中的嵌套變量x覆蓋了全局變量x=99,然后f2中的本地變量按照引用規則,就引用了x=88。

下面我們來說說嵌套作用域的一個特殊之處:

本地作用域在函數結束后就立即失效,而嵌套作用域在嵌套的函數返回后卻仍然有效。

def f1():

x = 88

def f2():

print(x)

return f2

action = f1()

action()

88

這個例子非常重要,也很有意思,函數f1中定義了函數f2,f2引用了f1嵌套作用域內的變量x,并且f1將函數f2作為返回對象進行返回。最值得注意的是我們通過變量action獲取了返回的f2,雖然此時f1函數已經退出結束了,但是f2仍然記住了f1嵌套作用域內的變量名x。

上面這種語言現象稱之為閉包:一個能記住嵌套作用域變量值的函數,盡管作用域已經不存在。

這里有一個應用就是工廠函數,工廠函數定義了一個外部的函數,這個函數簡單的生成并返回一個內嵌的函數,僅僅是返回卻不調用,因此通過調用這個工廠函數,可以得到內嵌函數的一個引用,內嵌函數就是通過調用工廠函數時,運行內部的def語句而創建的。

def maker(n):

k = 8

def action(x):

return x ** n + k

return action

f = maker(2)

print(f)

.action at 0x00000000021C51E0>

再看一個例子:

def maker(n):

k = 8

def action(x):

return x ** n + k

return action

f = maker(2)

print(f(4))

24

這里我們可以看出,內嵌的函數action記住了嵌套作用域內得兩個嵌套變量,一個是變量k,一個是參數n,即使后面maker返回并退出。我們通過調用外部的函數maker,得到內嵌的函數action的引用。這種函數嵌套的方法在后面要介紹的裝飾器中會經常用到。這種嵌套作用域引用,就是python的函數能夠保留狀態信息的主要方法了。

這里接著說說另一個關鍵字nonlocal

本地函數通過global聲明對全局變量進行引用修改,那么對應的,內嵌函數內部想對嵌套作用域中的變量進行修改,就要使用nonlocal進行聲明。

def test(num):

in_num = num

def nested(label):

nonlocal in_num

in_num += 1

print(label, in_num)

return nested

F = test(0)

F('a')

F('b')

F('c')

a 1

b 2

c 3

這里我們可以看到幾個點,我們在nested函數中通過nonlocal關鍵字引用了內嵌作用域中的變量in_num,那么我們就可以在nested函數中修改他,即使test函數已經退出調用,這個“記憶”依然有效。

再最后一個例子:

def test(num):

in_num = num

def nested(label):

nonlocal in_num

in_num += 1

print(label, in_num)

return nested

F = test(0)

F('a')

F('b')

F('c')

G = test(100)

G('mm')

a 1

b 2

c 3

mm 101

多次調用工廠函數返回的不同內嵌函數副本F和G,彼此間的內嵌變量in_num是彼此獨立隔離的。

更系統、更深入的探討歡迎進入我們的專欄《Python數據科學之路》:醬油哥:來吧,一起踏上Python數據科學之路?zhuanlan.zhihu.com

本專欄仿照美劇的劇集編排方式和整體邏輯架構進行組織,目前策劃共分為七季:

第一季:Python編程語言核心基礎。

第二季:Python數據分析基本工具。

第三季:機器學習線性代數核心-Python描述。

第四季:利用python進行時間序列分析。

第五季:機器學習概率統計核心-Python描述。

第六季:機器學習典型算法專題。

第七季:實戰熱點深度應用。

讓我們一步一個臺階,共同踏上Python數據科學之旅。

總結

以上是生活随笔為你收集整理的python在工厂中的应用_什么是工厂函数?Python 中工厂函数怎么理解?的全部內容,希望文章能夠幫你解決所遇到的問題。

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