五、函数与lambda表达式

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)
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页