函数
函数
认识函数
函数将一些代码进行封装
定义函数: 封装 减少重复代码
# def 关键字 函数名():
函数体(代码块)
def make():
print('1')
print('2')
print('3')
print('4')
print('5')
return 多个返回值是元组
make() #函数名 + 小括号 == 调用
msg = make() # make == None make() == '美女一枚'
print(msg)
函数的返回值
def func():
print('今天是周二')
print('明天是周三')
return 0.125
print('后天是周四')
# retrun 不写返回的是None , return写了不写值返回的也是None return 就是将内容返回了调用者 make()
# 函数中当执行到return的时候 下面的代码就不执行了,并且终止这个函数
函数的参数
# 参数
# 参数 定义的参数 形参
# 调用的参数是 实参 形参和实参的数量 一一对应
# 从实参到形参的过程 传参
# addr 是不是一个变量 addr = '家'
def func(addr,school): # 形参
print(f'我在{addr}睡觉{school}')
func(addr = '家',age = 18)
# 实参的角度:
#func('清华','东莞') 位置
#func(addr = '清华',school = '东莞') 关键字
#func('清华',school = '东莞') 混合
# 实参的角度:
#func(addr,school) 位置
#func(school = '东莞') 默认参数
#func(addr,school = '东莞') 混合
#函数形参规则 位置参数 > 默认参数
#函数实参规则 位置参数 > 关键字参数
函数参数
def eat(a,b*args): # 聚合 打包
print(a,b,args) # 元组
# 形参位置 : 位置参数 > 动态位置参数
eat('1','2','3','4','5')
def eat(**kwargs):
print(kwargs) #字典
eat('q' = '1','w' = '2','e' = '3')
def func(a,b,*args): #聚合
print(a,b,*args) #打散
# args 返回的是元组 *args 将元组打回原来的数组
func(1,2,3,4,5,6,7)
def func(a = 1,b = 2,**kwargs): # 默认参数 ** 聚合
print(a,b,kwargs)
func(a = 56, c = 22, b = 333, d = 66)
def func(a,b,c = 1,*arg,**kwargs): # 位置 > 动态位置 > 默认参数 > 动态默认参数
print(a,b,c,args,kwargs)
func(1,2,3,4,5,6,7,8,c = 33,d = 123,f = 345)
def func(*args,**kwargs): #万能 无敌
print(args,kwargs)
func(1,2,3,4,a = 1,b = 2) # 位置 关键字 混合
函数的注释
def func(*args,**kwargs):
'''
:param args: 万能的位置参数
:param kwargs: 万能的默认参数
:return: 返回值
'''
print(args)
print(kwargs)
return
print(func.__doc__) # 查看函数的注释 函数名.__doc__
函数的命名空间
#内置空间
#全局空间
#局部空间
# python关键字是存在内置空间的
# py文件中顶头写的内容就存在全局空间
# 函数内写的变量存在局部空间
#a = 1
#b = 2
y = 9
def func():
y = 3 # 局部空间
print(y) # 3
def func1():
print(y) # 9 局部空间不能共享
# 找值顺序:局部空间 > 全局空间 > 内置空间
# 加载顺序:内置空间 > 全局空间 > 内置空间
#命名空间:
# 内置空间 + 全局空间
# 局部空间
函数的嵌套
def func():
func1()
print(1)
def func1():
print(11111)
func()
#11111
#1
global nonlocal
#内置空间 + 全局空间 = 全局 globals()
#局部空间 loacals()
a = 10
def func():
a = 20
print(a)
print(globals()) # 查看全局作用域的内容
print(locals()) # 查看局部作用域的内容
func()
a = 10
def func():
global a # 声明我要修改全局的变量a的值
a = 20
print(a)
func()
print(a)
n = 1
def func():
n = 10
def fun2():
def func1():
nolocal n # 修改离得最近上一次里的变量值 上一层没有就继续往上找,找到全局最外层局部
n = 100
print(n) # 10
func1()
func2()
func()
print(n)