當前位置:編程學習大全網 - 編程語言 - Python 有哪些好玩的語法糖

Python 有哪些好玩的語法糖

當然是函數式那壹套黑魔法啦,且聽我細細道來。

lambda表達式

也就是匿名函數。

用法:lambda 參數列表 : 返回值

例:

+1函數

f=lambda x:x+1

max函數(條件語句的寫法如下)

f_max=lambda x,y:x if x>y else y

上述定義的函數與用def定義的函數沒有區別,而且左邊的f=在某些情況下並不是必要的。

filter,map,reduce

filter函數接受兩個參數,第壹個是過濾函數,第二個是可遍歷的對象,用於選擇出所有滿足過濾條件的元素,不同版本的filter的返回值稍有區別,我用的是python3.5,filter返回的是經過過濾的可遍歷對象。

例:

去除小寫字母

s=filter(lambda x:not str(x).islower(),"asdasfAsfBsdfC")

for ch in s:

print(ch)

map函數接受的參數類型與filter類似,它用於把函數作用於可遍歷對象的每壹個元素。類似於數學中映射的概念。

例:

求y=2x+1(偷偷用了壹下range函數生成定義域)

s=map(lambda x:2*x+1,range(6))

for x in s:

print(x)

reduce函數對每個元素作累計操作,它接受的第壹個參數必須是有兩個參數的函數。

例:

求和

from functools import reduce

s=reduce(lambda x,y:x+y,range(1,6))

print(s)

求乘積(第三個可選參數表示累計變量的初值)

from functools import reduce

s=reduce(lambda x,y:x*y,range(1,6),1)

print(s)

柯裏化(curry)函數

如果壹個函數需要2個參數,而妳只傳入壹個參數,那麽妳就可以得到壹個柯裏化的函數,這是函數式編程語言的重要特性之壹,遺憾的是,python並不能在語法層面支持柯裏化調用,但它在庫中提供了接口。

例:

*3函數

f_mul=lambda x,y:x*y

from functools import partial

mul3=partial(f_mul,3)

print(mul3(1))

print(mul3(6))

打包與解包

有點類似於函數式中的模式匹配,略牽強。

t=(1,2,3)

x,y,z=t

列表生成式

這個也有點牽強,不知道嚴格意義上講屬不屬於函數式風格。

例:生成奇數序列

l=[2*x+1 for x in range(10)]

for i in l:

print(i)

最後來壹個彩蛋(以前某答主提到的用調分函數來美顏的算法,忘了出處了,侵刪)

from PIL import Image

from math import sqrt

im = Image.open("a.jpg")

ret= im.convert(mode="RGB")

ret = ret.point(lambda x:sqrt(x)*sqrt(255))

ret.save("b.jpg")

  • 上一篇:遂寧交通運輸的變化
  • 下一篇:充電樁迎來最佳布局機會
  • copyright 2024編程學習大全網