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()

 

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