7 Dec 2009

Python标准库手册 - 2. 内置函数 - 2

2. 内置函数 - 2: I-R



id(object)
    返回object的标识符.结果是整型(或者长整型),在其生命周期内保证唯一且不变.2个生命周期不重叠的对象可能含有相同的id()值.

    CPython实现细节:这是object的地址.

input([prompt])
    等价于eval(raw_input(prompt))
    
    警告:
    如果用户输入错误,此函数并不安全!它要求一个合法的Python表达式作为输入;如果输入有语法错误,会抛出SyntaxError异常.当执行时,其他异常也可能被抛出.(另一方面,高级用户写快速脚本是正想得到如此的结果?)
    
    如果导入了readline模块,input()会使用它来提供详尽的行编辑和历史功能.
    通常情况下应考虑使用raw_input()函数.
    
int([x[, base]])
    将一个字符串或者数字转换为整型.如果参数是字符串,必须包含能被表示为Python整型的十进制符号数,该字符串可被嵌入白空格.base参数为转换提供了基(默认是10),它可能是属于[2,36]的任意整数或者0.如果base是0,取决于字符串的内容,会检测一个合适的基;表现形式与整型相同.(参考数值)如果base存在且x不是字符串,会抛出TypeError异常.否则参数可能是整型或者长整型或者浮点数.浮点数转换成整型会被截尾(向0).如果参数超出整型范围会返回一个长整型对象.如果不指定参数,返回0.
    
    整数类型在数值类型一节有描述 - int, float, long, complex.



isinstance(object, classinfo)
    如果object参数是classinfo参数的实例,或者是它的(直接或者间接)子类返回true.如果classinfo是一个类型对象(新型类)且object是该类型的对象或者(直接或间接)子类,也会返回true.如果object不是类实例或者给定类型的对象,返回false.如果classinfo既非类对象也非类型对象,它可能是类对象或者类型对象的元组,或者递归包含其他类似元组(其他序列类型不可被接受).如果classinfo不是类,类型,也不是类或类型等这些元组,会抛出TypeError异常.
    
    2.2版本改动:支持类型信息元组.
    
issubclass(class, classinfo)
    如果class是classinfo的(直接或间接)子类返回true.任何类都是自身的子类.classinfo可以使类对象的元组,此时classinfo的每个元素都会执行检测.其他情况下,会抛出TypeError异常.
    
    2.3版本改动:支持类型信息元组.
    
iter(o[, sentinel])
    返回一个迭代对象.根据第二个参数的不同,第一个参数会有不同的解释.如果没有第二个参数,o必需是一个支持迭代协议(__iter__()方法)的对象集合,或者必需支持序列协议(从0开始的整型参数的__getitem()方法).如果它不支持这两种协议,会抛出TypeError异常.如果第二个参数sentinel给出,那么o必须是一个可调用的对象.此时迭代器创建时会无参数调用它的next()方法;如果返回结果等于sentinel,会抛出StopIteration异常,否则返回该结果.
    
    非常有用的iter()第二种形式应用是按行读取一个文件,直至某一特定行.下面的例子按行读取一个文件,直到读到'STOP':
    
    with open("mydata.txt") as fp:
        for line in iter(fp.readline, "STOP"):
            process_line(line)
    

    2.2版本新增

len(s)
    返回一个对象的长度(元素的数目).参数必须是一个序列(字符串,元组或者列表)或者映射(字典).
    
list([iterable])
    返回一个列表,其元素与iterable相同且元素顺序相同.iterable可能是一个序列,支持迭代的容器或者一个迭代对象.如果iterable是一个列表,会拷贝一份返回,类似于iterable[:].例如list('abc')返回['a','b','c'],list((1,2,3))返回[1,2,3].如果未指定参数,返回一个空列表[].
    
    列表是一个可变序列类型,归档于序列类型 - str, unicode, list, tuple, buffer, xrange.其他容器请参考内置类dict, set和tuple, 和collections模块.
    
locals()
    更新并返回表示当前局部符号表的一个字典.在函数代码块内调用locals()会返回自由变量,但是类代码块内则不会.
    
    注意:
    该字典的内容不应被修改;改变可能不会影响local的值和解释器使用的自由变量.
    
long([x[, base]])
    将字符串或者数字转换为长整型.如果参数是字符串,必须包含任意大小的符号数,可能嵌入白空格.base参数的解释方式与int()相同,只有在x是字符串是才需要给出.否则,参数可以是整型,长整型或者浮点数,会返回相同值的长整型.浮点数转换为整型会向0截尾.如果没有参数,返回0L.
    
    长整型请参考数值类型 - int, float, long, complex.
    
