收集参数:
收集参数可以不带任何参数应用
作用:不能和定义时的参数位置相对应的参数放入一个特定的数据结构中
收集参数中不需要调用关键字参数的语法:
def func(*args):
func_body
不带任何实参调用,收集参数为空tuple
带实参调用时ddictionary
收集参数中如果要调用关键字参数语法:
def func(**kwargs)
func_body
混合定义时参数位置顺序
使用规则就是:普通参数和关键字参数优先
定义的时候一般找普通参数,关键字参数,默认参数,收集参数tuple,收集参数dict
#使用默认参数时,注意默认参数的位置要在args之后kwargs之前
当需要修改默认参数时,要调整默认参数的位置,要放在args之前即可,但不可放在开头。
这个详细说明参数
https://www.cnblogs.com/bingabcd/p/6671368.html
举例子:
def stu(name,age,hobby="没有",*args,***kwargs):
print("{0} {1}"
for i in args :
print(i)
for k in kwargs:
print(k,v)
收集参数的解包问题
把参数放入list或者字典中,直接把list/dict中的值放入收集参数中
对list类型收集函数用一个*解包 对dict收集函数用两个**解包
返回值
函数和过程的区别:有无返回值
有返回值返回内容,没有返回值返回None
推荐写法,无论有无返回值,最后都以return介绍
函数文档
函数文档的作用是对当前函数使用提供相关的参考信息
写法:在函数内部开始时的第一行使用三字串定义符
一般具有特殊格式
查看:1.help函数:help(func)2.func._doc_
举例:def func():
‘’’
这是一个函数
他很酷
简直了
6666
‘’’
print(“okok”)
斜体部分就是函数文档
变量作用域
- 变量有作用范围限制
- 分类:按照作用域分类:全局:在函数外部定义,在整个全局范围都有效,在局部内可以使用,局部:在函数内部定义
- 原则:LEGB原则:里面访问外面,外面不能访问里面
提升局部变量为全局变量:使用global b1 ,声明后调用函数以后才能将局部变量变成全局变量,不调用是不行的
globals和locals函数
可以通过这两个函数显示出哪些函数是全局变量哪些函数是局部变量,print(“a={0}”.format(locals()))
eval函数
1.把一个字符串当作代码来执行,返回表达式执行后的结果
2.将字符串转成相应的对象(如list、tuple、dict和string之间的转换)
3.将利用反引号转换的字符串再反转回对象
exec函数
跟eval函数一样,但是不返回结果
递归函数
函数直接或间接的调用自身
优点:简介理解容易
缺点:递归深度有限制,消耗资源大