zoukankan      html  css  js  c++  java
  • A Byte of Python 笔记(12)python 标准库:sys、os,更多内容

    第14章 python 标准库

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

    sys 模块

    sys 模块包含系统对应的功能。如 sys.argv 列表包含命令行参数。

    # -*- coding: utf-8 -*-
    # Filename: cat.py
    
    import sys
    
    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:]:
            readfile(filename)

    image

    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 使用 ' ',Linux 使用 ' ' 而 Mac 使用 ' '。
    • 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() 函数用来检验给出的路径是否真地存在。

     

    第15章 更多python内容

    特殊方法

    在类中有一些特殊的方法具有特殊的意义,比如 __init__ 和 __del__ 方法。特殊的方法都被用来模仿某个行为。例如,如果你想要为你的类使用 x[key] 这样的索引操作(就像列表和元组一样),那么你只需要实现 __getitem__() 方法就可以了。

    名称

    说明

    __init__(self,...)

    这个方法在新建对象要被返回使用之前被调用。

    __del__(self)

    在对象要被删除之前调用。

    __str__(self)

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

    __lt__(self,other)

    当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。

    __getitem__(self,key)

    使用 x[key]索引操作符的时候调用。

    __len__(self)

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

    单语句块

    每一个语句块是通过缩进层次与其它块区分开来。但如果语句块只包含一个语句,可以在条件语句或循环与语句的同一行指明它。

    >>> flag = True
    >>> if flag: print 'Yes'
    ...
    Yes

    单个语句被直接使用而不是作为一个独立的块使用。虽然这样做可以使你的程序变得 小一些 ,但是除了检验错误之外不建议使用这种缩略方法。

    列表综合

    通过列表综合,可以从一个已有的列表导出一个新的列表。

    # -*- coding: utf-8 -*-
    # Filename: list_comprehension.py
    
    listone = [2,3,4]
    listtwo = [2*i for i in listone if i>2]
    print listtwo

    image

    我们为满足条件(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) # pow(i,power)=i**power
    ...     return total
    ...
    >>> powersum(2,3,4) # power=2,args=(3,4)
    25 # 3**2 + 4**2
    >>> powersum(2,10) # power=2,args=(10,)
    100 # 10**2

    由于在 args 变量前有*前缀,所有多余的函数参数都会作为一个元组存储在 args 中。如果使用的是 ** 前缀,多余的参数则会被认为是一个字典的键/值对。

    lambda形式

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

    # -*- coding: utf-8 -*-
    # Filename: lambda.py
    
    def make_repeater(n):
        return lambda s: s*n
    
    twice = make_repeater(2)
    
    print twice('word')
    print twice(5)

    image

    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 <module>
    AssertionError

    repr 函数

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

    注意,大多数时候 eval(repr(object)) == object

    >>> i = []
    >>> i.append('item')
    >>> `i`
    "['item']"
    >>> repr(i)
    "['item']"

    基本上,repr 函数和反引号用来获取对象的可打印的表示形式。可以通过定义的 __repr__ 方法来控制你的对象在被 repr 函数调用的时候返回的内容。

  • 相关阅读:
    [原]POJ1141 Brackets Sequence (dp动态规划,递归)
    [转]10分钟入门python
    [原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)
    [原]SQL_实验2.1.3 清华大学出版社
    [原]sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛
    [原]hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (这个只是题目名字) (多重背包)
    快速幂运算
    山东省acm省赛 I Sequence(动态规划)
    [ACM] 携程预赛第一场 括号匹配 (动态规划)
    [ACM] poj 1141 Brackets Sequence (动态规划)
  • 原文地址:https://www.cnblogs.com/blueskylcc/p/5364605.html
Copyright © 2011-2022 走看看