函数:对代码块和功能的封装和定义
语法
def 函数名():
函数体
函数的返回值
执行完函数后使用return来返回结果
return的作用:
1.函数中遇到return,此函数结束,不再执行
2.给函数的调用者一个返回结果
3.函数的返回值可以有多个结果
参数:函数执行时,由外界给函数内部传递的一些信息
- 实参:函数执行时,给函数传递的具体的值
– 位置参数:按照位置给形参传递数据
– 关键字参数:按照形参的名称传递数据
– 混合参数: 注意顺序(先位置参数,后关键字参数) - 形参:函数声明的位置写的变量
– 位置参数:按照从左向右的顺序编写的变量
– 默认值参数:在声明形参时,给出一个默认值 【注意:默认参数是可变的数据类型,会被共享】
– 动态传参:调用函数给出多个参数,在形参位置上一次性被接收
形参位置编写 * :动态接收位置参数,自动打包成元组,接收任意内容
def travel(*animal):
print(animal)
travel("大猩猩", "猴子", "熊猫")
结果:('大猩猩', '猴子', '熊猫')
形参位置编写 ** :动态接收关键字参数,自动打包成字典
def travel(**people):
print(people)
travel(name="周杰伦", age=18, gender="男")
结果:{'name': '周杰伦', 'age': 18, 'gender': '男'}
结论:形参混合使用时的正确顺序:位置参数,*args,默认值参数,**kwargs
补充:*和**的作用
在形参上:聚合(把位置参数聚合成元组,把关键字参数聚合成字典)
在实参上:打散(把可迭代对象转化成位置参数,把字典转换成关键字参数)
# 将列表的每一项元素当成参数传递给函数
def travel(*animal):
print(animal)
lst = ["猴子", "大猩猩", "狮子"]
# 借助 * 来完成,将可迭代对象转换成位置参数进行传递
travel(*lst)
def travel(**animal):
print(animal)
dic = {"name":"猴子", "age":2, "gender":"男"}
travel(**dic)
- 函数的作用域
globals():查看全局作用域中的内容
locals():查看局部作用域中的内容 - global和nonlocal
– global关键字用来在函数或其他局部作用域中使用全局变量
– nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量
当出现局部中需要改变外层变量的情况,需要使用global和nonlocal
这篇博客介绍的很详细:https://blog.csdn.net/orangerfun/article/details/104467158