目录
函数
函数是什么?
函数是功能 过程 动作
函数是实现某一功能或者某些功能的命令的集合
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
函数的定义
def (define function)
def 函数的名称([参数]):
#缩进 函数体
[return 返回值] 结束函数,选择性地返回一个值给调用方。不带返回值的return相当于返回 None。
参数的检查:
- 调用函数的时候,参数的个数不对
- 如果参数的类型不对
Return可以返回多个值吗?
可以
python 函数返回多个值的时候实则返回的是一个元组
总结:
1.定义函数的时候,需要确定函数的名称和参数个数
2.如果有必要的话,需要先对参数的类型做检查
3.函数的内部可以用return返回函数的结果
4.函数可以返回多个值,但是返回的结果实则是元组tuple
函数的调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
调用函数的时候,函数名称([参数])
abs(-99)
函数名称实则是指向函数对象的引用,可以把函数名称赋值给一个变量。
函数的分类
以有没有参数分类:
有参函数
无参函数
以有没有返回值分类
有返回值函数
无返回值函数
定义者分类
系统
第三方
全局变量和局部变量
全局变量:
在python,定义py文件里面的变量就是全局变量
特点:
代码运行的时候,变量是始终有效的
局部变量:
定义在函数的内部的变量称为局部变量
局部变量的作用域只在函数内有效
函数的内部是可以访问全局变量,但是不能改变(操作)全局变量
如果要操作全局变量?--------- global (全局)
值传递:
引用传递(对象):
函数的参数
位置参数
x的平方:
def show(x):
return x*x
show(x) x 就是位置参数
默认值参数
定义函数的时候,可以给参数加上默认值,调用函数的时候,如果没有给这个参数赋值,也是可以成功调用函数
注意:
1.默认值参数应该写在必选参数的后面
2. 默认值参数可以有多个,变化范围小的参数要写在变化范围大的参数前
注意:
默认值参数要指向一个不可变的对象 None ------- 对象
思考:
python 不可变对象有哪些?
不可变类型(数字,字符串,元组,不可变集合)
可变参数
可变参数就是传入参数是可变的。可以是任意个
*变量表示的是可变参数
如果已经有一个列表或者元组
*nums表示的是nums这个list的所有元素作为可变参数传递给了num
关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
关键字参数有什么用?
比如用户登录注册
函数 用户名 密码 **参数名
电话号 地址
它有可扩展性
命名关键字参数
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
参数的组合
顺序:必选参数、默认值参数、命名关键字参数或者关键字参数
函数的递归
在函数的内部,可以调用其他函数,函数内部调用自己,就是递归
前提条件:
1.函数自己调用自己
2.有终止条件
练习:(利用递归)
n!
fact(n) = n!
递归会有栈溢出现象,那么这种现象怎么解决?