匿名函式:無需定義名字的一類函式。
定義匿名函式使用關鍵字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 這個函式的功能是求兩個...