一、回顾
序列类型: 字符串、列表、元组
散列类型:字典、集合
可变对象:列表、字典、集合
不可变类型:字符串、元组、
二、函数定义和调用
#def是函数定义关键字
#isPhone是函数名(可自定义)
#括号里是参数
#函数调用:函数名(参数值)
def isPhone(phone):
if phone.isdigit() and len(phone)==11:
print(“是一个手机号”)
else:
print(“不是一个手机号”)
#返回值 return
#当不存在返回值时候,默认返回None
#当存在返回值时候,返回值是具体数据
def func(x,y):
print(x)
print(y)
return x+y
print(111) #函数体内return后的代码都不会执行
res = func(1,2) #res得到返回出去的结果(x+y)
#func函数名,代表的函数本身
#func(1,2)代表函数调用,也就是函数执行之后的结果
三、函数参数
#函数参数,参数没有数据类型限制
#必备参数(x,y),定义了几个参数,函数调用就需要传几个参数值,不能多,不能少
def func(x,y):
print(x)
print(y)
#默认参数(y),当不给默认参数传值,会把默认值给参数接收
def func(x,y = 2):
print(x)
print(y)
# 不定长参数()
# args是不定长参数,数据放在元组里
# kwargs也是不定长参数,数据放在字典里,键值只能是字符串类型
#args和kwargs都不是规定写法,但是这是规范写法
def func(x,y=2,*args,**kwargs):
print(x)
print(y)
print(args)
print(kwargs)
#->str 这种语法指明这个函数的返回值是什么数据类型
def func(x,y=2,*args,**kwargs)->str:
print(x)
print(y)
print(args)
print(kwargs)
return ‘abc’
#拆包
def func(x,y=2,*args,**kwargs):
print(x)
print(y)
print(args)
print(kwargs)
四、函数的作用域
x = 100
def func():
#在函数里面对外部定义的x进行修改
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)
#外层函数返回内层函数体,这就是闭包
return func1,func2
jia,jian = func()
六、递归函数和匿名函数
#递归函数:自身调用自身
def func(n):
if n==1:
return 1
else:
return func(n-1)*n
#匿名函数:通过lambda关键字定义
#匿名函数会自动返回,x是参数
a = lambda x :x + 1
#相当于有名函数
def a(x):
return x+1
li = [1,2,4,5,6,7]
def func(x):
if x>5:
return x
#filter():过滤器
#第一个参数是函数体,第二个参数是可迭代对象
print(filter(func,li))
print(list(filter(lambda x:x>5,li)))
#map():对于元素进行统一操作
#第一个参数是函数体,后面可以是一个或者多个可迭代对象
li = [2,4,6,8,10]
print(list(map(lambda x:x-1,li)))
#zip():把两个可迭代对象合成一个字典,实现数据配对
tu = (‘a’,‘b’,‘c’)
li = [2,4,6]
print(dict(zip(tu,li)))
#回调函数:把一个函数的函数体传递给另外的一个函数使用
def func1(f):
print(111)
def func2():
print(222)
func1(func2)
>>>111