注:以下代码为看视频记录下来的,仅供学习参考
# 函数定义和默认参数
def func(x, y = 500):
print(x, y)
func(150)
func(100, 200)
func(y = 300, x = 100)
# 可变参数
def func(name, *numbers):
print(name)
print(numbers)
func('Tom', 1, 2, 3, 4)
# 关键字参数
def func(name, **kvs):
print(name)
print(kvs)
func('Jack', china = 'Beijing', uk = 'London')
# 命名关键字参数
def func(*, china, uk): # *用于和普通参数做分割,*args一样效果
print(china, uk)
func(china = 'Beijing', uk = 'London') # 必须传入参数名
# 复杂情况
def func(a, b, c = 0, *args, **kvs):
print(a, b, c, args, kvs)
func(1, 2)
func(1, 2, 3)
func(1, 2, 3, 'a', 'b')
func(1, 2, 3, 'a', 'b', china = 'Beijing', uk = 'London')
func(1, 2, 3, *('a', 'b'), **{'china':'Beijing', 'uk':'London'})
# 递归的经典例子!
def fib(n):
if n < 1:
raise ValueError
elif (n == 1) or (n == 2):
return 1
else:
return fib(n - 1) + fib(n - 2)
print(fib(1))
print(fib(2))
print(fib(3))
print(fib(4))
print(fib(5))
print(fib(6))
以下是结果
150 500
100 200
100 300
Tom
(1, 2, 3, 4)
Jack
{'china': 'Beijing', 'uk': 'London'}
Beijing London
1 2 0 () {}
1 2 3 () {}
1 2 3 ('a', 'b') {}
1 2 3 ('a', 'b') {'china': 'Beijing', 'uk': 'London'}
1 2 3 ('a', 'b') {'china': 'Beijing', 'uk': 'London'}
1
1
2
3
5
8
汉诺塔问题:
def move(n, source, target, helper):
if n == 1:
print source + ' -> ' + target
else:
move(n - 1, source, helper, target)
print source + ' -> ' + target
move(n - 1, helper, target, source)
move(4, 'A', 'B', 'C')
'''
A -> C: [2, 3, 4], [], [1]
A -> B: [3, 4], [2], [1]
C -> B: [3, 4], [1, 2]
A -> C: [4], [1, 2], [3]
B -> A: [1, 4], [2], [3]
B -> C: [1, 4], [], [2, 3]
A -> C: [4], [], [1, 2, 3]
A -> B: [], [4], [1, 2, 3]
C -> B: [], [1, 4], [2, 3]
C -> A: [2], [1, 4], [3]
B -> A: [1, 2], [4], [3]
C -> B: [1, 2], [3, 4], []
A -> C: [2], [3, 4], [1]
A -> B: [], [2, 3, 4], [1]
C -> B: [], [1, 2, 3, 4], []
'''