python中的偏函式和變數作用域

2021-10-02 22:09:55 字數 2489 閱讀 9048

當乙個函式有大量的引數時,呼叫會變得非常麻煩,我們可以通過偏函式,固定一些引數,簡化函式的呼叫。例如,

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 函式可以把字串轉換...