map(function, iterable, ...)
    对iterable的每个元素应用function,并返回结果列表.如果有额外的iterable参数,function会同时取这些iterables的元素为参数执行.如果一个iterable长度小于另一个,默认会用None扩展为相同长度.如果function是None,默认使用恒等函数;如果有多个参数,map()返回一个有元组组成的列表,其中元组包含所有iterables的对应元素(类似于对应操作).iterable参数可以使序列或者其他迭代对象.结果永远是列表.(例子翻译时加的)例如:
    
    >>> a = [1,2,3]<br />    >>> b = ['a','b','c']<br />    >>> map(None,a,b)<br />    [(1, 'a'), (2, 'b'), (3, 'c')]<br />    


max(iterable[, args...][, key])
    如果仅有iterable参数,返回非空iterable的最大元素(例如字符串,元组和列表).多于一个参数时,返回其中最大的.
    
    可选参数key指定了一个形如list.sort()的单参数排序函数.如果给定key参数,必须用关键字形式(例如: max(a,b,c,key=func)).
    
    2.5版本改动:支持可选参数key.
    
min(iterable[, args...][, key])
    如果仅有iterable参数,返回非空iterable的最小元素(例如字符串,元组和列表).多于一个参数时,返回其中最小的.

    可选参数key指定了一个形如list.sort()的单参数排序函数.如果给定key参数,必须用关键字形式(例如: max(a,b,c,key=func)).

    2.5版本改动:支持可选参数key.
    
next(iterator[, default])
    调用iterator的next方法取得其下一个元素.如果default参数给定,如果iterator结束返回default,否则抛出StopIteration异常.
    
    2.6版本新增

object()
    返回一个新的对象.object是所有新型类的基础.它有所有新型类实例共有的方法.
    
    2.2版本新增.
    2.3版本改动:该函数不接受任何参数.以前版本可以传入参数,但是会被忽略.


oct(x)
    将整型数字(任意大小)转换为八进制字符串.结果是有效的Python表达式.
    
    2.4版本改动:以前只返回无符号数

open(filename[, mode[, bufsize]])
    打开一个文件,返回一个文件对象(文件对象一节有描述).如果文件不能打开,抛出IOError异常.当需要打开文件时,最好采用open()而非直接调用文件构建器.
    
    前2个参数与stdio的fopen()参数相同:filename是要打开文件名,mode是文件读写类型字符串.
    
    最常用的mode值是'r'-读和'w'-写(会覆盖已存在文件)和'a'-追加(在某些Unix系统上会无视当前位置直接追加到文件末尾).如果省略mode,默认是'r'.默认使用文本类型,当写回文件再读取时会将'\n'转换为平台相关的表示方法.因此,当打开二进制文件时,应该给mode添加'b'以使用二进制读写,这会增加可移植性.(即使在不区分二进制与文本文件而一概视为文档的系统上,添加'b'也是非常有用的)下面列出了mode参数的其他可取值.
    
    可选参数bufsize指定了缓冲区大小:0是无缓冲,1是行缓冲,其他整数则使用(近似)该数大小的缓冲区,负值bufsize则使用系统默认(tty设备是行缓冲,其他文件是全缓冲).如果省略,使用系统默认缓冲区大小.-脚注[2]

    模式'r+','w+'和'a+'可以更新文件(注意'w+'会覆盖文件).添加'b'模式可以在区别对待文本文件和二进制文件的系统上,以二进制方式打开文件;在无区别系统上,'b'不起作用.

    除标准fopen()的模式外,还有'U'或者'rU'.编译Python时通常有通用新行支持;'U'会以文本方式打开文件,但是行会以下列方式之一终止:Unix行结束标志'\n';Mac行结束标志'\r'或者Windows行结束标志'\r\n'.Python一律按照'\n'对待所有这些表示.如果Python编译时没有通用新行支持,'U'与普通文本模式相同.注意:以这种方式打开的文件对象也有一个叫新行的属性,其值为None(如果没有新行被读取),'\n','\r','\r\n'或者包含所有以读取的新行类型的元组.
    
    Python强制模式添加'U'后,以'r','w','a'开始.Python提供了许多文件处理模块,包含fileinput, os, os.path, tempfile和shutil.
    
    2.5版本改动:限定mode字符串的第一个字母.
    
