中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Python偏函數用法

發布時間:2020-06-28 12:38:44 來源:億速云 閱讀:157 作者:挖挖土豆 欄目:開發技術

不懂Python偏函數用法?其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。

Python的functools模塊中有一種函數叫“偏函數”,自從接觸它以來,發現確實是一個很有用且簡單的函數,相信你看完這篇文章,你也有相見恨晚的感覺。

我們都知道,函數入參可以設置默認值來簡化函數調用,而偏函數的作用就是將入參進行默認填充,降低函數使用的難度。

如int()函數,可以將字符型轉換為整型,且默認的都是以十進制形式來轉換,那為什么一定是十進制呢?如果想用以二進制的形式轉換呢?其實我們可以看一下int函數它本身的定義偏函數,一個讓你相見恨晚的實用函數

關于Python偏函數用法

可以看到int有兩種用法,可以傳一個位置參數,還可以多傳一個關鍵字參數base,也就是基于什么格式轉換,默認不傳base參數是以十進制轉換。所以,用二進制形式轉換的話只要base=2即可(見下方代碼)

value = int('10000')
print(value)  # 10000
 
value = int('10000', base=2)
print(value)  # 16

如果每次轉換的字符串的時候都要輸入base參數,顯得很麻煩,因此偏函數的作用就體現出來了,可以使用functools.partial()函數來重新定義

from functools import partial

int2 = partial(int, base=2)
res = int2('10000')
print(res)   # 16

到這里,你應該已經感覺到了偏函數的一點點魅力吧,那我們再從多個角度進一步看透它。

自定義函數的使用

def add(a, b, c):
  print('a=',a,'b=',b,'c=',c)
  return a + b + c

add10 = partial(add, 10)
res = add10(1, 2)   # a= 10 b= 1 c= 2

如上代碼中,partial(add, 10)入參并沒有指定哪個關鍵字參數,函數卻默認的將這個值傳給了第一個參數a,那就說明,當沒有指定默認參數時,默認賦值給第一個參數,余下參數按位置參數賦值。

當入參為可變參數時

def sum(*args):
  s = 0
  for n in args:
    s += n
  return s

sum10 = partial(sum, 10)
print(sum10(1))  # 11
print(sum10())   # 10

按上述理解,沒有指定默認參數時,默認賦給第一個參數,那么第一個參數永遠是10,后面再傳入參的話就從第二個參數開始計算,因此會實現10 + 1 = 11 的結果。同樣,如果不繼續傳參的話,只有默認的10,所以結果就是10

當入參為可變關鍵字參數時

D = {'value1':10, 'value2':20}
V = {'Default':100}
def show(**kw):
  for k in kw:
    print(k, kw.get(k))

showDef = partial(show, **V)
showDef(**D)
# Default 100
# value1 10
# value2 20

同理,此時入參由于是可變參數,因此默認是第一個傳入,先打印Default關鍵字,這里關注一下函數的寫法,可變關鍵字參數要寫成(**V)

當入參為限制的關鍵字參數時

def student(name, * , age, city):
  print('name:',name, 'age:',age, 'city:',city)

studentAge = partial(student, age=20)
studentAge('Tom','Beijing')
# TypeError: student() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given

我們知道,當用*號分隔開,表示后面的關鍵字參數是必傳的,因此對于默認參數也是同樣適用,即當參數為必傳時,偏函數也需要對每個關鍵字參數設置默認值。因此修改后為

studentAge = partial(student, age=20, city='Beijing')
studentAge('Tom') # name: Tom age: 20 city: Beijing

感謝你能夠認真閱讀完這篇文章,希望小編分享關于Python偏函數用法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

启东市| 黑河市| 蓝田县| 长武县| 嘉黎县| 漳州市| 安西县| 民权县| 沙雅县| 余姚市| 山丹县| 新巴尔虎左旗| 突泉县| 闽清县| 临海市| 泰州市| 丹阳市| 迭部县| 陆川县| 文昌市| 辽中县| 韩城市| 望奎县| 繁峙县| 安义县| 马龙县| 全南县| 十堰市| 裕民县| 文安县| 资溪县| 崇阳县| 广宁县| 阿坝县| 乐至县| 紫阳县| 繁峙县| 秦皇岛市| 张家口市| 富裕县| 通榆县|