函数及匿名函数
作业
1. 怎么给函数编写⽂档?
2. 怎么给函数参数和返回值注解?
3. 闭包中,怎么对数字、字符串、元组等不可变元素更新。
4. 分别根据每一行的首元素和尾元素大小对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)
5. 利用python解决汉诺塔问题?
有a、b、c三根柱子,在a柱子上从下往上按照大小顺序摞着64片圆盘,把圆盘从下面开始按大小顺序重新摆放在c柱子上,尝试用函数来模拟解决的过程。(提示:将问题简化为已经成功地将a柱上面的63个盘子移到了b柱)
1.函数文档起到描述函数的作用,一般在“”“”“”三引号括住
def funcname():
"""Hello World"""
...
return ...
2.参数注解就是,在定义函数的时候,参数列表内部的参数后面,加上冒号和要传入的类型
返回值注解:在参数列表后面,冒号前面,增加一个 -> 后面接返回值的类型。
def add(x:int, y:int): #参数注解
return x+y
def add(x:int, y:int) -> int: #返回值注解
return x+y
3.将不可变元素置于一些可变对象,如列表、字典中
或者使用nonlocal将变量声明为自由变量
def foo():
ns = {}
ns['a'] = 1
def bar():
ns['a'] += 1
print (ns['a'])
return bar
4.代码如下:
lst = [[6, 5], [3, 7], [2, 8]]
lst1 = sorted(a, key=lambda x: x[0])
print(lst1)
lst2 = sorted(a, key=lambda x: x[1])
print(lst2)
"""
[[2, 8], [3, 7], [6, 5]]
[[6, 5], [3, 7], [2, 8]]
"""
5.代码如下:
def hanoi(n,x,y,z):
if n == 1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y)
print(x,'-->',z)
hanoi(n-1,y,x,z)
n = int(input("请输入汉诺塔的层数:"))
hanoi(n,'X','Y','Z')
"""
请输入汉诺塔的层数:4
X --> Y
X --> Z
Y --> Z
X --> Y
Z --> X
Z --> Y
X --> Y
X --> Z
Y --> Z
Y --> X
Z --> X
Y --> Z
X --> Y
X --> Z
Y --> Z
"""
问题5参考文献:https://www.bilibili.com/video/BV1xs411Q799?p=25