def 函数名(形参列表)
函数体
return语句
注意:
,
来分隔这多个返回值_
来忽略不想要的返回值。def test(a,b):
return a+b , a-b
a = 10
b = 12
_,dif = test(a,b)
print(dif) # -2
链式调用指的是把一个函数的返回值,作为调用另一个函数时的参数进行传入。
def Add(x, y):
return x + y
print(Add(10, 20)) # 30
嵌套调用指的是在一个函数的函数体内部,调用了其他函数。
def test():
print('test()')
test()
递归掉是嵌套调用的一种特殊情况,即在一个函数内部嵌套调用自己。
#求一个数的阶乘
def factor(n):
if n == 1:
return 1
return n * factor(n - 1)
使用递归时需要注意:
可以给函数的形参指定默认值,在调用函数时可以不必给带有默认值的形参传参,此时该形参将会使用我们指定的默认值。
def add(a, b = 1):
return a + b
print(add(1))
print(add(1,3))
需要注意的是,带默认参数的形参,需要在没有默认值的参数后面,这一点和C++的半缺省参数的用法一样,都是从右到左且连续
形参名称前面添加*
,这时函数将接收一个参数元组,并且我们可以以 形参名[下标] 的方式相应地访问传入的各个实参。
def Func(*arg):
n = len(arg)
for i in range(n):
print(arg[i])
Func(1) # 1
Func(1, 2, 3) # 1 2 3
每一个变量都有自己的作用域:
注意事项:
变量只能在自己所在的函数内部生效。
在不同的作用域中,允许存在同名的变量。
函数内部尝试访问的变量在局部不存在,就会尝试去全局域中查找
a = 10
def test():
print(f'a = {a}')
test() # a = 10
a = 10
def test():
global a
a = 1000
print(f'a = {a}')
test() # a = 1000
a = 10
def test():
a = 1000
print(f'a = {a}')
test() # a = 1000
print(a) # 10
for i in range(10):
print(f'函数内: i = {i}')
print(f'函数外部: i = {i}') # i = 9