1. 程式人生 > >Python tutorial閱讀之函數的定義與使用

Python tutorial閱讀之函數的定義與使用

都是 傳遞對象 不可變對象 com 引用 lob 語句 mark 方式

函數的定義

Python 使用關鍵字def定義函數,格式與C語言類似,但是沒有返回類型,參數也不需要設置類型。

def add(a, b):
    """這是函數的文檔字符串"""
    return a + b

def append(data):
    data.append(a) #如果data為可變對象時候,例如List、Dict,則會改變實參的值
    

函數調用 會為函數局部變量生成一個新的符號表。確切的說,所有函數中的變量賦值都是將值存儲在局部符號表。變量引用首先在局部符號表中查找,然後是包含函數的局部符號表,然後是全局符號表,最後是內置名字表。因此,全局變量不能在函數中直接賦值(除非用 global 語句命名),盡管他們可以被引用。

Python參數傳遞采用的肯定是“傳對象引用”的方式。這種方式相當於傳值和傳引用的一種綜合。如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值--相當於通過“傳引用”來傳遞對象。如果函數收到的是一個不可變對象(比如數字、字符或者元組)的引用,就不能直接修改原始對象--相當於通過“傳值‘來傳遞對象。

技術分享圖片
技術分享圖片

參數

默認參數: 為參數設定默認值,調用函數時,如果沒有值即使用默認值。

def login(username,password = "123"):
    """登錄函數"""
    pass

login("admin")
login("admin","password")

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))
# 輸出結果
[1]
[1, 2]
[1, 2, 3]

>>> def f(x = []):
...     x.append(1)
...     print(id(x))
... 
>>> f()
140693834878408
>>> f()
140693834878408
>>> f()
140693834878408
>>> 

關鍵字參數調用:即指定形式key = value來調用函數,關鍵字參數應該在位置參數後面。

def parrot(voltage, state=‘a stiff‘, action=‘voom‘, type=‘Norwegian Blue‘):
    print("-- This parrot wouldn‘t", action, end=‘ ‘)
    print("if you put", voltage, "volts through it.")
    print("-- Lovely plumage, the", type)
    print("-- It‘s", state, "!")

# 以下調用均是錯誤的
parrot()                     # 必須參數沒有
parrot(voltage=5.0, ‘dead‘)  # 關鍵字參數必須在位置參數之後
parrot(110, voltage=220)     # **任何參數都不可以多次賦值**
parrot(actor=‘John Cleese‘)  # 不存在該參數名

Python tutorial閱讀之函數的定義與使用