函数的构成
- 函数名称
- 函数体
- 关键字def
# 函数名 + 函数体 + 关键字def
def MyFirstFunction():
print("把一切当作艺术")
函数文档
用于对函数解释说明(可以通过函数名.__doc__属性查看)
def MyFirstFunction(name):
'name 为形式参数'
print("把一切当作艺术")
函数的参数
- 普通参数
def sayHello(name,word):
print("我叫"+ name)
print("我的相信"+word)
- 默认参数(关键字)
def sayHello(name="上帝",word="是我创造了世界"):
print("我叫"+ name)
print("我的相信"+word)
- 可变参数*
# 可变参数的函数调用时候,一定用关键字参数 默认会把实参的个数都给可变参数
def test(*params,exp=7):
print("函数参数的长度"+len(params))
局部变量和全局变量
作用区域不同
如果在函数内修改全局变量的值怎么办?
关键字global
内置函数与闭包
nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量,否则会发生错误。
def funx():
x = 5
def funy():
nonlocal x # 如果要修改外部函数的变量需要关键字 我很奇怪赋值为什么不能直接赋值 而要非两步写
x *= x
return x
return funy()
print(funx())
匿名函数-lambda表达式
通俗易懂的点 不愿意起名字就用这个,用完就被回收,但这种写法小白会头疼
# 关键字lambda 参数:表达式
g = lambda x:x+2
print(g(2))
两个常用内置函数配合匿名函数
- filter(函数返回为true,可迭代对象)
- map(函数,可迭代对象)
产生的奇数的数列 应用余数为1 1识别为True
list(filter(lambda x:x % 2,range(10)))
0~9的每个值加上2形成新的序列
list(map(lambda x:x+2,range(10)))
递归函数
特点
- 函数返回值为函数本身
- 有出口 否则死循环
def hannuota(n,x,y,z):
if(n==1):
print(x,"-->",z)
else:
#将n-1放在从x轴放到Y轴上
hannuota(n-1,x,z,y)
#将x轴最后一个放在Z上
print(x,"-->",Z)
#将Y轴上的n-1个从Y轴放在X上
hannuota(n-1,y,x,z)