开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[PYTHON]python 基础笔记(4)

简介:
+关注继续查看

14.Python标准库


简介


Python标准库是随Python附带安装的,它包含大量极其有用的模块。熟悉Python标准库是十分重


要的,因为如果你熟悉这些库中的模块,那么你的大多数问题都可以简单快捷地使用它们来解决



我们已经研究了一些这个库中的常用模块。你可以在Python附带安装的文档的“库参考”一节中


了解Python标准库中所有模块的完整内容。


================================


14.1 sys模块


sys模块包含系统对应的功能。我们已经学习了sys.argv列表,它包含命令行参数。


命令行参数


例14.1 使用sys.argv

------------------------------

#!/usr/bin/python

# Filename: cat.py


import sys

import os


def readfile(filename):

   '''Print a file to the standard output.'''

   f = file(filename)

   while True:

       line = f.readline()

       if len(line) == 0:

           break

       print line, # notice comma

   f.close()


# Script starts from here

if len(sys.argv) < 2:

   print 'No action specified.'

   sys.exit()


if sys.argv[1].startswith('--'):

   option = sys.argv[1][2:]

   # fetch sys.argv[1] but without the first two characters

   if option == 'version':

       print 'Version 1.2'

   elif option == 'help':

       print '''\

This program prints files to the standard output.

Any number of files can be specified.

Options include:

 --version : Prints the version number

 --help    : Display this help'''

   else:

       print 'Unknown option.'

   sys.exit()


else:

   for filename in sys.argv[1:]:

       if not os.path.exists(filename):

          print 'No such file or directory: %s' % filename

          sys.exit()

   readfile(filename)

------------------------------


输出

$ python cat.py

-----------------------

No action specified.

-----------------------


$ python cat.py --help

-------------------------

This program prints files to the standard output.

Any number of files can be specified.

Options include:

 --version : Prints the version number

 --help    : Display this help

------------------------


$ python cat.py --version

-----------------

Version 1.2

-------------------


$ python cat.py --nonsense

----------------

Unknown option.

---------------


$ python cat.py poem.txt

------------------

Programming is fun

When the work is done

if you wanna make your work also fun:

       use Python!

---------------------


$ python cat.py nothing.txt

---------------------

No such file or directory: nothing.txt

---------------------


它如何工作


这个程序用来模范Linux/Unix用户熟悉的cat命令。你只需要指明某些文本文件的名字,这个程


序会把它们打印输出。


在Python程序运行的时候,即不是在交互模式下,在sys.argv列表中总是至少有一个项目。它就


是当前运行的程序名称,作为sys.argv[0](由于Python从0开始计数)。其他的命令行参数在这


个项目之后。


为了使这个程序对用户更加友好,我们提供了一些用户可以指定的选项来了解更多程序的内容。


我们使用第一个参数来检验我们的程序是否被指定了选项。如果使用了--version选项,程序的


版本号将被打印出来。类似地,如果指定了--help选项,我们提供一些关于程序的解释。我们使


用sys.exit函数退出正在运行的程序。和以往一样,你可以看一下help(sys.exit)来了解更多详


情。


如果没有指定任何选项,而是为程序提供文件名的话,它就简单地打印出每个文件地每一行,按


照命令行中的顺序一个文件接着一个文件地打印。


顺便说一下,名称cat是 concatenate 的缩写,它基本上表明了程序的功能——它可以在输出打


印一个文件或者把两个或两个以上文件连接/级连在一起打印。


更多sys的内容

sys.version字符串给你提供安装的Python的版本信息。sys.version_info元组则提供一个更简


单的方法来使你的程序具备Python版本要求功能。


$ python

------------------

>>> import sys

>>> sys.version

'2.3.4 (#1, Oct 26 2004, 16:42:40) \n[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)]'

>>> sys.version_info

(2, 3, 4, 'final', 0)

---------------------


对于有经验的程序员,sys模块中其他令人感兴趣的项目有sys.stdin、sys.stdout和sys.stderr


它们分别对应你的程序的标准输入、标准输出和标准错误流。


==========================


14.2 os模块


这个模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为


重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和


Windows下运行。一个例子就是使用os.sep可以取代操作系统特定的路径分割符。


下面列出了一些在os模块中比较有用的部分。它们中的大多数都简单明了。


os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,


它是'posix'。


os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。


os.getenv()和os.putenv()函数分别用来读取和设置环境变量。


os.listdir()返回指定目录下的所有文件和目录名。


os.remove()函数用来删除一个文件。


os.system()函数用来运行shell命令。


os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而


Mac使用'\r'。


os.path.split()函数返回一个路径的目录名和文件名。


>>> os.path.split('/home/swaroop/byte/code/poem.txt')

('/home/swaroop/byte/code', 'poem.txt')


os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。类似地,


os.path.existe()函数用来检验给出的路径是否真地存在。


你可以利用Python标准文档去探索更多有关这些函数和变量的详细知识。你也可以使用help


(sys)等等。


====================================


15.更多Python的内容


特殊的方法

在类中有一些特殊的方法具有特殊的意义,比如__init__和__del__方法,它们的重要性我们已


