今日內容:1、函式物件
2、命名空間
3、函式的巢狀定義
4、作用域
5、閉包函式
一、函式物件
函式名存放了函式的記憶體位址,存放了記憶體位址的變數都是物件,即 函式名 就是 物件
函式物件的應用:
1、可以直接引用
2、可以當做 函式引數 傳遞
3、可以作為函式的返回值
def fn():
print('hello')
def fn1():
print('world')
return fn
res = fn1() # fn1()的值為 函式fn1 的return值,即fn
res() # 即 此為 fn(),呼叫了 函式fn
4、可以作為容器型別的元素
二、命名空間
命名空間:存放名字與記憶體空間位址對應關係的容器
作用:解決由於名字有限,導致名字重**生衝突的問題
三種命名空間:
1. 內建 命名空間 # python直譯器內建的函式名的存放位置
2. 全域性 命名空間 # 頂級變數名的存放位置,即最高縮排級的變數名,包括頂級的if,while內的變數
3. 區域性 命名空間 # 函式中的變數名的存放位置
這三個命名空間的變數可以共存,即同乙個變數名可以同時存在於三個命名空間中
注意:del 名字:可以移除查詢最近的名字與記憶體空間位址的對應關係
載入順序:內建》全域性》區域性 | built-in > global > local
三、函式巢狀定義
在函式內定義函式的操作就是函式的巢狀定義
def outer():
num = 20
def inner():
print(num) # inner就可以直接使用outer中的名字
inner()
outer()
# 將函式直接定義到另乙個函式內部,就可以使用外部函式的中的名字
四、作用域
作用域:名字起作用的範圍
作用:解決同名字可以共存問題
四種作用域
built-in:內建作用域,所有檔案所有函式
global:全域性作用域,當前檔案所有函式
enclosing:巢狀作用域,當前函式與當前函式的內部函式
local:區域性作用域,當前函式
注:不同作用域之間名字不衝突,以達到名字的重用
查詢順序:區域性》巢狀》全域性》內建 | local > enclosing > global > built-in
len = 10
def outer():
len = 20 # 外層函式的區域性變數:enclosing - 巢狀作用域
def inner():
len = 30
print('1:', len) # 30, inner -> outer -> global -> built-in
inner()
print('2:', len) # 20, outer -> global -> built-in
outer()
print('3:', len) # 10, global -> built-in
del len
print('4:', len) # len位址, built-in
5、閉包
# closure:被包裹的函式,稱之為閉包
# 完整的閉包結構:
1.將函式進行閉包處理
2.提公升函式名的作用域,將內部函式物件作為外部函式的返回值
def outer(url):
def get_html():
html = requests.get(url)
print(html.text)
return get_html
# 先預定義多個爬蟲方法,爬頁面操作並未執行
# 什麼時候想爬什麼頁面就呼叫指定頁面的爬蟲方法
對數函式定義域和值域為r 函式的定義域(高中)
函式的定義域是我們上了高中後接觸到的新的名詞,其實相關知識我們早有接觸,其實它就是我們之前學習函式中自變數x的取值範圍,到了高中我們將這個取值範圍定義為函式的定義域。那如何理解定義域呢?數學總是抽象難理解的,函式更上如此,所以相當一部分同學聽到函式就頭皮發麻。所以為了了解抽象的定義域我先從具體的事例...
定義域是取交集嗎 數學提高復合函式定義域求法
復合函式定義域求法 對於復合函式f g x 其定義域仍為x的取值範圍,而不是g x 的範圍。相同法則下的函式f x f g x 與f h x 對應的x g x 與h x 的範圍相同。復合函式定義域 若函式y f u 的定義域是b,u g x 的定義域是a,則復合函式y f g x 的定義域是d 綜合...
geogebra中函式的定義域的輸入
ggb中函式的輸入有如下幾種方式 一 如果if做法 1 區間函式 做出函式在某區間上的圖象 f x if x 0 x 2,x 2 2x 1 2 分段函式 做出分段函式的圖象 f x if x 0 x 2,x 2 2x 1,if x 2 x 4,x 3 2x 1 3 逐點序列函式 逐點做出函式的影象 ...