Python-函數中各種參數的使用

真的是不想寫啊,雖然腦袋裏都知道  但是就是不想動手啊,痛苦啊~~~~

正題:

位置參數:比如你去電影院看電影,根據票號,找到自己的位置,都是一一對應的關係

形參:變量只有在被調用時才分配內存單元,一旦調用結束,該分配的內存單元將被釋放回收,並且形參只有在該定義的函數內部有效,只要不在該函數中,則無效,不可使用

實參:可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值

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
'''

備註:是不是感覺很棒,其實還是那句話,函數即變量~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章