Python基礎語法07 匿名函式 裝飾器 偏函式

2021-09-24 22:12:41 字數 4242 閱讀 9397

匿名函式:無需定義名字的一類函式。

定義匿名函式使用關鍵字lambda

lambda結構體要比def簡單的多,它只有一條語句。

語法:lambda 引數列表:表示式

表示式的結果就是匿名函式的返回值。

引數列表:引數與引數之間使用逗號隔開。

優點:無需定義函式名,不會發生函式名衝突

匿名函式的呼叫:

將定義的匿名函式賦值給乙個變數,通過呼叫這個變數來呼叫的匿名函式。

引數列表中有幾個引數,那麼我們就傳遞幾個引數。

mysum = lambda a,b:a+b

print(mysum(10,20))

使用匿名函式完成返回兩個數之間最小值。

mymin = lambda a,b: a if aprint(mymin(12,34))

print(mymin(12,12))

裝飾器:在**執行的期間動態增加功能的方式我們稱之為裝飾器。

最簡單的裝飾器的語法:

def outer(func):

def inner():

#新增要新增功能

return func()

return inner

外函式:

功能:1.將被裝飾的函式傳遞進去

2.將裝飾好的替代版的函式返回

內函式:

功能:1.新增要裝飾的功能

2.執行被裝飾的函式

def nowouter(func): #func = now

def inner():

print("**********")

return func()

return inner

def nowouter2(func): #func = now

def inner():

print(「")

res = func()

print(res)

print("

」)return res

return inner

@nowouter2

def now():

return 「2019-4-29」

res = now()
print(res)

2019-4-29

@裝飾器名字

當我們將@裝飾器新增到某個函式的頭上的時候,@符號它的作用:

它會將這個函式的函式名作為引數傳遞給裝飾器,然後返回乙個替代版的函式。

當我們呼叫被裝飾的函式的時候,其實相當於呼叫的是替換版的函式。

在替代版的函式中執行的內容,其實就是相當於呼叫被裝飾函式執行的。

注意:當被裝飾的函式【原函式】**現返回值【被裝飾的函式中有return的時候】

這時候我們在內函式中就必須使用return,將原函式計算的結果返回。

複雜點的裝飾器:

def outer(func):

def inner(引數列表):

#增加的功能

return func(引數列表)

return inner

外函式:

1.將被裝飾的函式作為引數傳進來

2.將裝飾好的函式作為替代版的函式返回

內函式:

1.接收被裝飾函式的引數列表

2.新增裝飾的功能

3.執行被裝飾的函式

對年齡進行過濾,要求不能更改我之前的函式,

你要完成過濾的功能.[0,160]

def ageouter(func):

def inner(age):

if age>=0 and age<=160:

func(age)

else:

print(「年齡非法」)

return inner

將setage —》 func

age —》 inner(age)

setage相當於呼叫inner

@ageouter

def setage(age):

print(「我今年%d歲」%age)

需求:對user,psd進行過濾

要求user由數字字母下劃線組成,不能以數字開頭,5~8位

psd 必須6位的數字。

『』』def userleal(user):

# 由數字字母下劃線組成

for x in user:

if x >= 『0』 and x <= 『9』 or x == 「_」 or x >= 『a』 and x <= 『z』 or x >= 『a』 and x <= 『z』:

pass

else:

# print(「使用者名稱只能由數字字母下劃線組成!!」)

return false #非法

else:

return true #合法

def isstartnum(user):

if user[0] >= 「0」 and user[0] <= 『9』:

# print(「使用者名稱不能以數字開頭」)

return true

else:

return false

def loginouter2(func):

def inner(user,psd):

if not isstartnum(user) and len(user)>=5 and len(user)<=8 and userleal(user) :

if len(psd)==6 and psd.isdigit():

return func(user,psd)

else:

else:

print(「使用者名稱非法。。」)

return inner

def loginouter(func):

def inner(user,psd):

if len(user)>=5 and len(user)<=8:

if user[0]>=「0」 and user[0]<=『9』:

print(「使用者名稱不能以數字開頭」)

else:

for x in user:

if x>=『0』 and x<=『9』 or x=="_" or x>=『a』 and x<=『z』 or x>=『a』 and x<=『z』:

pass

else:

print(「使用者名稱只能由數字字母下劃線組成!!」)

return

else:

#使用者名稱合法

if len(psd) == 6 and psd.isdigit():

return func(user,psd)

else:

print(「密碼錯誤」)

print(「使用者名稱長度不合法」)

return inner

@loginouter2

def login(user,psd):

if user == 「admin」 and psd == 「123456」:

return true #登入成功

else:

return false #登入失敗

print(login(「a22111」,「123456」))

print(login(「a22111」,「12345」))

print(login(「admin」,「123456」))

偏函式:

功能:將函式中的某些引數固定住,返回乙個新的函式,這個函式使用起來會更簡單,

類似於我們的預設引數實現的功能。

functools.partial(func,要固定的引數)

import functools

print(int(「10010」,2))

def int2(numstr,base=2):

return int(numstr,base)

int3 = functools.partial(int,base=2)

print(int3(「10010」))

print(int3(「10」,base=8))

使用偏函式求任意數與100之和。

import operator

print(operator.add(100,10))

add2 = functools.partial(operator.add,100)

print(add2(100))

def func(a,b):

return a+b

func2 = functools.partial(func,b=100)

print(func2(100))

Python語法基礎(四)匿名函式 檔案操作

nums 111,5,2,5,6,33,55,33,5226,526,5 nums.sort 對列表nums的值從小到大排序 nums.sort reverse true 先對列表nums的值從小到大排序,然後反轉,相當於從大到小排序 nums.reverse 對列表nums反轉 如果列表的的元素值...

Python基礎07 函式

函式最重要的目的是方便我們重複使用相同的一段程式。將一些操作隸屬於乙個函式,以後你想實現相同的操作的時候,只用呼叫函式名就可以,而不需要重複敲所有的語句。函式的定義 首先,我們要定義乙個函式,以說明這個函式的功能。def square sum a,b c a 2 b 2 return c 這個函式的...

Python基礎07 函式

函式最重要的目的是方便我們重複使用相同的一段程式。將一些操作隸屬於乙個函式,以後你想實現相同的操作的時候,只用呼叫函式名就可以,而不需要重複敲所有的語句。首先,我們要定義乙個函式,以說明這個函式的功能。def square sum a,b c a 2 b 2 return c 這個函式的功能是求兩個...