函数
1、什么是函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
用人话来说就是:需要某块代码多次,为了提高编写的效率以及代码的重用,把具有独立功能的代码段组织为一个小模块,需要时就可以直接调用,这就是函数
函数能提高应用的模块性,和代码的重复利用率
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表): ...... 函数体 ...... return 返回值
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
- 其中参数和返回值不是必须的
参考来自:https://www.cnblogs.com/saneri/p/10055615.html
2、函数的定义和调用
自定义一个函数,求和
# 自定义一个函数求两个数 之和 def my_func(a,b): return a + b # 调用函数 f = my_func(3,88) # 打印结果 print(f)
运行结果:91
- 每次调用函数时,函数会从头开始执行,当这个函数中的代码执行完毕,也意味着调用结束
- 如果函数中执行到了return也会结束函数
3、函数的参数
3.1、实参和形参
# 自定义一个函数求两个数 之和 def my_func(a,b): return a + b # 调用函数 f = my_func(3,88)
其中,上面代码,定义时小括号中的参数,用来接收参数用的,称为 “形参”;调用时小括号中的参数,用来传递给函数用的,称为 “实参”
3.2、按调用函数时参数的书写方式 分为:位置参数与关键字参数
位置参数
# 自定义一个函数求两个数 之和 def my_func(a,b): return a + b # 调用函数时实参只输入一个 f = my_func(3)
上面代码运行时会报错,因为定义函数时有两个形参,而调用时只输入了一个实参
结论:使用位置参数调用函数 需要注意实参的位置,实参的位置和形参的位置要一一对应,少传一个实参会报错
关键字参数
# 定义一个函数 def my_print(name, age, no): print("我的名字:%s" % name) print("我的年龄:%d" % age) print("学号:%s" % no) # 使用关键字参数方式调用函数 my_print(age=23,name='洗涤',no=1)
调用函数的时候使用的是函数的形参名;若关键字参数与位置参数混合使用,需要让位置参数在前 ,关键字参数再后,某个参数使用了关键字参数,后面的都要使用关键字参数
3.3、默认参数(缺省参数)
默认参数即定义时给形参设置一个默认值,后面调用的时候这个参数就可以不写,直接取默认值;也可以后面把一个新的值给到此参数,调用时不给值则默认
# 定义一个有默认参数的函数 def my_print(name, no, age=20): print("我的名字:%s" % name) print("我的年龄:%d" % age) print("学号:%s" % no) # 调用函数 my_print('小明','007')
运行结果:
我的名字:小明
我的年龄:20
学号:007
此时调用函数时可以不写默认的那个参数,定义有默认参数的时候,需要把默认参数写在最后
3.4、可变参数(可以实现函数定义,以及函数调用时,参数个数不匹配的情况)
待补充..................
4、函数的返回值(return+表达式)
用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
4.1、单个返回值
# 定义一个求和函数 def smqh(a,b): re = a + b # 有一个返回值 return re d = smqh(23,2) print(d)
# 如果有一个return+数值,称之为这个函数有返回值
4.2、多个返回值
def my_func(score): if score < 0: print("您传入的分数有误!!!") # 函数的执行提前结束 return #return后面没有值,什么都不返回,这是性能才考虑到的,因为分数小于0 ,后面的不需要再比较,无意义 # 对分数进行判断 if score >= 90: return "优" elif score >= 80: return "良" elif score >= 60: return "中" elif score >= 0: return "差" # 他不会执行 因为在前面已经执行了return print("测试")
return的作用:1、作为函数的返回值
2、执行的函数提前结束(一个函数中可以有多个return语句,只要有一个return语句被执行到,这个函数就会结束了,因此后面的return没有什么用处)
5、函数的嵌套
# 写一个函数打印一条横线 def p_one_d(): print('-'*20) # 打印自定义函数的横线 def p_line(num): for i in range(num): p_one_d() # 调用函数 p_line(3)
运行结果:
--------------------
--------------------
--------------------
函数p_one_d()嵌套在函数p_line()里面,调用函数p_line()时,p_line()函数多次调用了p_one(),这就是函数的嵌套调用
6、函数的文档说明
看文档说明需要用到python的内置函数help(),用来查看python函数的文档说明
若自定义函数没有文档说明,使用help时默认会打印函数附近的注释
其作用:1、可以在时间过了很久后 快速读懂自己的代码;2、便于工作的交接
格式:help(函数名称)
def sumhe(num1,num2): ''' 这是求和的 :param num1:数字1 :param num2: 数字2 :return: 返回两个数字相加 ''' return num1 + num2 help(sumhe)
================================================== 代码运行结果: sumhe(num1, num2) 这是求和的 :param num1:数字1 :param num2: 数字2 :return: 返回两个数字相加
7、匿名函数
###########普通函数############# # 定义一个普通求和函数 def suma(a,b): return a + b print(suma(3,4)) ###########lambda############# f = lambda a,b: a+b ret = f(3,2) print(ret)
lambda的意义就是为了简洁的表达函数
解释:lambda a,b : a + b
冒号左边的lambda 相当于函数的名字(),a,b就是函数的形参;冒号右边的内容就是函数的返回值
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
7.2、把函数当做参数传递
def sanf(a,b,c): print('a = %d' % a) print('b = %d' % b) print('result:%d' % c(a,b))#c是一个函数,当做参数来用 f = lambda a,b : a + b sanf(1, 3, f)
运行结果:
a = 1
b = 3
result:4