ord(c)
    给定长度为1的字符串c,当是一个unicode对象或者当参数是一个8位字符串时是其字节值,返回表示其Unicode码的整数.例如,ord('a')返回整数97,ord(u'\u2020')返回8224.对于8位字符串,这是chr()的逆函数;对于unicode对象,则是unichr()的逆函数.如果python基于unicode UCS2编译且给定unicode参数,则该字符的码点必须在范围[0...65535],否则字符串长度是2,抛出TypeError异常.

pow(x, y[, z])
    返回x的y次幂,如果有z,则返回x的y次幂对z取模(比pow(x,y) % z效率高).两个参数形式的pow(x, y)等价于幂运算符: x**y.
    
    参数必须是数值类型.对于混合操作数类型,会使用二元运算符强制转换规则.对于整型和长整型操作数,结果与操作数类型相同(强制转换后),除非第二个参数是负数,此时所有的参数被转换为浮点数,结果也是浮点数.例如,10**2返回100,但是10**-2返回0.01.(2.2版本新增负指数.2.1版本以前,如果2个参数均为整型且第二个参数为负,会抛出异常.)如果第二个参数是负数,第三个参数必须被省略.如果有参数z,x和y必须是整型且y非负.(2.2版本新增的限定.2.1版本之前,浮点3参数pow()函数会根据平台浮点数舍入规则,返回平台相关的结果.)
    
print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout])
    打印object(s)到文件流,以sep分隔以end结束.sep,end,file参数如果有,必须以关键字形式给出.
    
    所有非关键字形式参数会被转换成字符串(如函数str()),以sep分隔end结束写入流.sep和end都必须是字符串,但也可以是None,这是使用默认值.如果object没有给出,print()写入end.
    
    file参数必须是一个有write(string)方法的对象;如果没有给出或者是None,使用sys.stdout.
    
    注意:
    一般情况下,由于print被认为是print语句,此函数不会被看做内置函数.为了禁用这个功能以使用print()功能,可以在模块顶部使用future语句:
    
    from __future__ import print_function


    2.6版本新增

property([fget[, fset[, fdel[, doc]]]])
    返回新类(从对象衍生出来的类)property属性.
    
    fget是获得属性值的函数,正如fset是设置属性值的函数,fdel是删除属性值的函数.典型用法是定义托管属性x:
    
    class C(object):<br />        def __init__(self):<br />            self._x = None<br /><br />        def getx(self):<br />            return self._x<br />        def setx(self, value):<br />            self._x = value<br />        def delx(self):<br />            del self._x<br />        x = property(getx, setx, delx, "I'm the 'x' property.")<br />    


    如果给出doc参数,必须是property属性的文档字符串.否则,property会拷贝fget的文档字符串(如果存在).这样可以用property()作为修饰符来创建只读属性:
    
    class Parrot(object):<br />        def __init__(self):<br />            self._voltage = 100000<br /><br />        @property<br />        def voltage(self):<br />            """Get the current voltage."""<br />            return self._voltage<br />    

    
    上述代码将voltage()方法转换为有相同名称的"getter"来获得只读属性.

    property对象含有getter, setter和deleter方法,可以用作修饰函数使用对应的存取函数创建property的拷贝.下面的例子是个极好的解释:
    
    class C(object):<br />        def __init__(self):<br />            self._x = None<br /><br />        @property<br />        def x(self):<br />            """I'm the 'x' property."""<br />            return self._x<br /><br />        @x.setter<br />        def x(self, value):<br />            self._x = value<br /><br />        @x.deleter<br />        def x(self):<br />            del self._x<br />    

    
    上面的代码与第一个例子完全相同,可以提供附加函数与原property函数相同的名称(上面例子中的x).
    
    返回的属性也包含fget, fset和fdel属性,这些属性与构建其参数相关.
    2.2版本新增.
    2.5版本改动: 如果没有文档字符串,则使用fget的文档字符串.
    2.6版本改动: 新增getter, setter和deleter属性.


range([start], stop[, step])
    这是一个通用函数,可以用以创建包含算数序列的列表.通常被用于for循环.参数必须是整型.如果step参数省略,默认是1;如果start参数省略,默认是0.所有参数齐全时返回一个整型列表[start, start + step, start + 2 * step, ...].如果step为正值,最后一个元素是最大值start + i * step(小于stop);如果step为负值,最后一个元素是最小值start + i * step(大于stop).step必需非零,否则抛出ValueError异常.例如:
    
    >>> range(10)<br />    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<br />    >>> range(1, 11)<br />    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]<br />    >>> range(0, 30, 5)<br />    [0, 5, 10, 15, 20, 25]<br />    >>> range(0, 10, 3)<br />    [0, 3, 6, 9]<br />    >>> range(0, -10, -1)<br />    [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]<br />    >>> range(0)<br />    []<br />    >>> range(1, 0)<br />    []


