目录
函数
函数就是执行特定任务已完成特定功能的一段代码。使用函数可以实现代码的复用,隐藏实现细节,同时提高程序的可读性,便于调试与维护。
一、函数的创建和调用
1.1 函数的创建
def 函数名 ( [ 形式参数 ] ) :
函数体
[ return xxx ]
注意:函数的命名也需要遵守标识符命名规则(数字、字母、下划线)
1.2 函数的调用
函数名 ( [实际参数] )
二、函数的参数传递
2.1 位置实参
根据形参对应的位置进行实参传递
- 使用 * 将序列中的每个元素都转换为位置实参
def fun(a,b,c):
print('a=',a,end='\t')
print('b=',b,end='\t')
print('c=',c)
fun(10,20,30)
lst=[11,22,33]
fun(*lst)
运行结果
2.2 关键字实参
根据形参名称进行实参传递
def bmi(weight, height):
x = weight/(height**2)
return x
'''位置实参'''
print(bmi(48.5, 1.61))
'''关键字实参'''
print(bmi(height=1.61,weight=48.5))
运行结果
- 使用 ** 将字典中的每个键值对都转换为关键字实参
def fun(a,b,c):
print('a=',a,end='\t')
print('b=',b,end='\t')
print('c=',c)
fun(a=10,b=20,c=30)
dic={'a':11,'b':22,'c':33}
fun(**dic)
运行结果
2.3 实参对象类型
- 若实参是不可变对象, 函数体内的修改不会影响实参的值(如字符串等)
- 若实参是可变对象,函数体内的修改会影响实参的值(如列表等)
三、函数的返回值
return 返回值
- 若函数没有返回值(函数执行完毕后,不需要给调用处返回数据),return 可以省略不写
- 若函数的返回值为1个,则返回结果为返回值本身
- 若函数的返回值为多个,则返回结果为以返回值为元素的元组
函数在定义时,是否需要返回值,视情况而定
四、函数的参数定义
4.1 默认值参数
- 函数定义时,给形参设置默认值:
- 调用函数时若未提供对应实参,则使用默认值
- 只有当实参与默认值不符的时候才需要传递实参
def 函数名 ( 形式参数=默认值 ) :
def fun(a,b=10):
print(a,b)
fun(100) # 位置实参100传递给形参a,形参b使用默认值10
fun(100,30)
运行结果
4.2 个数可变的位置形参
- 定义函数时,若无法事先确定传递位置实参的个数时,使用个数可变的位置形参
- 使用 * 定义个数可变的位置形参
- 结果为一个元组
一个函数只能有1个个数可变的位置形参
def 函数名 ( * 形式参数 ) :
4.3 个数可变的关键字形参
- 定义函数时,若无法事先确定传递关键字实参的个数时,使用个数可变的关键字形参
- 使用 ** 定义个数可变的关键字形参
- 结果为一个字典
一个函数只能有1个个数可变的关键字形参
def 函数名 ( ** 形式参数 ) :
注意:定义函数时,若既有个数可变的位置形参,又有个数可变的关键字形参,要求将个数可变的位置形参放在个数可变的关键字形参之前
def 函数名 ( * 形式参数 , ** 形式参数 ) :
4.4 形参类型的组合和顺序问题
def fun1(*args1,**args2):
pass
def fun2(a,b,*,c,d): # 要求c,d只能使用位置参数传递
pass
def fun3(a,b,*,c,d,**args):
pass
五、变量的作用域
即程序代码能访问该变量的区域。变量根据变量的有效范围分为:
- 局部变量
- 在函数体内定义的变量,只在函数体内部有效
- 局部变量使用 global 声明,即可成为全局变量
- 全局变量
- 在函数体外定义的变量,在函数体内部和外部都有效
六、递归函数
即在函数体内调用该函数本身的函数。递归主要由两部分组成:
- 递归调用条件
- 递归终止条件
例1:使用递归函数实现阶乘计算
def fun(n):
if n==1:
return 1
else:
res=n*fun(n-1)
return res
print('5的阶乘是',fun(5))
运行结果
例2:使用递归函数实现斐波那契数列的计算
def fib(n):
if n==1 or n==2:
return 1
else:
res=fib(n-1)+fib(n-2)
return res
print('斐波那契数列第8位的数是',fib(8))
print('斐波那契数列前8位的数是',end='\t')
for i in range(1,9):
print(fib(i),end='\t')
运行结果
Flag:我要成为一个日更选手:)