中国大学 MOOC 课程 《Python 语言程序设计》第六周
2017-12-03 19:30
1826 查看
中国大学 MOOC 课程 《Python 语言程序设计》第六周
一、lambda函数1,lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。作为表达式,lambda返回一个值(即一个新的函数)。lambda用来编写简单的函数,而def用来处理更强大的任务。
[python] view plain copy
f = lambda x,y,z : x+y+z
print f(1,2,3)
g = lambda x,y=2,z=3 : x+y+z
print g(1,z=4,y=5)
输出结果为:
[python] view plain copy
6
10
2,lambda表达式常用来编写跳转表(jump table),就是行为的列表或字典。例如:
[python] view plain copy
L = [(lambda x: x**2),
(lambda x: x**3),
(lambda x: x**4)]
print L0,L1,L2
D = {‘f1’:(lambda: 2+3),
‘f2’:(lambda: 2*3),
‘f3’:(lambda: 2**3)}
print D‘f1’,D‘f2’,D‘f3’
输出结果为:
[python] view plain copy
4 8 16
5 6 8
3,lambda表达式可以嵌套使用,但是从可读性的角度来说,应尽量避免使用嵌套的lambda表达式。
4,map函数可以在序列中映射函数进行操作。例如:
[python] view plain copy
def inc(x):
return x+10
L = [1,2,3,4]
print map(inc,L)
print map((lambda x: x+10),L)
输出结果为:
[python] view plain copy
[11, 12, 13, 14]
[11, 12, 13, 14]
5,列表解析可以实现map函数同样的功能,而且往往比map要快。例如:
[python] view plain copy
print [x**2 for x in range(10)]
print map((lambda x: x**2), range(10))
输出结果为:
[python] view plain copy
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
6,列表解析比map更强大。例如:
[python] view plain copy
print [x+y for x in range(5) if x%2 == 0 for y in range(10) if y%2 ==1]
输出结果为:
[python] view plain copy
[1, 3, 5, 7, 9, 3, 5, 7, 9, 11, 5, 7, 9, 11, 13]
7,生成器函数就像一般的函数,但它们被用作实现迭代协议,因此生成器函数只能在迭代语境中出现。例如:
[python] view plain copy
def gensquares(N):
for i in range(N):
yield i**2
for i in gensquares(5):
print i,
输出结果为:
[python] view plain copy
0 1 4 9 16
8,所有的迭代内容(包括for循环、map调用、列表解析等等)将会自动调用iter函数,来看看是不是支持了迭代协议。
9,生成器表达式就像列表解析一样,但它们是扩在圆括号()中而不是方括号[]中。例如:
[python] view plain copy
for num in (x**2 for x in range(5)):
print num,
输出结果为:
[python] view plain copy
0 1 4 9 16
10,列表解析比for循环具有更好的性能。尽管如此,在编写Python代码时,性能不应该是最优先考虑的。
11,没有return语句时,函数将返回None对象。
12,函数设计的概念:
耦合性:只有在真正必要的情况下才使用全局变量
耦合性:不要改变可变类型的参数,除非调用者希望这样做
耦合性:避免直接改变另一个文件模块中的变量
聚合性:每一个函数都应有一个单一的、统一的目标
13,最后给个默认参数和可变参数的例子:
[python] view plain copy
def saver(x=[]):
x.append(1)
print x
saver([2])
saver()
saver()
saver()
输出结果为:
[python] view plain copy
[2, 1]
[1]
[1, 1]
[1, 1, 1]
二、map函数:
Python中map()、filter()、reduce()这三个都是应用于序列的内置函数。
格式:
map(func, seq1[, seq2,…])
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
Python函数编程中的map()函数是将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回。如果func为None,作用同zip()。
1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。
让我们来看一下只有一个seq的时候,map()函数是如何工作的。
work
从上图可以看出,函数func函数会作用于seq中的每个元素,得到func(seq
)组成的列表。下面举得例子来帮助我们更好的理解这个工作过程。
使用lambda
print map(lambda x: x % 2, range(7))[0, 1, 0, 1, 0, 1, 0]
三、list函数:
本函数是创建一个列表对象返回。列表对象是一个可修改的容器
list(9,10)=[9,10]
list(“liu”)=[l,i,u]
四、
import turtle def main(): #设置窗口信息 turtle.title('数据驱动的动态路径绘制') turtle.setup(800, 600, 0, 0) #设置画笔 pen = turtle.Turtle() pen.color("red") pen.width(5) pen.shape("turtle") pen.speed(5) #读取文件 result=[] file = open("data.txt","r") for line in file: result.append(list(map(float, line.split(',')))) print(result) #动态绘制 for i in range(len(result)): pen.color((result[i][3],result[i][4],result[i][5])) pen.forward(result[i][0]) if result[i][1]: pen.rt(result[i][2]) else: pen.lt(result[i][2]) pen.goto(0,0) if __name__ == '__main__': main()
五、if name == ‘main‘:
main()
很多新手刚开始学习python的时候经常会看到python 中name = \’main\’ 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中name = ‘main’ 的作用,到底干嘛的?
有句话经典的概括了这段代码的意义:
“Make a script both importable and executable”
意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
这句话,可能一开始听的还不是很懂。下面举例说明:
先写一个模块:
?
1
2
3
4
5
module.py
def main():print “we are in %s”%name
if name == ‘main‘:
main()
这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in main“,说明我们的if语句中的内容被执行了,调用了main():
但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?
?
1
2
3
anothermodle.py
from module import mainmain()
其执行的结果是:we are in module
但是没有显示”we are in main“,也就是说模块name = ‘main’ 下面的函数没有执行。
这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次
9c43
。这才是关键。!!!
总结一下:
如果我们是直接执行某个.py文件的时候,该文件中那么”name == ‘main‘“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时name的值就是我们这个py文件的名字而不是main。
这个功能还有一个用处:调试代码的时候,在”if name == ‘main‘“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行
相关文章推荐
- 中国大学 MOOC 课程 《Python 语言程序设计》第六周课后习题
- 中国大学 MOOC 课程 《Python 语言程序设计》 课后练习(第 2 周)
- 中国大学 MOOC 课程 《Python 语言程序设计》第五周课后习题
- 中国大学 MOOC 课程 《Python 语言程序设计》 课后练习(第 4 周)
- 中国大学 MOOC 课程 《Python 语言程序设计》第五周绘制树
- python语言程序设计MOOC
- Python系列课程——中国大学MOOC
- C语言程序设计 课程实施细则
- Python语言程序设计-学习笔记1:简介及目录
- MOOC 中国大学 python爬取股票信息
- 广东海洋大学 电子1151 孔yanfei python语言程序设计 第五周
- 《C语言及程序设计进阶》网络课程主页
- Python程序设计课程教学方法与教学重点探讨
- Python BeautifuSoup 库 mooc 中国大学学习
- Python语言程序设计-Week1-基本方法
- python 程序设计语言 笔记(三)
- Python 程序设计语言 笔记(四)
- 广东海洋大学 电子1151 孔yanfei python语言程序设计 第七周
- 【20171014】python_语言设计(7)面向过程程序设计
- 【备忘】最新Python自然语言分析视频课程下载