函数的定义
def 函数名(形式参数):
函数体
[return 返回值]
def是系统的关键字。
如果是自定义函数,函数名要复合变量命名规则,并且不能是系统关键字(jupyter中,打出系统关键字是绿色的)
def和return是绿色的,也就是系统关键字
函数的调用
函数的调用很简单,只要根据函数的定义形式将实际计算时的参数值传进去就行(也可能没有参数)
函数调用格式:函数名(实际参数)
函数调用写的参数是实际参数(‘实际’体现在参数是实际执行函数使用的)
函数定义写的参数是形式参数(‘形式’体现在它只是个格式和形式,真正函数执行时候还是先看实际参数)
参数的传递
函数调用时候,是将实际参数传递给形式参数
函数参数的传递方法有很多
1.参数按照位置顺序传递
2.参数按赋值传递
3.参数按照默认值传递
但是,当传入的是两个参数时,会覆盖掉默认值
4.元组类型的变长度参数传递
我们可以定义一个变长参数,可长可短,需要在参数前面加一个星号*,表示这个参数是可变长参数,当其他参数赋值完毕后,剩下的参数依次赋值给这个可变长参数
但是,注意b是元组(2,3,4),可对函数做修改
5.字典类型的变长度参数传递
在参数前加两个星号**,表示这个参数是可变长参数
是以 实参名=字典值的方式传递
字典类型变长参数传递一定是赋值形式传递进去的
当然,元组和字典形式变长参数也可能用不到
打印的是空元组和空字典。
可变参数的位置一般写在最后,不能乱了顺序,否则会报错。
函数中变量的作用域
调用dayin_outer()打印的a的值是2,这里dayin_inner()函数只是定义了,并没有调用,所以不会运行这个函数体。
匿名函数
匿名函数,匿名指的是我们不知道这个函数的名字,当我们使用的时候,用lambda来声明匿名函数,这种匿名函数是没有名字的,是临时使用的
格式:
函数对象名 = lambda形式参数:表达式
当函数较复杂时,不建议匿名函数,不好写而且结构难理解
函数的递归
比较简单,一个例子就能懂,还有比较著名的斐波拉契数也是递归的典型