函数
定义
函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
特性
- 减少重复代码
- 使程序变得可拓展
- 使程序变得易维护
语法定义
def 函数名():
函数体
(return 返回值) # 当有返回值时必须添加return
函数名() # 调用函数
可以带参数
def Calc(x,y):
result = x**y
return result
a = 2
b = 3
res = Calc(a,b)
print(res)
# 结果
8
参数
参数有形式参数(简称形参)、实参、默认参数、关键参数、位置参数、非固定参数。
形参和实参
具体的不多做解释,读者不明白请去百度,一张图认清形参和实参。
默认参数
传值时某个参数可以默认指定,比如个人信息中的国籍可以默认指定为中国,此时在定义函数时要对形参格式稍加改动。
def stu_info(name, age, country, course):
修改为
def stu_info(name, age, course, country='CN'):
在调用时如果不指定country值时,就会默认为CN,此时的country='CN’就是关键参数
def stu_info(name, age, course, country='CN'):
info = '''
——————————info of %s——————————
Name:%s
Age:%s
Country:%s
Course:%s
—————————— end ——————————————
''' % (name, name, age, country, course)
print(info)
stu_info('Martin', '22', 'Python')
#结果
————————info of Martin——————————
Name:Martin
Age:22
Country:CN
Course:Python
—————————— end ——————————————
关键参数和位置参数
正常情况下,给函数传递参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可(指定了参数名的就加关键参数),但记住一个要求就是,关键参数必须放在位置参数(以位置顺序确定对应关系的参数)后面。
调用
调用可以这样
stu_info("王三炮",course="PY", age=22, country="JP")
但绝不可以这样
stu_info("王三炮",course="PY", 22, country="JP")
当然这样也不行
stu_info("王三炮", 22, age=22, country="JP") # 相当于给age赋值两次,会报错
非固定函数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
*args 元组
def stu_info(name, age, *args): # args会把多出入的参数变成一个元组形式
print(name, age, args)
stu_info('Martin',22)
stu_info('Martin', 22, 'CN', 'Python', 1)
#结果
Martin 22 () # stu_info('Martin',22) *args没有传入值,所以元组是空的
Martin 22 ('CN', 'Python', 1)
**kwargs 字典
def stu_info(name, age, *args, **kwargs): # **kwargs会把多输入的参数变成一个字典形式
print(name, age, args, kwargs)
stu_info('Martin',22)
stu_info('Martin', 22, 'CN', 'Python', 1, country='CN',course='Python')#注意后两个与前面的区别
# 结果
Martin 22 () {} # **kwargs没有传值,所以是空字典
Martin 22 ('CN', 'Python', 1) {'country': 'CN', 'course': 'Python'}
嵌套函数
通俗来说就是函数体里面包含函数
name = 'Martin'
def change_name1():
name = 'Martin2'
def change_name2():
name = 'Martin3'
print('第三层打印', name)
change_name2()
print('第二层打印', name)
change_name1()
print('第一层打印', name)
# 结果
第三层打印 Martin3
第二层打印 Martin2
第一层打印 Martin
匿名函数
匿名函数就是不需要显示定义的函数
def Calc(x,y):
result = x**y
return result
print(Calc(2,3))
换成匿名函数:
calc = lambda x,y:x**y
print(calc(2, 3))
当匿名函数与其他函数配合使用时会很方便高效
res = map(lambda x:x**2, [2, 3, 4, 5])
for i in res:
print(i)
结果
4
9
16
25
高阶函数
变量能指向函数,函数的参数能接收变量,那么一个函数就可以接收另一函数作为参数,这种函数就称之为高阶函数。
def add(x, y, f):
return f(x)+f(y)
res = add(3, -6, abs) # abs传递给f,则f()就相当于abs()
print(res)
结果
9
只需满足一下任意一个条件,就是高阶函数
- 接收一个或多个函数作为输入
- return 返回另外一个函数
递归
在函数内部调用自身的函数叫做递归函数
def calc(n):
print(n)
if int(n / 2) == 0:
return n
else:
return calc(int(n/2))
calc(10)
结果
10
5
2
1
内置函数
详见:http://www.runoob.com/python/python-built-in-functions.html