1. 怎么给函数编写⽂档?
为了其他⼈能够理解程序,需要给函数编写⽂档,可以通过以下两种⽅式 :
1)添加注释(以 # 开头的内容):
2)添加独⽴的文档字符串
在 def 语句后(函数的第一行)添加⼀段说明性的字符,称为⽂档字符串(docstring),这将作为函数的⼀部分被存储。
下⾯的代码演示了如何给函数添加⽂档字符串:
def test(a,b):
'''⽤来完成对2个数求和
参数:
a:第⼀个加数
b:第⼆个加数
返回值:
这个函数没有返回值'''
print(a+b)
访问说明⽂档和⽂档字符串可以通过以下形式:
print(test.__doc__) #第一种方式
test? #第二种方式
help(test) #第三种方式
2. 怎么给函数参数和返回值注解?
- 参数注解:在定义函数的时候,在参数列表内部的参数后面加上冒号和要传入的类型,例如:
def accumlate(x:int, y:int):
return x*y
- 返回值注解:在参数列表后面,冒号前面,增加一个 -> 符号,后面写返回值的类型。例如:
def accumlate(x:int, y:int) -> int:
return x*y
这些注解都会以字典的形式存在函数的 .annotations 属性中。
accumlate.__annotations__
{'x': int, 'y': int, 'return': int}
print(accumlate.__annotations__)
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}
输出字典中的value存的是数据的type,即类型。
3. 闭包中,怎么对数字、字符串、元组等不可变元素更新?
如果要修改闭包作用域中的变量则需要 nonlocal 关键字
4. 分别根据每一行的首元素和尾元素大小对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)
a = [[6, 5], [3, 7], [2, 8]]
a.sort( key=lambda a:a[0])
print(a)
a.sort( key=lambda a:a[1])
print(a)
[[2, 8], [3, 7], [6, 5]]
[[6, 5], [3, 7], [2, 8]]
5. 利用python解决汉诺塔问题
有a、b、c三根柱子,在a柱子上从下往上按照大小顺序摞着64片圆盘,把圆盘从下面开始按大小顺序重新摆放在c
柱子上,尝试用函数来模拟解决的过程。(提示:将问题简化为已经成功地将a柱上面的63个盘子移到了b柱)
不知怎样用函数描述解决过程。
尝试如下:a柱子上的圆盘可以看做是一个序列中的元素,例如列表或元组,这些元素是排好序的。实现圆盘由a到c,实际是对a进行两次反转,于是定义函数对a进行反转,之后连续调用两次该函数
def f(a):
new=list(reversed(a))
return new
a=list(range(64))
c=f(f(a))
print(c)