raw_input([prompt])
    如果prompt参数给出,它会被写到标准输出(末尾无新行),然后该函数会读取一行并转换为字符串作为输入(扔掉结尾的新行符)并返回该字符串.如果输入为EOF,抛出EOPError异常.例如:
    
    >>> s = raw_input('--> ')<br />    --> Monty Python's Flying Circus<br />    >>> s<br />    "Monty Python's Flying Circus"<br />    


    如果readline模块被加载,raw_input()会使用它来提供复杂的行编辑和历史功能.

reduce(function, iterable[, initializer])
    对iterable的元素,从左至右循环应用2个参数的function,最后得到一个值.例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])计算((((1+2)+3)+4)+5).左参数x是累加值,右参数y是迭代的更新值.如果可选参数initializer给出,它会被作为迭代运算的初始值;如果iterable为空则作为默认值返回.如果initializer未给出且iterable仅包含一个元素,则返回该元素.
    
reload(module)
    重新加载一个已被导入的模块.参数必须是一个模块对象,它之前必须被成功导入过.当使用外部编辑器编辑过某个模块的源码,并且想在不离开python解释器的情况下试用新版本时,这个函数很有用.返回值是模块对象(与module参数相同)
    
    当reload(module)被执行时:
        * python模块代码被重新编译,模块级代码被重新执行,定义一个新的绑定到模块字典中名称的对象集合.扩展模块init函数不会被再次执行.
        * 如python中的所有其他对象,原有的对象仅在它们的为0计数时才会被回收.
        * 模块命名空间的名称会被更新以指向新增或改动的对象.
        * 其他旧对象的引用(例如模块之外的名称)不会重新绑定到新的对象,如有必要,它们必须在各自的命名空间被更新.

    其他警告:
    如果一个模块语法正确却初始化出错,第一次导入时会无法局部绑定名称,却会在sys.modules中产生一个(部分初始化的)模块对象.要重新载入该模块,必须再reload()之前先再次导入(会绑定名称到部分初始化的模块对象).

    当一个模块被重新载入,它的字典(包含模块的全局变量)会保留.新的名称定义会覆盖旧的定义,因此一般情况下不会造成问题.如果新版本的模块没有定义在旧模块中已有定义的名称,旧的定义会保留.这个特性可以看作是模块的优点因为它维护了一份全局对象的表或者缓存 - 如有需要,可在try语句中测试表或者跳过初始情况:
    
    try:<br />        cache<br />    except NameError:<br />        cache = {}<br />    

    
    一般情况下,除了sys, __main__和__builtin__,重新载入内置或者动态装载模块不是很有用.然而很多情况下,扩展模块被设计为不会初始化多次,在重新装载时某些情况下可能出错.

    当一个模块使用from ... import ...从另一个模块中导入对象,被导入模块调用reload()并不会重新定义从它中导入的对象 - 一个办法是重新执行from语句,另一种办法是使用import和限定名称(module.*name*).
    
    如果一个模块实例化了一个类实例,重新载入定义该类的模块并不会影响实例定义的方法 - 它们会按照原有类定义的方式使用.这条规则同样适用于衍生类.

repr(object)
    返回一个对象的描述字符串,与转换函数生成的值相同(反向引用).此函数可以作为普通函数使用.对于许多类型,此函数尝试返回一个字符串,是把该类型传递给eval()时产生的同名对象;否则描述是尖括号中的一个字符串,该字符串包含了对象和附加信息(通常包含对象的名称和地址)的类型的名称.类可以通过定义__repr__()方法来控制其实例的repr函数返回值.
    
reversed(seq)
    返回一个逆序迭代器.seq必须是一个有__reversed__()方法的对象,或者支持序列协议(__len__()方法和从0开始整数参数的__getitem__()方法).
    
    2.4版本新增.
    2.6版本改动:增加个性化__reversed__()方法的可能.


round(x[, n])
    返回浮点数x四舍五入到小数点后n位的结果.如果n省略,默认为0.结果是浮点数,会向最近的10**(-n)的倍数四舍五入;如果2个倍数同等接近,四舍五入向离开0的方向(例如,round(0.5)结果为1.0,round(-0.5)结果为-1.0).



<<2. 内置函数 - 1:A-H     >>目录     >>2. 内置函数 - 3:S-Z




No comments :

Post a Comment