真的是不想寫啊,雖然腦袋裏都知道 但是就是不想動手啊,痛苦啊~~~~
正題:
位置參數:比如你去電影院看電影,根據票號,找到自己的位置,都是一一對應的關係
形參:變量只有在被調用時才分配內存單元,一旦調用結束,該分配的內存單元將被釋放回收,並且形參只有在該定義的函數內部有效,只要不在該函數中,則無效,不可使用
實參:可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值
def parm(x,y):
'''輸出x,y值'''
print("x的值爲%s,y的值爲%s" %(x,y))
parm(3,4)
#這裏x,y就是形參,3,4就是實參
默認參數:可以理解成初始值
def parm(x,y,z=1):
'''輸出x,y,z值'''
print("x的值爲%s,y的值爲%s,z的值爲%s" %(x,y,z))
parm(3,4)
#輸出結果爲:x的值爲3,y的值爲4,z的值爲1
parm(3,4,5)
#輸出結果爲:x的值爲3,y的值爲4,z的值爲5
備註:默認參數的位置一定要在最後,比如def parm(x,z=1,y)這樣不對:報錯:SyntaxError: non-default argument follows default argument,後面會說到位置參數,就會明白了
關鍵參數:上面說的都要應該的按照位置傳對應的實參,講究順序,此方式爲 key-value方式,不講究位置對應順序
def parm(x,y,z):
'''輸出x,y,z值'''
print("x的值爲%s,y的值爲%s,z的值爲%s" %(x,y,z))
parm(z=1,y=3,x=4)
#輸出結果爲:x的值爲4,y的值爲3,z的值爲1
關鍵參數+位置參數:關鍵參數必須放在位置參數之後
def parm(x,y,z):
'''輸出x,y,z值'''
print("x的值爲%s,y的值爲%s,z的值爲%s" %(x,y,z))
parm(z=1,y=3,5)
#輸出結果爲:x的值爲4,y的值爲3,z的值爲1
備註:報錯:SyntaxError: positional argument follows keyword argument,上面這種方式,執行時會認爲,z=1,y=3,z=5,因爲5在z對應的形參位置上,所以也會把5傳給z,這樣就不行了, 所以位置參數一定要放在最前面
非固定參數:用在不確定要輸入多少參數時,主要有*args 和**kwargs
*args :會將接受到的多個參數變成一個元組的形式,傳入時,只需要輸入value的格式就可以
*kwargs :會把接受到的多個參數變成一個dict形式,傳入時,需要用key-value的方式傳入
def parm(x,y,*args,**kwargs):
'''輸出x,y,*args,**kwargs值'''
print('x的值爲:',x)
print('y的值爲:',y)
print('*args的值爲:',args)
print('**kwargs的值爲:',kwargs)
parm(1,2,'args1','args2','args3',parm1=11,parm12=22,parm3=33)
#輸出結果爲:
'''
x的值爲: 1
y的值爲: 2
*args的值爲: ('args1', 'args2', 'args3')
**kwargs的值爲: {'parm1': 11, 'parm12': 22, 'parm3': 33}
'''
備註:突然想到把*args放在**kwargs後面行不行,來試試~。。。。報錯了~~
函數作爲參數:函數本質就是變量,既然是變量就可以作爲參數,即函數作爲另外一個函數的參數
(1)
def par_b():
'''輸出返回值'''
print("par_b函數返回值")
def functest(x,func,*args):
'''輸出func,*args值'''
func()
print(args)
print(func)
functest(1,par_b,'args1','args2')
'''
par_b函數返回值
('args1', 'args2')
<function par_b at 0x00000269CF64C268>
'''
#備註:par_b作爲參數傳入,此時par_b爲無參數的函數,如果有參數該怎麼操作?
(2)
先看源代碼:
def par_b(a):
'''打印傳入的參數值a '''
print("par_b函數返回值",a)
def functest(x,y,func,*args):
'''傳入的x參數值作爲變量函數func的參數'''
print("x的值爲:",x)
func(x)
functest(1,2,par_b,'args1','args2')
'''
x的值爲: 1
par_b函數返回值 1
'''
備註:是不是感覺很棒,其實還是那句話,函數即變量~~~