1. 程式人生 > >python學習筆記--function定義及使用

python學習筆記--function定義及使用

'''
方法定義
'''
def getData (width,height):
    return width*height

print(getData(20,10))
#方法引數指定預設值
def getData1(width,height=20):
    return width*height
print(getData1(20))
print(getData1(20,10))
#不定引數
'''
* 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。
'''
def printSize(str,*size):
    print(str)
    print("長度為:",size)
printSize("輸入的長度是:",50,60,70,80,90)
#不定引數2,字典形式
def printStudent(str,**stu):
    print(str,stu)
printStudent("當前學生資訊是",name="zhangsan",age=20,address="gx2012")
'''
宣告函式時,引數中星號 * 可以單獨出現,* 後的引數必須用關鍵字傳入
'''
def aa(a,b,*,c):
    print(a,b,c)
aa(1,2,c=3)
'''
匿名函式
python 使用 lambda 來建立匿名函式。

所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函式。

lambda 只是一個表示式,函式體比 def 簡單很多。
lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。
雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。
函式定義 fun=lambda arg1,arg2:execution
說明fun是定義的匿名函式名,arg1,arg2是函式傳入的引數,execution是函式內部處理的邏輯
'''
sum = lambda arg1, arg2: arg1 + arg2
print(sum(1,2))
'''
變數作用域
L (Local) 區域性作用域
E (Enclosing) 閉包函式外的函式中
G (Global) 全域性作用域
B (Built-in) python內建模組的作用域
以 L –> E –> G –>B 的規則查詢
'''
x = int(2.9)  # 內建作用域
 
g_count = 0  # 全域性作用域
def outer():
    o_count = 1  # 閉包函式外的函式中
    def inner():
        i_count = 2  # 區域性作用域
'''
global 和 nonlocal關鍵字
當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。
否則會報異常:UnboundLocalError: local variable 'num' referenced before assignment
'''
num = 1
def fun1():
    global num  # 需要使用 global 關鍵字宣告
    print(num) 
    num = 123
    print(num)
fun1()
print(num)
'''
如果要修改巢狀作用域(enclosing 作用域,外層非全域性作用域)中的變數則需要 nonlocal 關鍵字了,如下例項:
'''

def testNonlocal():
    num = 10
    def inner():
        nonlocal num   # nonlocal關鍵字宣告
        num = 100
        print("outer",num)
    inner()
    print("outer",num)
testNonlocal()