一、回顧
序列類型: 字符串旅掂、列表赏胚、元組
散列類型:字典、集合
可變對象:列表商虐、字典觉阅、集合
不可變類型:字符串、元組秘车、
二留拾、函數(shù)定義和調(diào)用
#def是函數(shù)定義關(guān)鍵字
#isPhone是函數(shù)名(可自定義)
#括號里是參數(shù)
#函數(shù)調(diào)用:函數(shù)名(參數(shù)值)
def isPhone(phone):
? ? if phone.isdigit()? and? len(phone)==11:
? ? ? ? print(“是一個手機(jī)號”)
? ? else:
? ? ? ? print(“不是一個手機(jī)號”)
#返回值? return
#當(dāng)不存在返回值時候,默認(rèn)返回None
#當(dāng)存在返回值時候鲫尊,返回值是具體數(shù)據(jù)
def func(x,y):
? ? print(x)
? ? print(y)
? ? return x+y
? ? print(111)? ? #函數(shù)體內(nèi)return后的代碼都不會執(zhí)行
res = func(1,2)? ? ? #res得到返回出去的結(jié)果(x+y)
#func函數(shù)名,代表的函數(shù)本身
#func(1,2)代表函數(shù)調(diào)用沦偎,也就是函數(shù)執(zhí)行之后的結(jié)果
三疫向、函數(shù)參數(shù)
#函數(shù)參數(shù),參數(shù)沒有數(shù)據(jù)類型限制
#必備參數(shù)(x豪嚎,y)搔驼,定義了幾個參數(shù),函數(shù)調(diào)用就需要傳幾個參數(shù)值侈询,不能多舌涨,不能少
def func(x,y):
? ? print(x)
? ? print(y)
#默認(rèn)參數(shù)(y),當(dāng)不給默認(rèn)參數(shù)傳值扔字,會把默認(rèn)值給參數(shù)接收
def func(x,y = 2):
? ? print(x)
? ? print(y)
# 不定長參數(shù)()
# args是不定長參數(shù)囊嘉,數(shù)據(jù)放在元組里
# kwargs也是不定長參數(shù),數(shù)據(jù)放在字典里革为,鍵值只能是字符串類型
#args和kwargs都不是規(guī)定寫法扭粱,但是這是規(guī)范寫法
def? func(x,y=2震檩,*args琢蛤,**kwargs):
? ? ? ? print(x)
? ? ? ? print(y)
? ? ? ? print(args)
? ? ? ? print(kwargs)
#->str 這種語法指明這個函數(shù)的返回值是什么數(shù)據(jù)類型
def? func(x蜓堕,y=2,*args博其,**kwargs)->str:
print(x)
? ? ? ? print(y)
? ? ? ? print(args)
? ? ? ? print(kwargs)
? ? ? ? return? ‘a(chǎn)bc’
#拆包
def? func(x套才,y=2,*args慕淡,**kwargs):
? ? ? ? print(x)
? ? ? ? print(y)
? ? ? ? print(args)
? ? ? ? print(kwargs)
四背伴、函數(shù)的作用域
x = 100
def? func():
? ? #在函數(shù)里面對外部定義的x進(jìn)行修改
? ? x = x + 1
? ? print(x)
例:
x=100
def? func():
? ? x=200
? ? print(x)
print(x)
func()
print(x)
>>>100
>>>200
>>>100
#聲明全局變量
x=100
def? func():
? ? ? ? global? x
? ? ? ? x=200
? ? ? ? print(x)
print(x)? ? ? ? ? ? #100?
func()? ? ? ? ? ? ? ? #200
print(x)? ? ? ? ? ? ? ? #200
#聲明局部變量
def? func():
? ? x=200
? ? def? func1():
? ? ? ? ? ? nonlocal? x? ? #聲明局部變量
? ? ? ? ? ? x = x + 1
? ? ? ? ? ? print(x)
? ? print(x)
五、閉包
def? ? func():
? ? ? ? lv = 5
? ? ? ? #增加血量
? ? ? ? def? func1():
? ? ? ? ? ? ? ? nonlocal? lv
? ? ? ? ? ? ? ? lv += 1
? ? ? ? ? ? ? ? print(lv)
? ? ? ? #增加血量
? ? ? ? def? func2():
? ? ? ? ? ? ? ? nonlocal? lv
? ? ? ? ? ? ? ? lv -= 1
? ? ? ? ? ? ? ? print(lv)
? ? ? ? ? ? #外層函數(shù)返回內(nèi)層函數(shù)體儡率,這就是閉包
? ? ? ? ? return? func1挂据,func2
jia,jian = func()
六儿普、遞歸函數(shù)和匿名函數(shù)
#遞歸函數(shù):自身調(diào)用自身
def? ? func(n):
? ? ? ? ? ? if? n==1:
? ? ? ? ? ? ? ? return? 1
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? return? func(n-1)*n
#匿名函數(shù):通過lambda關(guān)鍵字定義
#匿名函數(shù)會自動返回崎逃,x是參數(shù)
a = lambda? x :x + 1
#相當(dāng)于有名函數(shù)
def? a(x):
? ? ? ? return? ? x+1
li = [1,2,4,5,6,7]
def? func(x):
? ? ? ? if? ? x>5:
? ? ? ? ? ? ? ? return x
#filter():過濾器
#第一個參數(shù)是函數(shù)體,第二個參數(shù)是可迭代對象
print(filter(func,li))
print(list(filter(lambda x:x>5,li)))
#map():對于元素進(jìn)行統(tǒng)一操作
#第一個參數(shù)是函數(shù)體眉孩,后面可以是一個或者多個可迭代對象
li = [2,4,6,8,10]
print(list(map(lambda? x:x-1个绍,li)))
#zip():把兩個可迭代對象合成一個字典,實(shí)現(xiàn)數(shù)據(jù)配對
tu = (‘a(chǎn)’浪汪,‘b’巴柿,‘c’)
li = [2,4,6]
print(dict(zip(tu,li)))
#回調(diào)函數(shù):把一個函數(shù)的函數(shù)體傳遞給另外的一個函數(shù)使用
def? ? func1(f):
? ? ? ? print(111)
def? ? func2():
? ? ? ? print(222)
func1(func2)
>>>111