python函數與參數

溫馨提示:

             本文僅限參考,因爲每個人理解的函數意思都不一樣。

python中函數定義:函數是邏輯結構化和過程化的一種編程方法

python中函數定義方法:

    def test(x):
       "The function definitions"
        x+=1
        return x
    def:定義函數的關鍵字
    test:函數名
    ():內可定義形參
    "":文檔描述(非必要,但是強烈建議爲你的函數添加描述信息)
    x+=1:泛指代碼塊或程序處理邏輯
    return:定義返回值
    調用運行:可以帶參數也可以不帶
    函數名()

使用函數的好處:
     1.代碼重用
     2.保持一致性,易維護
     3.可擴展性

函數和過程:
        過程定義:過程就是簡單特殊沒有返回值的函數
        這麼看來我們在討論爲何使用函數的的時候引入的函數,都沒有返回值,沒有返回值就是過程,沒錯,但是在python中有比較神奇的事情

def test01():
            msg = 'hello The little green frog'
            print (msg)

        def test02():
            msg = 'hello WuDaLang'
            return msg

        t1 = test01()

        t2 = test02()

        print ('from test01 return is [%s]' % t1)
        print ('from test02 return is [%s]' % t2)
當一個函數/過程沒有使用return顯示的定義返回值時,python解釋器會直接返回爲None,所以在python中即便是過程也可以算作函數。
        def test1():
             pass
        # 補充:
        #    pass:指空代碼,無意義,僅僅用於表示代碼塊

        def test02():
             return 0,10,'hello',['alex','server'],{'sb':'lb'}

        t1=test1()
        t2=test2()

        print ('from test1 return is [%s]: ' %type(t1),t1)
        print ('from test2 return is [%s]: ' %type(t2),t2)
   
  補充:

   返回值數=0:返回None

   返回值數=1:返回object

   返回值數>1:返回tuple

函數參數:

    形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數後則不能再使用該形參變量
    實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳 送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值

def text(x, y):
    # 形參(x, y)
    '''
    :param x:整型數字
    :return: 返回計算結果
    '''
    res = x ** y
    return res
# 常量
text(2,3)
# 實參
a = 2
b = 3
c = text(a,b)
print(c)

一、位置參數

調用函數時根據函數定義的參數位置來傳遞參數

def text(x, y):
    print(x)
    print(y)
# 位置參數,實參與形參位置一一對應
text(1, 2)

二、關鍵字參數

位置參數必須在關鍵字參數的前面,但關鍵字參數之間不存在先後順序的

def text(x,y,z):
    print(x)
    print(y)
    print(z)
# 關鍵字參數,位置無需固定
text(x=1,y=3,z=2)

三、位置參數與關鍵字參數混合使用

def test(x,y,z):
    print(x)
    print(y)
    print(z)
# 位置參數一定要在關鍵字參數左邊
test(1,y=2,z=3)

四、默認參數

'''
 默認參數,爲參數提供默認值,調用函數時可傳可不傳該默認參數的值
'''
# 位置參數一定要在默認參數左邊否則報錯
def handle(x, type="world"):
    print(x)
    print(type)
handle(x=1,type='type')
# 錯誤:錯誤的定義方式
# def handle(age=1,x):
# 錯誤: 注意不能這樣寫,type參數就變成位置參數了,沒有什麼意義了
# handle('hello',type)

五、可變參數

1、包裹位置參數

'''
*args將實參中按照位置傳值,把多出來的值都給args,args收集起來,合併一個元祖(tuple)的方式呈現
'''
# 參數組(不固定長度參數):*列表 **字典
def text(x, *args):
    print(x)
    print(args)
# 以元組形式展示
text(1, 1, 2, 3)

2、包裹關鍵字參數

'''
**kwargs將實參按照關鍵字傳值,把多餘的值給kwargs,kwargs收集起來,合併一個字典(dict)的方式呈現
'''
# *args只能處理位置參數,關鍵字參數不能用*args,需要通過**kwargs來處理
test(1,y=2,z=3)
def test(x,**kwargs):
    print(x)
    print(kwargs)
# 以字典形式展示
test(1,y=2,z=3)
# 錯誤:z=3一個參數不能傳兩個值,否則報錯
# test(1,y=2,z=3,z=3)

六、解包裹參數

*和**,也可以在函數調用的時候使用,稱之爲解包裹(unpacking)

1、在傳遞列表或字典時,讓的每一個元素對應相應的位置參數

def test(x, *args):
    print(x)
    # 列表索引取值
    print(args[0][0])
    # 字典鍵值對取值
    print(args[0]['y'])
    # 轉化
    print(args)
# 列表
test(1, [1, 2, 3])
# 字典
test(1,{'y':'z'})
# 列如把列表或字典以元組的形式展示,只需要在列表或字典前面加上*
test(1,*[2,3,4,4])
test(1,*{'key':'value','key2':'value'})

​

2、在傳遞詞典字典時,讓詞典的每個鍵值對作爲一個關鍵字參數傳遞給函數

def test(x,**kwargs):
    print(x)
    # 通過索引取值
    print(kwargs)
test(1,**{'key':'value'})
錯誤:需要在上**如果不加上**則報錯
TypeError: test() takes 1 positional argument but 2 were given

七、*args與**kwargs混合使用

補充:def 函數名(x,**kwargs,*args)不能這樣寫,函數要按照python所支持規定來定義函數(def 函數名(x,*args,*kwargs))

def test(x,*args,**kwargs):
    print(x)
    # 通過索引取值
    print(args,args[1])
    # 通過字典的key取字典的value
    print(kwargs,kwargs['key'])
    # 通過get獲取字典的value
    print(kwargs,kwargs.get('key'))
test(1,*[1,2,3],**{'key':1})

八、位置參數、默認參數、可變參數的混合使用

基本原則:先位置參數,包裹位置,默認參數,包裹關鍵字(定義和調用都應遵循)

def func(x,*args,type='age',**kwargs):
    print(x)
    print(args)
    print(type)
    print(kwargs)
func(1,3,4,1,4,1,type='name',y=2,z=3)

 

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