国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python學習

Cristic / 1335人閱讀

摘要:作為高階函數,事實上它把運算規則抽象了,因此,我們不但可以計算簡單的,還可以計算任意復雜的函數,比如,把這個所有數字轉為字符串只需要一行代碼。

Python 學習 函數式編程 高階函數 Higher-order function

變量可以指向函數

以Python內置的求絕對值的函數abs()為例

>>> f

>>> f(-10)
10

函數名也是變量

>>> abs = 10
>>> abs(-10)

注:由于abs函數實際上是定義在import builtins模塊中的,所以要讓修改abs變量的指向在其它模塊也生效,要用import builtins; builtins.abs = 10。

傳入函數

def add(x, y, f):
    return f(x) + f(y)
add(1,2,abs)    
map函數

map()函數接收兩個參數,一個是函數,一個是Iterable,map將傳入的函數依次作用到序列的每個元素,并把結果作為新的Iterator返回。

比如有一個函數f(x)=x2,要把這個函數作用在一個list [1, 2, 3, 4, 5, 6, 7, 8, 9]上

def f(x):
  return x * x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

map()傳入的第一個參數是f,即函數對象本身。由于結果r是一個Iterator,Iterator是惰性序列,因此通過list()函數讓它把整個序列都計算出來并返回一個list。

map()作為高階函數,事實上它把運算規則抽象了,因此,我們不但可以計算簡單的f(x)=x2,還可以計算任意復雜的函數,比如,把這個list所有數字轉為字符串:

list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
只需要一行代碼。
reduce函數

把一個函數作用在一個序列[x1, x2, x3, ...]上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素做累積計算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方說對一個序列求和,就可以用reduce實現:

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

當然求和運算可以直接用Python內建函數sum(),沒必要動用reduce。

但是如果要把序列[1, 3, 5, 7, 9]變換成整數13579,reduce就可以派上用場:

>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579

如果考慮到字符串str也是一個序列,對上面的例子稍加改動,配合map(),我們就可以寫出把str轉換為int的函數:

>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> def char2num(s):
...     digits = {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9}
...     return digits[s]
...
>>> reduce(fn, map(char2num, "13579"))
13579

整理成一個str2int的函數就是:

from functools import reduce

DIGITS = {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9}

def str2int(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(s):
        return DIGITS[s]
    return reduce(fn, map(char2num, s))

還可以用lambda函數進一步簡化成:

from functools import reduce

DIGITS = {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9}

def char2num(s):
    return DIGITS[s]

def str2int(s):
    return reduce(lambda x, y: x * 10 + y, map(char2num, s))

假設Python沒有提供int()函數,你完全可以自己寫一個把字符串轉化為整數的函數,而且只需要幾行代碼

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41582.html

相關文章

  • 關于Python的三個謊言,別再盲目學Python

    摘要:關于的三個謊言,你一定要清楚。這是的整個知識體系圖譜,對于新手來說,沒必要學那么多。第四自動化測試一切關于自動化的東西,似乎都可以滿足,可以滿足大多數自動化工作,提升工作效率。這都是正常的,千萬別急著否定自己,懷疑自己。 ...

    TZLLOG 評論0 收藏0
  • 干貨 | 學習Python的正確姿勢

    摘要:勤學學習效率與效果取決于執行力。這一步學習的正確姿勢是在實踐操作中發掘問題,然后帶著問題找答案。拆分任務將目標分解成具體可執行的學習任務。勤學強大的執行力是學習的根本保障。分享復述檢驗學習成果,提高學習效果的最好方法。 showImg(https://segmentfault.com/img/bVbcPGZ?w=256&h=256); 前段時間和大家一起分享了一篇關于學習方法內容《大牛...

    Thanatos 評論0 收藏0
  • [譯]學習Python編程的19個資源

    摘要:它需要將近美元才能買到,但是你可以下載免費的和版本。在需要花費美元來開始你的學習,將會有超過頁的內容和個多小時的視頻供你訪問,還包括以后可以免費更新。 showImg(https://segmentfault.com/img/bVrJpw); 用Python編寫代碼一點都不難,事實上它一直被贊譽為最容易學的編程語言。如果你準備學習web開發, Python是一個不錯的開始,甚至想做游戲...

    xiguadada 評論0 收藏0
  • SegmentFault 技術周刊 Vol.30 - 學習 Python 來做一些神奇好玩的事情吧

    摘要:學習筆記七數學形態學關注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。學習筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現代方法基于區域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個提問: pyth...

    lifesimple 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<