函數

代碼重用

保持一致性,易維護

可擴展性




def test(x,*args,**kwargs):#相對順序不要變

位置參數一定要在關鍵詞參數前


# 如果函數的內容無global關鍵字,
#   - 有聲明局部變量
        # NAME = ["產品經理","廖波溼"]
        # def qupengfei():
        #     NAME = "自己"
        #     print('我要搞', NAME)
        # qupengfei()
#   - 無聲明局部變量
        # NAME = ["產品經理","廖波溼"]
        # def qupengfei():
        #     NAME.append('XXOO')
        #     print('我要搞', NAME)
        # qupengfei()

# 如果函數的內容有global關鍵字
#   - 有聲明局部變量
        # NAME = ["產品經理","廖波溼"]
        # def qupengfei():
        #     global NAME
        #     NAME = "自己"
        #     print('我要搞', NAME)
        # qupengfei()
        # 錯誤示例
        # NAME = ["產品經理","廖波溼"]
        # def qupengfei():
        #     NAME = "自己"
        #     global NAME
        #     print('我要搞', NAME)
        # qupengfei()
#   - 無聲明局部變量
        # NAME = ["產品經理","廖波溼"]
        # def qupengfei():
        #     global NAME
        #     NAME = ["阿毛"]
        #     NAME.append('XXOO')
        #     print('我要搞', NAME)
        # qupengfei()

######## 全局變量變量名大寫
######## 局部變量變量名小寫


# 優先讀取局部變量,能讀取全局變量,無法對全局變量重新賦值 NAME=“fff”,
#  但是對於可變類型,可以對內部元素進行操作
# 如果函數中有global關鍵字,變量本質上就是全局的那個變量,可讀取可賦值 NAME=“fff”

nonglobal

name = "剛娘"

def weihou():
    name = "陳卓"
    def weiweihou():
        nonlocal name   # nonlocal,指定上一級變量,如果沒有就繼續往上直到找到爲止
        name = "冷靜"

    weiweihou()
    print(name)

print(name)
weihou()
print(name)

遞歸:

遞歸特性:
1. 必須有一個明確的結束條件
2. 每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少

3. 遞歸效率不高,遞歸層次過多會導致棧溢出(在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出)


匿名函數:

lambda input:output

func = lambda x:x+1
func(10)
#print(func(10))

函數式編程

    高階函數    1、函數接收的參數是一個函數名  2、返回值中包含函數

尾調用

    最後一步不一定是最後一行

map()

res=map(lambda x:x+1,num_l)

filter()

res=filter(lambda n:not n.endswith('sb'),movie_people)
people=[
    {'name':'alex','age':1000},
    {'name':'wupei','age':10000},
    {'name':'yuanhao','age':9000},
    {'name':'linhaifeng','age':18},
]
print(list(filter(lambda p:p['age']<=18,people)))



map filter reduce 小結:

#處理序列中的每個元素,得到的結果是一個‘列表’,該‘列表’元素個數及位置與原來一樣
# map()

#filter遍歷序列中的每個元素,判斷每個元素得到布爾值,如果是True則留下來
#reduce:處理一個序列,然後把序列進行合併操作



發佈了88 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章