函数的定义与调用
函数的创建
def calc(a,b): #calc变量名,a,b型参
c=a+b
return c
d=calc(100,200) #calc(100,200)实参
print(d)
#300
函数的返回值
函数返回多个值时,结果为元组
def fun(num):
odd=[] #存奇数
even=[] #存偶数
for i in num:
if i%2:
odd.append(i)
else:
even.append(i)
return odd,even
print(fun([10,21,30,41,50,61]))
#([21, 41, 61], [10, 30, 50])
- 如果函数没有返回值(函数执行完毕之后,不需要给调用处提供数据),return可以省略不写
- 函数的返回值,如果是1个,直接返回类型
- 函数的返回值,如果是多个,返回的结果为元组
函数的定义
函数定义默认参数
- 函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun(a,b=10):
print(a,b)
fun(10) #只有一个参数,b采用默认值
fun(20,30) #30将b的默认值10替换
'''
10 10
20 30
'''
函数的参数定义
- 个数可变的位置参数
- 定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
- 使用*定义可变的位置形参,结果为一个元组
def fun(*args):
print(args)
fun(10)
fun(10,20,30,40)
'''
(10,)
(10, 20, 30, 40)
'''
- 个数可变的关键字形参
- 使用**定义个数可变的关键字形参,结果为一个字典
def fun(**args):
print(args)
fun(a=10)
fun(a=10,b=20,c=30)
'''
{'a': 10}
{'a': 10, 'b': 20, 'c': 30}
'''
变量的作用域
- 局部变量
在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会成全局变量
ef fun():
global age #声明为全局变量
age=20
print(age)
fun()
print(age)
20
20
- 全局变量
函数体外定义的变量,可作用于函数内外
递归函数
递归的调用过程,每递归调用一次函数,都会在栈内存分配一个栈帧,每执行完一次函数,都会释放相应的空间
def fun(n):
if n==1:
return 1
else:
res=n*fun(n-1)
return res
print(fun(6))