找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4482|回复: 3

[代码与实例] Python小知识的整理和分享

3

主题

3

帖子

3

积分

贫民

积分
3
xuexiPython 发表于 2016-8-5 09:56:11 | 显示全部楼层 |阅读模式
1.特殊变量"name"
我们可以在我们的python文件中加入如下代码,以方便进行单元测试。
def unit_test():
    print("this is a unit test!")

if __name__ == "__main__":
    unit_test()

当Python检测到一个程序文件正在被解释器执行而不是作为一个被导入的模块,它会把特殊变量__name__(两边为双下划线)设置为"__main__"。这意味着任何在if代码块内的代码只有在这种情况下才会被执行:脚本作为主程序运行而不是作为被另一个程序导入的文件。如果这个文件本来只是想被用作模块的话,unit_test()函数可以用来进行单元测试。


2.enumerate
这是一个在for循环中经常使用的函数。这个函数返回包含迭代对象和一个序列数的元组。在默认情况下,序列数等同于列表的下标。enumerate接受第二个可选的参数,这个参数指定了序列开始的数字,可以使用这个参数来使文件中的行数从1而不是从默认的0开始。

for number,line in enumerate(open("file.py")):
    print(number,'\t',line)


3.生成器表达式
列表推导是一种更一般的循环形式的特定应用。这种循环形式被称为生成器表达式。
使用生成器表达式把1~10的偶数的平方填充进了列表。
[ n*n for n  in range(1,11) if not n*n % 2]

关于生成器表达式,有一点特别重要的是它们并不是一次就生成所有数据。更确切地说,它们根据需要来生成(由此得名)数据项。这样当处理大型数据时,它们可以极大地节省内存资源。

4.上下文管理
Python有一个运行时上下文的概念。它通常包括一个临时性的资源。这个资源就是你的程序想要交互的一些东西。一个常见的示例可能是打开一个文件或一个并发执行的线程。为了处理这个,Python使用了关键字with和一个上下文管理器协议。这个协议帮助你定义你自己的上下文管理器类,但是你在大部分情况下还是会使用Python提供的管理器。
你通过with语句来使用一个上下文管理器:
with open("name_test.py","r") as tmp_file:
    print(tmp_file)
上下文管理器保证文件在使用后被关闭。上下文管理器可以避免使用try/finally结构。contextlib模块为构建你自己的上下文管理器提供了支持。


5.文档字符串
Python程序员经常在他们的程序中使用文档字符串。文档字符串就是字符串字面值,它们没有被赋值给变量,而且遵循在它们被定义地方的缩进级别。可以用文档字符串来描述函数,类或者模块。help()函数会读取并展示这些文档字符串。
51CTO学院Python微职位,随到随学、一对一辅导、闯关式学习
咨询qq:2851001070,qq2851001071



6.生成器函数
生成器函数与标签函数看起来几乎一样。除了标准函数使用return返回数据,而生成器函数使用关键字yield。
Python优雅的魔力使生成器函数很特殊。它们像定格相机一样工作。当一个标准函数遇到return语句时,它会返回值,然后函数就会丢弃它的所有内部数据。当下次函数调用时,一切从头开始。
yield语句会做不同的事。它也会像return一样返回一个值,但是它不会使函数丢弃数据。相反,所有数据都被保存起来了。下次函数调用时,即使yield语句在代码块的中间或者处于循环中,程序也会从yield语句开始执行。
下面的示例返回一个递增的奇数序列:
def odds(start=1):
    if int(start) % 2 == 0: start = int(start)+1
    while True:
        yield start
        start += 2

for n in odds():
    if n > 7:break
    else: print(n)
Python确保生成器函数能够变成迭代器,这样就可以在for循环中使用它们。这样把odds()当成一个集合在使用。每次循环访问它,它会调用生成器函数,然后接收下一个奇数值。通过插入break,可以避免一个无限循环。51CTO学院Python微职位,随到随学、一对一辅导、闯关式学习,咨询qq:2851001070,qq2851001071
前面介绍的生成器表达式就是高效的匿名生成器函数。生成器表达式实际上是一种变相的没有名称的生成器函数。

7.lambda函数
lambda来自于微积分。lambda函数背后的原理是它通常是一个小的匿名函数块。可以把它插入到代码中,然后像一个普通函数一样调用lambda函数。
lambda函数的定义如下所示:
lambda <param1,param2,...,paramN> : <expression>
straight_line = lambda m,x,c:m*x+c
print(straight_line(2,4,-3))
它们就是用来简明地表达那种简短的单行表达式的函数。
回复

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2016-8-5 11:29:05 | 显示全部楼层
{:8_215:}
回复

使用道具 举报

5

主题

165

帖子

165

积分

版主

Rank: 7Rank: 7Rank: 7

积分
165

热心会员突出贡献优秀版主荣誉管理

mongo 发表于 2016-8-9 13:41:34 | 显示全部楼层
回复

使用道具 举报

0

主题

3

帖子

3

积分

贫民

积分
3
Mr.Wen 发表于 2017-8-16 10:19:52 | 显示全部楼层
谢谢分享,我是小白
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表