函数
函数的定义:函数是对功能的封装
函数的返回值:
第一种:无return
def func():
print("123")
print("456")
func() # 直接调用
第二种:有return,在代码之间
def func():
print("123")
return
print("456")
func() # 结果是123,因为遇到return直接退出函数
第三种:有return,格式return+空格+值
def func():
a = 20
return a
print(func()) # 直接打印返回值 20
第四种:多个返回值
def func():
a = 20
b = 10
c = 10
return a,b,c
print(func()) #打印出的结果是一个元组(20,10,10)
函数的参数
- 形参:函数声明的位置的变量
- 实参:在函数调用的时候给的具体的值
形参的位置参数
def func(a,b,c):
print(a)
print(b)
print(c)
func(20,10,10) #这种形参和实参一一对应的形式是位置参数
形参的默认参数
def func(a,b,c=20):#这里的c=20是默认参数
print(a)
print(b)
print(c)
func(20,10,10)
#当把20,10,10分别赋值给a,b,c时,就会把原来的默认值覆盖,如果c不给值,则c还是等于20
动态参数
第一种:位置参数动态传参
参数名:*参数名
def func(*args):
print(arg)
func(1,2,3,4) # 形参*args会把传入的实参全盘接收以元组的形式
#结果:(1, 2, 3, 4)
def func(name,age=18,*food):
print(name)
print(*food)
print(age)
func("小吃",21,"雪糕")
#这里形参有三种,位置参数,默认值参数,和动态参数,位置参数首先对应接收一个实参,,第二个实参传给默认参数,第三个给动态参数.
**注意**,但若是第二个形参和第三个形参换位置,则会产生第三个形参永远不会接收到实参,而一直使用默认值.
第二种:关键词参数动态传参
def func(**args):
print(args)
func(name="hh", age=18)
#他会把传入的关键字实参转化成字典,打印结果{'name': 'hh', 'age': 18}
**重点**:所以这里会衍生出一个参数的顺序
位置参数 > *args > 默认值参数 > **args
实参的位置参数和形参一样(同上)
实参的关键字参数
def func(a,b,c):
print(a)
print(b)
print(c)
func(a=20,c=10,b=10) #直接对形参进行赋值即可,不用考虑顺序
实参的混合参数
def func(a,b,c):
print(a)
print(b)
print(c)
func(20,c=10,b=10) #位置参数和关键字参数混合使用
**注意:**不管是形参还是实参一定要保证是位置参数是在首位.
对于形参的顺序:位置参数 > 默认值参数
对于实参的顺序:位置参数 > 关键字参数
global:在局部访问全局的内容时,可以改变全局变量的值
a = 20
def func()
global a
a = 10
func()
print(a) #此时打印出的a为10
nonlocal:在局部中,nonlocal找除去全局之外的外层的理他最近的那一个层次的变量,改变那个不变量的值
a = 30
def func():
a = 20
def inner():
nonlocal a
a = 10
print(a) #这里打印的a为10
inner()
print(a) #这里打印的a也为10
func()
print(a) 这里打印的a为30