一、函数的作用:
1.减少重复代码
2.方便修改,更易扩展
3.保持代码的一致性
二、
2.1函数的创建
def f():
print('ok') #创建
f() #调用一定记得加括号
2.2函数的命名规则
同变量的命名规则
3.3函数的形参与实参
三、参数
def print_info(name,age):
print('Name: %s'%name)
print('Age: %d'%age)
print_info('zhang',18) #必须参数 顺序必须一致
print_info(age=18,name='zhang') #关键字参数
默认参数 例如 def print_info(name,age,sex='male')
如果有默认参数 必须放左边
def add(*args): #不定长参数
print(args) #args 是一个元组
sum = 0
for i in args:
sum+=i
print(sum)
add(1,2,3,4)
def print_info(*args,**kwargs):
print(args) #('zhang', 18, 'male')
print(kwargs) #{'job': 'IT', 'height': 180}
for i in kwargs:
print_info('%s:%s'%(i,kwargs[i]))
print_info('zhang',18,'male',job = 'IT',height = 180)
关于不定长参数的位置:*args放在函数的左边 **kwargs放在右边
函数参数的顺序
def func(name,age=22,*args,**kwargs)
顺序为 默认参数 关键字参数 不定长参数 (*args在左边 **kwargs在右边)
四、函数的返回值
def f():
print('ok')
return 10 #作用:1.结束函数 2.返回某个对象
print('zhang') #这里的值就没有意义了 因为已经return了
a = f()
print(a)
print(f())
def add(*args):
print(args)
sum = 0
for i in args:
sum+=i
print(sum)
return sum #返回函数的计算结果 以便后面调用
a = add(1,4)
print(a)
return 的注意点:1.函数如果没有return,会默认返回一个None
2.如果return 多个对象,那么Python会将这些对象封装成一个元组
五、函数的作用域
1.变量查找顺序:LEGB
作用域局部 > 外层作用域 > 当前模块中的全局 > python内置作用域
2.只有模块、类、及函数才能引入新作用域
3.对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量
4.内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字、嵌套作用域变量要使用nonlocal关键字、nonlocal是python3新增的关键字,有了这个关键字,就能完美的实现闭包了
六、高阶函数
函数名可以进行赋值
函数名可以作为函数参数,还可以作为函数的返回值
def f(n):
return n*n
def foo(a,b,func):
ret = func(a)+func(b)
return ret
print(foo(1,2,f))
七、递归函数
求阶乘
def fact(n):
if n == 1:
return 1
else:
return n*fact(n-1)
print(fact(5))
关于递归的特点
1.函数调用自身函数
2.有一个结束条件
但凡是递归可以写的,循环都可以解决
递归的效率在很多时候很低
def fibo(n):
# before = 0
# after = 1
if n==0 or n==1:
return n
else:
return fibo(n-1)+fibo(n-2)
print(fibo(3))