一、学习知识点概要
(一)函数(定义、调用、函数文档、函数参数、函数返回值、变量作用域)
(二)Lambda表达式(匿名函数的定义、应用、)
二、学习内容
(一)函数
1.函数的定义
【在 Python 里有两类函数:
-
第一类:用def关键词定义的正规函数
-
第二类:用lambda关键词定义的匿名函数】
①以def关键词开头,后接函数名和圆括号()。
②函数执行的代码以冒号起始,并且缩进。
③return[表达式]结束函数,选择性地返回一个值给调用方。
def div(x,y):
return x/y
④不带表达式的return相当于返回None。
2.函数的调用
3.函数文档
形式参数和实际参数
4.函数参数
5.函数的返回值
6.变量作用域
①Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
②定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
③定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
④局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
⑤当内部作用域想修改外部作用域的变量时,就要用到关键字global和nonlocal:
(1)内嵌函数
(2)闭包(闭包的返回值通常是函数)
1.是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。
2.如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包。
3.通过闭包可以访问外层非全局作用域的变量,这个作用域称为闭包作用域。
4.如果要修改闭包作用域中的变量则需要关键字nonlocal。
(3)递归:如果一个函数在内部调用自身本身,这个函数就是递归函数。(斐波那契数列、设置递归层数)
(二)Lambda表达式
1.匿名函数的定义
python 使用lambda关键词来创建匿名函数,而非def关键词,它没有函数名,其语法结构如下:
lambda argument_list: expression
①lambda - 定义匿名函数的关键词。
②argument_list - 函数参数,它们可以是位置参数、默认参数、关键字参数,和正规函数里的参数类型一样。
③:
- 冒号,在函数参数和表达式中间要加个冒号。
④expression - 只是一个表达式,输入函数参数,输出一些值。
注意:
①expression 中没有 return 语句,因为 lambda 不需要它来返回,表达式本身结果就是返回值。
②匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
2.匿名函数的应用
函数式编程 是指代码中每一块都是不可变的,都由纯函数的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出,没有任何副作用。(非函数式编程、函数式编程)
三、学习问题与解答(课后题)
1.怎么给函数编写⽂档?
def MyFirstFunction(name):
"name是形参"
print('传递进来的{0}是具体值'.format(name))
MyFirstFunction('aaa')
print(MyFirstFunction.__doc__)
help(MyFirstFunction)
2. 怎么给函数参数和返回值注解?
不清楚……
3.闭包中,怎么对数字、字符串、元组等不可变元素更新。
需要nonlocal关键字进行修改。
4.分别根据每一行的首元素和尾元素大小对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)
a = [[6, 5], [3, 7], [2, 8]]
a.sort(key=lambda x:x[0])
print(a)
#[[2, 8], [3, 7], [6, 5]]
a = [[6, 5], [3, 7], [2, 8]]
a.sort(key=lambda x:x[1])
print(a)
#[[6, 5], [3, 7], [2, 8]]
5.利用python解决汉诺塔问题?
参考了文档中的链接:技术图文:如何实现汉诺塔问题? (qq.com)
实际上是今天所学的递归问题的一种,编写了函数move进行移动的分析。
四、学习思考与总结
1.第一次看完整个文档的时候还是一头雾水,写完笔记之后重新完整地过了一遍才比较建立起思维网络,但实际上好像还没有做到真正地应用起来。
2.本次学习加笔记时间大概五个小时左右。
3.很感谢能有这样一次较为系统地学习python的机会,虽然只是非常基础的一些内容,但好歹也逼着自己跟上其他人的步伐,每天认认真真地学一点新的内容,不懂的自己查百度、看视频,加深理解和印象。
4.有几篇笔记很荣幸地被表扬了,很感谢群里的师兄师姐还有小伙伴们,祝大家都开心快乐,期末加油!