一、函数定义
# 形参
def func(a, b):
c = a + b
return c
# 实参
func(1, 2)
二、实参分类
1. 位置参数
1. 位置参数,传递参数时,需要形参、实参对应
def func(position1, position2):
if position1 > position2:
return position1
else:
return position2
def func(postiont1, position2):
# 三元运算符
c = a if a > b else b
return c
2. 关键字参数
def func(name, address, age):
pass
func(name='jone', age=18, address='北京')
3. 混合参数
注意: 在使⽤混合参数的时候, 关键字参数必须在位置参数后⾯
三、形参分类
1. 位置参数
# 位置参数. 按照位置来赋值
def func(name, address, age):
pass
2. 默认值参数
# 在调⽤的时候可以给出具体的值, 也可以不给值, 使⽤默认值
def func(name, age, sax='男'):
pass
4. *args
# 动态接收位置参数
def func(*args):
# 以元组形式返回
return args
func(1, 2, 3)
5. **kwargs
# 动态接收关键字参数
def func(**kwargs):
# 以字典形式返回
return kwargs
func(a = 1, b = 2, c = 3)
6. 动态传参的另一种方式
def fun(*args):
print(args)
lst = [1, 4, 7]
# 可以使⽤*把⼀个列表按顺序打散
fun(*lst)
s = "⾂妾做不到"
# 字符串也可以打散, (可迭代对象)
fun(*s)
def fun(**kwargs):
print(kwargs)
dic = {'a':1, 'b':2}
fun(**dic)
7. 传参顺序
位置参数 > *args > 默认值参数 > **kwargs
四、函数注释
def chi(food, drink):
"""
这⾥是函数的注释, 先写⼀下当前这个函数是⼲什么的, ⽐如我这个函数就是⼀个吃
:param :param food: 参数food是什么意思
:param :param drink: 参数drink是什么意思
:return :return: 返回的是什么东东
"""
print(food, drink)
return "very good"
五、命名空间
1. 命名空间分类
1. 全局命名空间--> 我们直接在py⽂件中, 函数外声明的变量都属于全局命名空间
2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间
3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间
2. 加载顺序
1. 内置命名空间
2. 全局命名空间
3. 局部命名空间(函数被执⾏的时候)
3. 取值顺序
1. 局部命名空间
2. 全局命名空间
3. 内置命名空间
4. global和nonlocal
(1) global
a = 100
def func():
# 加了个global表示不再局部创建这个变量了. ⽽是直接使⽤全局的a
global a
a = 28
print(a)
func()
print(a)
结果:28 28
(5) nonlocal
1. nonlocal 表⽰在局部作⽤域中, 调⽤⽗级命名空间中的变量
a = 10
def func1():
a = 20
def func2():
nonlocal a
a = 30
print(a)
func2()
print(a)
func1()
结果:
加了nonlocal
30
30
不加nonlocal
30
20
六、总结return
1. 遇到return. 此函数结束, 函数后⾯的东⻄将不会再执⾏
2. return 返回值
如果return什么都不写 或者 ⼲脆不写return .那么返回的就是None
如果return后⾯写了⼀个值. 则调⽤者可以接收⼀个结果
如果return后⾯写了多个结果, 则调⽤者可以接收⼀个tuple, 调⽤者可以直接解构成多个变量