函数
参数类型
Python 函数的参数可以分为默认参数,位置参数,关键字参数,可变参数。
位置参数:要求实参顺序和形参顺序完全一致,由形参顺序决定实参顺序。
缺省参数:定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数。
关键字参数:调用函数的时候使用的是键值对的方式,key=values。混合传参时关键字参数必须在位置参数之后。
可变参数:传入的参数个数是可变的,可以是一个、两个到任意个,还可以是零个。
缺省参数不能放在位置参数前面。
程序示例:
# 报错:SyntaxError: parameter without a default follows parameter with a default
def infos(name, age=18, gender):
print("Name:%s Age:%s Gender:%s" % (name, age, gender))
程序示例:
def infos(name, age=18, gender='M'):
print("Name:%s Age:%s Gender:%s" % (name, age, gender))
infos("John") # 后面两个默认参数全部保持默认
infos("John", 18) # 最后一个参数保持默认
infos(name="John", age=18, gender='M') # 等价于 infos("John", age=18, gender='M')
infos("John", gender='M') # 跳过第二个参数,第二个参数保持默认
# 有跳过的参数时,后面的参数要指明是赋值给哪个形参
# infos(name="John", 'M') # SyntaxError: positional argument follows keyword argument
可变参数是个数可变的。
用 * 表达的形参可以接受多个实参,多个实参会被封装成元组,此时传递参数时,如果传递的实参是一个列表,则列表前面也要放 *,表示拆包。
用 ** 表达的形参可以接受多个实参,多个实参会被封装成字典,此时传递参数时,如果只有一个实参,则实参前面也要放 **。
程序示例:
def add(*args):
print(args)
result = sum(args)
return result
print(add(1, 2, 3, 4, 5, 6))
print(add(1))
结果:
(1, 2, 3, 4, 5, 6)
21
(1,)
1
程序示例:
def add(*args):
print(args)
result = sum(args)
return result
# print(add([1, 2, 3, 4, 5, 6])) # TypeError: unsupported operand type(s) for +: 'int' and 'list'
print(add(*[1, 2, 3, 4, 5, 6]))
结果:
(1, 2, 3, 4, 5, 6)
21
程序示例:
def f(**kwargs):
for key, value in kwargs.items():
print(f'{key}: {value}')
dict1 = {'a': 1, 'b': 2, 'c': 3}
f(**dict1)
结果:
a: 1
b: 2
c: 3
变量作用域
程序示例:
num1 = 10 # 全局变量
def domain():
num1 = 20 # 局部变量
print(num1)
print(num1) # 10
domain() # 20
print(num1) # 10
程序示例:
num1 = 10 # 全局变量
def domain():
global num1 # 全局变量
num1 = 20
print(num1)
print(num1) # 10
domain() # 20
print(num1) # 20
程序示例:
num1 = 10 # 全局变量
def domain():
# global num1 = 20 # 报错:SyntaxError: invalid syntax
print(num1)
print(num1) # 10
domain() # 20
print(num1) # 20
程序示例:
list1 = [1, 2, 3, 4, 5]
def domain():
list1[0] = 100
print(list1)
print(list1) # [1, 2, 3, 4, 5]
domain() # [100, 2, 3, 4, 5]
print(list1) # [100, 2, 3, 4, 5]
匿名函数
lambda 函数是一种快速定义单行的最小函数。
递归函数
一个函数调用自身称为递归调用,一个会调用自身的函数称为递归函数。
a、写出临界条件
b、找这一次和上一次的关系
C、假设当前函数已经能用,调用自身计算上一次结果,再求出本次结果当参数满足一个条件时,函数不再执行。
程序示例:
# 10阶楼梯,每次上1个台阶或者上2个台阶,问一共有多少种走法
def fibonacci(n):
if n == 1:
return 1
if n == 2:
return 2
return fibonacci(n - 1) + fibonacci(n - 2)
for i in range(1, 11):
print(fibonacci(i))
结果:
1
2
3
5
8
13
21
34
55
89
改写成循环:
# 10阶楼梯,每次上1个台阶或者上2个台阶,问一共有多少种走法
a = [0, 1, 2]
for i in range(3, 11):
a.append(a[i - 1] + a[i - 2])
print(a[-1])
浙公网安备 33010602011771号