Python中語法糖及帶參語法糖

2022-05-09 02:57:07 字數 1003 閱讀 5939

在python中,@符號常被稱作語法糖(裝飾器),在某函式定義時,用以包裝該函式,以達到擷取,控制該函式的目的。

def d(f):

print('d...')

k=f #此處保留了傳進來的原函式 f

def f(x):

return k(x)*2

return f #此處不能寫成f(x),f是函式控制代碼,如果帶(),則呼叫,這裡只返回控制代碼。

@ddef e(x):

return x**2

print(e(3))

比如上面**,@d,就等價於e=d(e),d(e)的返回值為f,f在d中是乙個函式控制代碼,e也是乙個函式控制代碼,返回值是正確的,但經過語法糖後,此時的e不再是原來的e,而是d返回的f,再呼叫e(x),其實是呼叫f(x),也就是d(f)(x),通過k=f,將傳進來的原函式儲存至k中,以備後用。所以該裝飾器的作用就是將原函式的返回值擴大2倍。

d...

18

列印值如上,證明確實將原函式返回值擴大了2倍。

語法糖也可以帶引數,如下**:

def

a(x,y):

defb(f):

k=fdeff(z):

return x*y*k(z)

return

f

return

b@a(2,3)

defe(x):

return x**2

print(e(5))

同樣的,@a(2,3)等價於e=a(2,3)(e),說明a(x,y)應該返回乙個函式控制代碼,並且該函式控制代碼需要將e函式控制代碼作為引數傳入,而這個函式控制代碼就是**中的b,也就是說真正的裝飾器是b,然後在b中,通過k=f,將傳入的原函式控制代碼儲存起來,當呼叫被包裝後的e時,實際是呼叫了f,而f返回x*y*k(z),即將原函式返回值擴大x*y倍後,再返回。

150

python 語法糖太多 python 語法糖

匿名函式 lamda表示式 def add x,y return x y 等價於f lamda x,y x y f 1,2 三元表示式 wefx 1 y 2 c x if x map對映關係 def square x return x x list x 1,3,10 list r map squar...

Python 的 with 語法糖

python 內建了 sqlite3 模組,可以方便地呼叫 sqlite 資料庫。import sqlite3 conn sqlite3.connect test.db cur conn.cursor cur.execute create table students id bigint prima...

Python語法糖介紹

作為一門優秀的指令碼語言,python在語法層面提供了很多好玩又實用的語法,俗稱語法糖,正確的使用這些技巧能讓 看起來更優雅,更pythonic,這裡列舉幾個。usr bin env python3 defmain animals cat dog bird pig if dog in animals...