def my_sum(x,y): #定义函数名
res = x+y
return res #返回函数执行结果
c = my_sum(4,5) #结果赋值给c变量
print(c)
减少重复代码
使程序变的可扩展
使程序变得易维护
形参即变量名就是函数定义阶段的参数,实参即变量值就是函数调用阶段的参数,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定
#===========默认参数===========
def stu_register(name,age,course,country="CN"):
print("----注册学生信息------")
print("姓名:",name)
print("age:",age)
print("国籍:",country)
print("课程:",course)
stu_register("王山炮",22,"python_devops")
#===========关键字参数===========
def stu_register(name, age, course=‘PY‘ ,country=‘CN‘):
print("----注册学生信息------")
print("姓名:", name)
print("age:", age)
print("国籍:", country)
print("课程:", course)
stu_register("王山炮",course=‘PY‘, age=22,country=‘JP‘ )
#===========*args===========
def foo(x, y, *args):
print(x, y)
print(args)
foo(1, 2, 3, 4, 5)
"""
1 2
(3, 4, 5)
"""
def foo(x, y, z):
print(x, y, z)
foo(*[1, 2, 3])
"""
1 2 3
"""
#===========**kwargs===========
def foo(x, y, **kwargs):
print(x, y)
print(kwargs)
foo(1, y=2, a=1, b=2, c=3)
"""
1 2
{‘b‘: 2, ‘c‘: 3, ‘a‘: 1}
"""
def foo(x, y, z):
print(x, y, z)
foo(**{‘z‘: 1, ‘x‘: 2, ‘y‘: 3})
"""
2 3 1
"""
#===========*args+**kwargs===========
def foo(x, y):
print(x, y)
def wrapper(*args, **kwargs):
foo(*args, **kwargs)
#===========*后定义的参数,必须被传值(有默认值的除外)且必须按照关键字实参的形式传递===========
def foo(x,y,*args,b,a=1,**kwargs):
print(x, y)
print(args)
print(a)
print(b)
print(kwargs)
foo(1,2,3,4,5,b=3,c=4,d=5)
"""
1 2
(3, 4, 5)
1
3
{‘c‘: 4, ‘d‘: 5}
"""
函数外部的代码要想获取函数的执行结果,就可以在函数里用return语句把结果返回
def my_sum(x,y):
res = x+y
return x,y,res #返回函数执行结果
c = my_sum(4,5) #结果赋值给c变量
print(c)
函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
如果未在函数中指定return,那这个函数的返回值为None,return 逗号分隔多个值返回元组。
在函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。
当全局变量与局部变量同名时,在定义局部变量的函数内,局部变量起作用,在其它地方全局变量起作用。
name = "zhangsan"
def change_name():
global name
name = "lisi"
print("after change", name)
change_name()
print(name)
global name的作用就是要在函数里声明全局变量name ,意味着最上面的name = "zhangsan"即使不写,程序最后面的print也可以打印nam,只是name变成了lisi
LEGB 代表名字查找顺序: locals -> enclosing -> globals -> __builtins__locals 是函数内的名字空间,包括局部变量和形参enclosing 外部嵌套函数的名字空间(闭包中常见)globals 全局变量,函数定义所在模块的名字空间builtins 内置模块的名字空间
name = "zhangsan"
def change_name():
name = "lisi"
def change_name2():
name = "wangwu"
print("第3层打印", name)
change_name2() # 调用内层函数
print("第2层打印", name)
change_name()
print("最外层打印", name)
第3层打印 wangwu
第2层打印 lisi
最外层打印 zhangsan
匿名函数就是不需要显式的指定函数名
lambda函数
#这段代码
def calc(x,y):
return x**y
print(calc(2,5))
#换成匿名函数
calc = lambda x,y:x**y
print(calc(2,5))
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def add(x,y,f):
return f(x) + f(y)
res = add(3,-6,abs)
print(res)
只需满足以下任意一个条件,即是高阶函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
def calc(n):
print(n)
if int(n/2) ==0:
return n
return calc(int(n/2))
calc(10)
输出
10
5
2
1
def calc(n):
v = int(n/2)
print(v)
if v > 0:
calc(v)
print(n)
calc(10)
输出
5
2
1
0
1
2
5
10
递归函数实际应用案例,二分查找
原文:https://www.cnblogs.com/zhaohw127/p/10565953.html