经学习过了。


一般说来,特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用x[key]这样的索


引操作(就像列表和元组一样),那么你只需要实现__getitem__()方法就可以了。想一下,


Python就是对list类这样做的!


下面这个表中列出了一些有用的特殊方法。如果你想要知道所有的特殊方法,你可以在《Python


参考手册》中找到一个庞大的列表。


表15.1 一些特殊的方法


名称 说明

__init__(self,...) 这个方法在新建对象恰好要被返回使用之前被调用。

__del__(self) 恰好在对象要被删除之前调用。

__str__(self) 在我们对对象使用print语句或是使用str()的时候调用。

__lt__(self,other) 当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>


等等)都有特殊的方法。

__getitem__(self,key) 使用x[key]索引操作符的时候调用。

__len__(self) 对序列对象使用内建的len()函数的时候调用。


===================================


15.2 列表综合

通过列表综合,可以从一个已有的列表导出一个新的列表。例如,你有一个数的列表,而你想要


得到一个对应的列表,使其中所有大于2的数都是原来的2倍。对于这种应用,列表综合是最理想


的方法。


使用列表综合

例15.1 使用列表综合

---------------------------------

#!/usr/bin/python

# Filename: list_comprehension.py


listone = [2, 3, 4]

listtwo = [2*i for i in listone if i > 2]

print listtwo

----------------------------


输出

$ python list_comprehension.py

----------------

[6, 8]

----------------


它如何工作


这里我们为满足条件(if i > 2)的数指定了一个操作(2*i),从而导出一个新的列表。注意


原来的列表并没有发生变化。在很多时候,我们都是使用循环来处理列表中的每一个元素,而使


用列表综合可以用一种更加精确、简洁、清楚的方法完成相同的工作。


=========================


在函数中接收元组和列表

当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用*和**前缀。这


种方法在函数需要获取可变数量的参数的时候特别有用。


>>> def powersum(power, *args):

...     '''Return the sum of each argument raised to specified power.'''

...     total = 0

...     for i in args:

...          total += pow(i, power)

...     return total

...

>>> powersum(2, 3, 4)

25


>>> powersum(2, 10)

100


由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的


是**前缀,多余的参数则会被认为是一个字典的键/值对。


===========================


15.2 lambda形式


lambda语句被用来创建新的函数对象,并且在运行时返回它们。


例15.2 使用lambda形式

--------------------------

#!/usr/bin/python

# Filename: lambda.py


def make_repeater(n):

   return lambda s: s*n


twice = make_repeater(2)


print twice('word')

print twice(5)


-----------------------


输出

$ python lambda.py

-------------------

wordword

10

-------------------


它如何工作


这里,我们使用了make_repeater函数在运行时创建新的函数对象,并且返回它。lambda语句用


来创建函数对象。本质上,lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的


值被这个新建的函数返回。注意,即便是print语句也不能用在lambda形式中,只能使用表达式


=============================


exec和eval语句

exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含


Python代码的字符串,然后使用exec语句执行这些语句。下面是一个简单的例子。


>>> exec 'print "Hello World"'

Hello World


eval语句用来计算存储在字符串中的有效Python表达式。下面是一个简单的例子。


>>> eval('2*3')

6


===============================


assert语句

assert语句用来声明某个条件是真的。例如,如果你非常确信某个你使用的列表中至少有一个元


素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情


形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。


>>> mylist = ['item']

>>> assert len(mylist) >= 1

>>> mylist.pop()

'item'

>>> assert len(mylist) >= 1

Traceback (most recent call last):

 File "<stdin>", line 1, in ?

AssertionError


================================


repr函数

repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,


在大多数时候有eval(repr(object)) == object。


>>> i = []

>>> i.append('item')

>>> `i`

"['item']"

>>> repr(i)

"['item']"


基本上,repr函数和反引号用来获取对象的可打印的表示形式。你可以通过定义类的__repr__方


法来控制你的对象在被repr函数调用的时候返回的内容。


===============================





     本文转自 showerlee 51CTO博客,原文链接:http://blog.51cto.com/showerlee/1260500,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python基础笔记1
1 运行 1.1 直接在命令行里面运行python命令 1.2 编写 X.py 文件,然后使用python X.py 运行 2 变量 print后面可以跟多个输出 数据类型不用指定,直接在变量名后面赋值即可 然后用 print type(变量名) 可以打印变量名的数据类型 int float str bool… -------------------
1084 0
Python编程:python-attrs模块的简单使用
Python编程:python-attrs模块的简单使用
58 0
Python编程:使用sqlalchemy对数据库进行增删改查
Python编程:使用sqlalchemy对数据库进行增删改查
53 0
Python编程:列表、集合、字典推导式的示例
Python编程:列表、集合、字典推导式的示例
20 0
Python编程专属技巧2
Python编程专属技巧2
40 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python 脚本速查手册
立即下载
Python系列直播第一讲——Python中的一切皆对象
立即下载
Python 系列直播——深入Python与日志服务,玩转大规模数据分析处理实战第二讲
立即下载