引數,裝飾器

2021-10-01 01:24:32 字數 3528 閱讀 9445

引數:

若函式中所實現的需求涉及到一些未知項參與運算[這些未知項需要函式的呼叫者來決定]

此時,可以將未知項設定為引數.

位置引數[必備引數]

傳遞引數的順序與定義的順序有關,必須按照定義的順序來進行傳遞.

傳遞引數的個數與引數的個數必須保持一致.

關鍵字引數:

指函式呼叫的時候,可以通過"鍵-值"的形式來加以指定,可以清除位置關係.

當出現位置引數與關鍵字引數的時候,需要將位置引數寫在關鍵字引數前面

預設引數

定義函式的時候,我們可以給引數提供預設值,呼叫函式的時候可以傳遞此引數

可以不傳,當傳遞此引數的時候,函式則使用傳遞的引數,若不傳遞則使用預設值

優點:方便函式的呼叫

注意:1.若預設引數與位置引數同時存在的時候,位置引數要寫在預設引數的前面

2.給定預設引數的時候,預設引數需要指向不可變物件.

不定長引數

定義函式的時候,我們不確定呼叫的時候會傳遞多少個引數進來[可能乙個也可能多個]

此時我們可以使用不定長引數來解決[不定長引數有包括包裹位置引數與包裹關鍵字引數]

特點:能處理比生命時候更多的引數[傳遞多少個,處理多少個,不傳遞不處理]

不定長引數分為兩種:

1.包裹位置引數

使用:* 變數名 一般用*args

功能:可以收集除了必選引數意外剩餘的位置引數,按照元組來進行處理

2.包裹關鍵字引數

使用:** 變數名 一般用**kwargs

功能:收集除定義的變數的關鍵字引數之外,剩餘的關鍵字引數.

包裹關鍵字引數只處理剩餘的關鍵字引數,收集作為字典來處理.

注意:當位置引數[必選引數],預設引數,包裹位置引數,包裹關鍵字引數同時存在的情況下

順序一般為:位置引數,預設引數,包裹位置引數,包裹關鍵字引數,預設引數與包裹位置引數

可以根據需求調換位置

萬能函式

def func(*args,**kwargs):

pass

『』』def info(name,***,age=6,city=「深圳」):

print(「姓名:%s,性別:%s,年齡:%d,城市:%s」%(name,***,age,city))

info(「哈哈明」,「半」,city=「武漢」)

def maxx(*args):

if len(args)>=2:

maxnum =args[0]

for x in args:

if maxnumdef paixu(*args,reverse=false):

args=list(args)

for x in range(1,len(args)):

for y in range(len(args)-x):

if args[y] > args[y+1]:

args[y],args[y+1]=args[y+1],args[y]

if reverse:

return tuple(args[::-1])

else:

return tuple(args)

def paixu(*args,reverse=false):

args = list(args)

args.sort()

if reverse:

args.reverse()

return tuple(args)

else:

return tuple(args)

匿名函式:

定義:指的是一類無須定義識別符號[函式名]的函式或者子程式.

在python中定義匿名函式適應lambda來進行定義.

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

特點:1.lambda後面跟的只是乙個表示式,結構體比def的簡單.

2.引數列表可以有多個引數,引數與引數之間使用逗號隔開

3.無須寫return,表示式的結果就是該表示式的返回值.

優點:1.結構簡單

2.匿名函式沒有名字無須擔心函式名的衝突.

匿名函式的呼叫:

將lambda表示式賦值給乙個變數,通過呼叫變數來呼叫我們的匿名函式

func = lambda a,b: a if a>b else b

zip函式

zip(iter1,iter2,…)

功能:打包,將可迭代物件中對應未知的元素進行打包,長度取決於最短的那個.

返回zipobj打包好的物件,以迭代器的方式返回

zip(*zipobj)

功能:將之前打包的元素進行解包處理,以迭代器方式返回

裝飾器:

在**執行的期間,動態的增加功能的方式.

最簡單的裝飾器:

def outer(func):

def inner():

# 增強的功能

# 在內函式中執行func函式

return func()

return inner

在裝飾器中,分為外函式與內函式:

外函式(outer):

1.將被裝飾的函式傳遞進來–>func

2.將裝飾好的函式返回給呼叫者–>inner

內函式:

1.新增動態增加的功能

2.執行被裝飾的函式

內函式中的return什麼時候可以省略?

注意:當被裝飾的函式沒有返回值得時候,內函式的return可以省略.

若被裝飾的函式中存在返回值,則內函式的return不能省略.

@裝飾器

def func():

pass

@的功能:將被裝飾的函式的函式名作為引數傳遞給外函式,將外函式返回的替代版的函式

賦值給原本的函式

『』』def outer(func):

def inner():

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

func()

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

return inner

@outer

def now():

print(「2019-6-13」)

now()

『』』複雜的裝飾器

def outer(func):

def inner(引數列表):

#新增增加的功能

return func(引數列表)

return inner

注意:1.使用內函式來接收被裝飾函式的引數

2.呼叫被裝飾的函式的時候,需要將引數傳遞進去.

『』』def money(func):

def inner(mon):

if mon.startswith("+")and mon[1:].isdecimal() or mon.isdecimal():

return func(mon)

else:

print(「金額有誤」)

return inner

@money

def getmoney(mon):

return int(mon)

print(getmoney(「123」))

裝飾器三 裝飾器不帶引數

非固定引數接收傳入的實參,不論是多少都會接收。args,kwargs user status false def login func func是要傳入的函式的記憶體位址 def inner args,kwargs user alex password 123 global user status ...

裝飾器帶引數

裝飾器帶引數 帶引數的裝飾器是三層的 最外層的函式負責接受裝飾器引數 裡面的內容還是源裝飾器的內容 def outer a 第一層 負責接受引數的 defdecorate func 第二層 負責接受函式的 def wargs,kwargs 第三層 負責接受函式的引數 func wargs print...

裝飾器 帶引數

如果明白裝飾器的原理那麼帶引數的裝飾器就很容易理解了 def s1 func definner a,b f1 inner a,b 接受2個引數,然後在把2個引數傳遞給func a,b print hello r func a,b print word return r return inner s1...