函数与Lambda表达式
练习1
怎么给函数编写⽂档?
def MyFirstFunction(name):
"函数定义过程中name是形参"
# 因为Ta只是一个形式,表示占据一个参数位置
print('传递进来的{0}叫做实参,因为Ta是具体的参数值!'.format(name))
MyFirstFunction('老马的程序人生')
# 传递进来的老马的程序人生叫做实参,因为Ta是具体的参数值!
print(MyFirstFunction.__doc__)
练习2
怎么给函数参数和返回值注解?
#与给函数编写文档类似
def func(x: int, y: int) -> int:
'''return type int, return x add y '''
return x+y
print(func(1,3)) # 4
练习3
闭包中,怎么对数字、字符串、元组等不可变元素更新
#如果要修改闭包作用域中的变量则需要 nonlocal 关键字
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
# 100
# 100
练习4
分别根据每一行的首元素和尾元素大小对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)
a = [[6, 5], [3, 7], [2, 8]]
a = sorted(a,key=lambda i:i[0])
print(a)
a = sorted(a,key=lambda i:i[-1])
print(a)
#[[2, 8], [3, 7], [6, 5]]
#[[6, 5], [3, 7], [2, 8]]
练习5
有a、b、c三根柱子,在a柱子上从下往上按照大小顺序摞着64片圆盘,把圆盘从下面开始按大小顺序重新摆放在c柱子上,尝试用函数来模拟解决的过程。(提示:将问题简化为已经成功地将a柱上面的63个盘子移到了b柱)
def hlt(n, a, b, c):
if n == 1:
print(a, "->", c)
else:
print(a, "->", b)
hlt(n - 1, a, b, c)
print(b, "->", c)
hlt(64, "a", "b", "c")