91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Pyhton學習之 函數式編程

發布時間:2020-07-11 18:16:18 來源:網絡 閱讀:190 作者:nineteens 欄目:編程語言

  函數式編程

  面向過程的程序設計

  基本單元,函數

  函數時編程:允許把函數本身作為參數傳入另一個函數,還允許返回一個函數!

  高階函數

  abs(-10)是函數調用,abs是函數本身

  要獲得調用結果,我們可以把結果賦值給變量

  也可以把函數本身賦給變量,即變量指向函數,這樣可以實現通過變量來調用函數

  >>> abs

  >>> f=abs

  >>> f(-10)

  10

  說明變量f現在已經指向了abs函數本身,直接調用abs()函數和調用f()完全相同

  函數名也是變量

  函數名就是指向函數的變量,

  如果把abs指向其他對象呢?

  >>> abs(-2)

  Traceback (most recent call last):

  File "", line 1, in

  TypeError: 'int' object is not callable

  指向其他對象后,就暫時沒有原來功能了

  傳入函數

  高階函數,在一個函數中能調用另一個函數

  map/reduce

  map

  >> 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,

  L = []

  for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:

  L.append(f(n))

  print(L)

  reduce 看官網吧

  filter

  正確實現篩選功能

  用于過濾序列,例如刪掉偶數只保留奇數,把一個序列的空字符串去掉

  def not_empty(s):

  return s and s,strip()

  list(filter(not_empty,['A','','B',None ,'c','d']))

  #結果是 ['A','b','c']

  sorted(排序算法)

  內置sorted()函數可以對list排序

  >>> sorted([1,2,7,6,5,4])

  [1, 2, 4, 5, 6, 7]

  sorted()函數也是一個高階函數,他還可以接收一個key函數來實現自定義的排序,例如按照絕對值大小排序

  >>> sorted([3,5,-1,-2],key=abs)

  [-1, -2, 3, 5]

  key指定的函數將作用在list的每一個元素上,并根據key函數返回的結果進行排序,對比原來的list和經過key=abs處理過的lsit:

  >>> sorted([3,5,-1,-2],key=abs)

  [-1, -2, 3, 5]

  然后按照key進行排序

  sort也可以給字符串排序

  >>> sorted(['bob', 'about', 'Zoo', 'Credit'])

  ['Credit', 'Zoo', 'about', 'bob']

  按照accii碼值來排序的

  >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)

  ['about', 'bob', 'Credit', 'Zoo']

  要進行反向排序,不必改動key,可以傳入的三個參數reverse=Ture

  >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)

  ['Zoo', 'Credit', 'bob', 'about']

  高階函數的抽象能力是非常強大的,而且核心代碼可以保持非常簡潔

  函數作為返回值

  寫完一個求和函數后,不需要立刻求和,而是在后面的代碼中根據需要再計算怎么辦,可以不返回求和的結果,而是返回求和的函數

  返回函數沒有立刻執行,而是在主函數中調用了才被執行

  閉包無錫看婦科的醫院 http://www.ytsgfk120.com/

  在IDLE中寫程序的時候要在最后加上print(),因為他不是交互環境!!!

  def count():

  fs = []

  for i in range(1, 4):

  def f():

  return i*i

  fs.append(f)

  return fs

  f1,f2,f3= count()#借用count來調用函數!!!

  print(f1())

  print(f2())

  print(f3())

  牢記:

  返回函數不要引用任何的循環變量,或者后續會發生變化的變量

  如果一定要引用循環變量,需要再創建一個函數,用該函數的參數綁定循環變量的值

  def count():

  def f(j):

  def g():

  return j*j

  return g

  fs=[]

  for i in range(1,4):

  fs.append(f(i))#f立刻被執行,因此i的當前值被傳入f()

  return fs

  f1,f2,f3 = count()

  print(f1())

  print(f2())

  缺點:代碼較長,可利用lambda函數縮短代碼

  小結:

  一個函數可以返回一個計算結果,也可以返回一個函數。

  返回一個函數時,牢記該函數并未執行,返回函數中不要引用任何可能會變化的量。

  匿名函數

  好處:因為函數沒有名字,不必擔心函數名沖突

  沒有return語句

  s=list(map(lambda x:x*x,[1,2,3,4,5,6,7,8,9]))

  print(s)

  實際上就是

  def f(x):

  return x*x

  關鍵字lambda表示匿名函數,冒號前面的x表示函數參數

  匿名函數有個限制,就是只能有一個表達式,不用寫return語句,返回值就是該表達式的結果

  匿名函數也是一個函數對象,可以把匿名函數賦給一個變量,再利用變量+參數 來調用函數,

  f=lambda x:x*x

  print(f(4))

  可以把匿名函數作為返回值返回

  裝飾器

  在代碼運行期間動態增加功能的方式,稱之為“裝飾器”decoator

  偏函數

  int轉換其他類型的時候,默認按十進制轉換

  要想轉化為二進制 int(x,base=2)

  如果嫌一直寫太麻煩,可以定義一個函數啊

  def int2(x,base=2):

  return int(x,base)

  偏函數

  functools.partial幫助我們創建一個偏函數,不需要我們自己定義int2(),可以直接使用下面的代碼創建一個新的函數

  import functools

  int2=functools.partial(int base=2)

  int2('100000')

  64

  funtools.partial的作用就是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單。

  小結:

  當函數的參數過多,需要簡化時,使用functools.partial可以創建一個新的函數,這個新函數可以固定住原函數的部分參數,從而在調用的時候更簡單。


向AI問一下細節

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

AI

阳原县| 宾阳县| 常山县| 东乡县| 海伦市| 报价| 咸宁市| 蕲春县| 奉化市| 舒兰市| 贵阳市| 五寨县| 衡山县| 双柏县| 岫岩| 金沙县| 农安县| 徐汇区| 西平县| 常宁市| 侯马市| 定襄县| 凤城市| 五台县| 津南区| 精河县| 八宿县| 枣阳市| 运城市| 巴青县| 罗山县| 潞城市| 大关县| 延寿县| 博湖县| 华安县| 疏附县| 阳江市| 平塘县| 永泰县| 九寨沟县|