當乙個函式有大量的引數時,呼叫會變得非常麻煩,我們可以通過偏函式,固定一些引數,簡化函式的呼叫。例如,
def
addaddminus
(num1, num2, num3, num4)
:return num1 + num2 + num3 - num4
print
(addaddminus(1,
2,3,
4))
執行結果如下,
2
這個addaddminus()函式包含有四個引數,下面我們使用偏函式將引數num1和引數num2固定為1和2,並重新計算。
import functools
addaddminus = functools.partial(addaddminus,1,
2)print
(addaddminus(3,
4))
執行結果如下,
2
我們也可以固定引數num2和引數num3,如下,
import functools
addaddminus = functools.partial(addaddminus, num2=
2, num3=3)
print
(addaddminus(num1=
1, num4=4)
)
注意,這時我們傳參時需要通過關鍵字傳參。
執行結果如下,
2
程式中的變數並不是在任意的位置都可以隨意訪問,在哪⾥可以訪問取決於這個變數的作⽤域,變數的作⽤域指的是變數在那段**中可以使⽤,可以使⽤變數的那段**就是變數的作⽤域。
python中的作用域有內建作用域、全域性作用域、閉包作用域和區域性作用域。
a =
max(1,
2)# 變數a服從全域性作用域,max()函式服從內建作用域
defouter
(a):
print
(a) a =
9# 閉包作用域:從定義開始到外部函式結束
print
(a) b =
90def
inner()
: a =
20# 區域性作用域:從定義開始到本函式結束
print
(a) inner(
)
2.1.1.內建作用域
內建作⽤域,是指系統內建的函式或常量,在系統載⼊時載入,在所有模組中都可以直接引⽤。內建作用域的範圍是在所有**。內建作用域具有最大的作用範圍。
我們最常見的內建作用域是系統函式。
2.1.2.全域性作用域
全域性作用域是所有函式定義外的變數作用域。全域性作用域的範圍是從定義開始到本檔案結束。全域性作用域的作用範圍僅次於內建作用域。
我們在函式定義外定義的變數都是在全域性變數範圍生效。
2.1.3.閉包作用域
閉包的外部函式中定義的變數的作用域就是閉包作用域。閉包作用域的範圍是從定義開始到外部函式結束。閉包作用域的作用範圍僅次於全域性作用域。
2.1.4.區域性作用域
內部函式中定義的變數的作用域就是區域性作用域。區域性作用域的範圍是從定義開始到本函式結束。區域性作用域的作用範圍最小。
我們編寫大段**的過程中可能會出現全域性變數和函式中的變數重名的情況,這時我們需要仔細分辨出每個變數的值,因此,我們需要牢記變數作用域的查詢規則。
變數作用域的查詢規則為:從下往上查詢(從裡往外),找離他最近的定義(不能往裡找)。
通過我們之前的學習我們知道,一般來說我們無法在函式內部對全域性變數進行修改。
但是,在一些特殊的情況下,我們需要通過函式對全域性變數進行修改,這時我們需要用到global和nonlocal來將閉包變數或者區域性變數宣告為全域性變數和閉包變數。例如,我們使用global將區域性變數x宣告為全域性變數,
def
globaldemo()
:global x # 以下引用的都是全域性變數x
x +=
10
x =10
globaldemo(
)print
(x)
執行結果如下,
20
再例如,我們使用nonlocal將區域性變數宣告為閉包向量,
def
nonlocaldemo()
: y =
9# 閉包變數
definner()
:# 不能直接修改閉包變數
nonlocal y # 可以修改閉包變數
y +=
10 inner(
)print
(y)nonlocaldemo(
)
執行結果如下,
19
python中偏函式
當乙個函式有很多引數時,呼叫者就需要提供多個引數。如果減少引數個數,就可以簡化呼叫者的負擔。比如,int 函式可以把字串轉換為整數,當僅傳入字串時,int 函式預設按十進位制轉換 int 12345 12345 但int 函式還提供額外的base引數,預設值為10表示十進位制。如果傳入base引數,...
python偏函式和高階函式 高階函式與偏函式
今天主要在這裡仔細說明一下高階函式與偏函式的知識。高階函式 在絕大多數通常的計算機語言裡,函式的引數只接受基本的資料型別或是物件的引用,返回值也只是基本資料型別或者物件引用。示例如下 function test1 else return function console.log 資料不符合規範,錯誤...
python中的偏函式partial
python的functools模組提供了很多有用的功能,其中乙個就是偏函式 partial function 要注意,這裡的偏函式和數學意義上的偏函式不一樣。在介紹函式引數的時候,我們講到,通過設定引數的預設值,可以降低函式呼叫的難度。而偏函式也可以做到這一點。舉例如下 int 函式可以把字串轉換...