A tool that tries to convert Python 2.x code to Python 3.x code by handling most of the incompatibilities which can be detected by parsing the source and traversing the parse tree.
2to3 可用于标准库作为 lib2to3 ;独立入口点的提供作为 Tools/scripts/2to3 。见 2to3 - 自动 Python 2 到 3 代码翻译 .
值被传递给 function (或 方法 ) when calling the function. There are two types of arguments:
关键词自变量 : an argument preceded by an identifier (e.g. name= ) in a function call or passed as a value in a dictionary preceded by ** 。例如, 3 and 5 are both keyword arguments in the following calls to complex() :
complex(real=3, imag=5) complex(**{'real': 3, 'imag': 5})
位置自变量 : an argument that is not a keyword argument. Positional arguments can appear at the beginning of an argument list and/or be passed as elements of an iterable preceded by * 。例如, 3 and 5 are both positional arguments in the following calls:
complex(3, 5) complex(*(3, 5))
Arguments are assigned to the named local variables in a function body. See the 调用 section for the rules governing this assignment. Syntactically, any expression can be used to represent an argument; the evaluated value is assigned to the local variable.
另请参阅 参数 glossary entry and the FAQ question on 自变量和参数之间的差异 .
Python source code is compiled into bytecode, the internal representation of a Python program in the CPython interpreter. The bytecode is also cached in .pyc and .pyo files so that executing the same file is faster the second time (recompilation from source to bytecode can be avoided). This “intermediate language” is said to run on a 虚拟机 that executes the machine code corresponding to each bytecode. Do note that bytecodes are not expected to work between different Python virtual machines, nor to be stable between Python releases.
A list of bytecode instructions can be found in the documentation for dis 模块 .
返回另一函数的函数,通常作为函数变换运用,使用 @wrapper 句法。装饰器的常见范例是 classmethod() and staticmethod() .
装饰器句法仅仅是句法糖,以下 2 函数定义在语义上是等效的:
def f(...): ... f = staticmethod(f) @staticmethod def f(...): ...
任何 new-style object which defines the methods __get__() , __set__() ,或 __delete__() . When a class attribute is a descriptor, its special binding behavior is triggered upon attribute lookup. Normally, using a.b to get, set or delete an attribute looks up the object named b in the class dictionary for a , but if b is a descriptor, the respective descriptor method gets called. Understanding descriptors is a key to a deep understanding of Python because they are the basis for many features including functions, methods, properties, class methods, static methods, and reference to super classes.
有关描述符方法的更多信息,见 实现描述符 .
对象暴露面向文件 API (采用方法,譬如 read() or write() ) 到底层资源。根据创建方式,文件对象可以中介访问真实磁盘文件、其它类型存储或通信设备 (例如:标准输入/输出、内存缓冲、套接字、管道、等)。文件对象也称 像文件对象 or 流 .
There are actually three categories of file objects: raw binary files, buffered binary files and text files. Their interfaces are defined in the io 模块。创建文件对象的典型方式是使用 open() 函数。
A pseudo-module which programmers can use to enable new language features which are not compatible with the current interpreter. For example, the expression 11/4 currently evaluates to 2 . If the module in which it is executed had enabled true division by executing:
from __future__ import division
the expression 11/4 would evaluate to 2.75 . By importing the __future__ module and evaluating its variables, you can see when a new feature was first added to the language and when it will become the default:
>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)
An expression that returns an iterator. It looks like a normal expression followed by a for expression defining a loop variable, range, and an optional if expression. The combined expression generates values for an enclosing function:
>>> sum(i*i for i in range(10)) # sum of squares 0, 1, 4, ... 81
285
机制用于 CPython 解释器担保只有一个线程执行 Python bytecode 每次。这简化 CPython 实现通过使对象模型 (包括关键内置类型,譬如 dict ) 隐含安全阻止并发访问。锁定整个解释器使解释器更易于多线程,以付出由多处理器机器提供的许多并行性为代价。
不管怎样,一些扩展模块 (标准或第 3 方) 被设计为在履行计算密集任务 (譬如:压缩或散列) 时释放 GIL。此外,当履行 I/O 时始终释放 GIL。
过去创建 "自由线程" 解释器 (以更细粒度锁定共享数据) 的努力并不成功,因为在常见单处理器情况下会损失性能。据信,克服此性能问题将使得实现更加复杂,因此维护更昂贵。
对象 hashable 若它拥有的哈希值在其寿命内从不改变 (它需要 __hash__() 方法),且可以比较其它对象 (它需要 __eq__() or __cmp__() 方法)。比较相等的可哈希对象必须拥有相同的哈希值。
可哈希性使对象可用作字典键和 set 成员,因为这些数据结构内部使用哈希值。
All of Python’s immutable built-in objects are hashable, while no mutable containers (such as lists or dictionaries) are. Objects which are instances of user-defined classes are hashable by default; they all compare unequal (except with themselves), and their hash value is their id() .
表示数据流的对象。重复调用迭代器的 next() method return successive items in the stream. When no more data are available a StopIteration 异常被引发取而代之。此时,迭代器对象耗尽,且任何进一步调用其 next() 方法仅仅引发 StopIteration 再次。要求迭代器有 __iter__() 方法返回迭代器对象本身,所以,每个迭代器也可迭代,且可以用于接受其它可迭代的大多数地方。试图多次迭代遍历的代码是一个值得注意的例外。容器对象 (譬如 list ) 将产生刷新的新迭代器,每次把它传递给 iter() 函数或把它用于 for 循环。采用迭代器尝试这将仅仅返回用于先前迭代遍历的同一耗尽迭代器对象,使它看起来像空容器。
可以找到更多信息在 迭代器类型 .
关键函数 (或整理函数) 是返回用于排序 (或次序) 值的可调用。例如, locale.strxfrm() 是用于产生特定区域设置排序约定意识的排序键。
A number of tools in Python accept key functions to control how elements are ordered or grouped. They include min() , max() , sorted() , list.sort() , heapq.nsmallest() , heapq.nlargest() ,和 itertools.groupby() .
There are several ways to create a key function. For example. the str.lower() method can serve as a key function for case insensitive sorts. Alternatively, an ad-hoc key function can be built from a lambda expression such as lambda r: (r[0], r[2]) 。另外, operator module provides three key function constructors: attrgetter() , itemgetter() ,和 methodcaller() 。见 排序怎么样 for examples of how to create and use key functions.
Look before you leap. This coding style explicitly tests for pre-conditions before making calls or lookups. This style contrasts with the EAFP approach and is characterized by the presence of many if 语句。
In a multi-threaded environment, the LBYL approach can risk introducing a race condition between “the looking” and “the leaping”. For example, the code, if key in mapping: return mapping[key] can fail if another thread removes key from 映射 after the test, but before the lookup. This issue can be solved with locks or by using the EAFP approach.
The class of a class. Class definitions create a class name, a class dictionary, and a list of base classes. The metaclass is responsible for taking those three arguments and creating the class. Most object oriented programming languages provide a default implementation. What makes Python special is that it is possible to create custom metaclasses. Most users never need this tool, but when the need arises, metaclasses can provide powerful, elegant solutions. They have been used for logging attribute access, adding thread-safety, tracking object creation, implementing singletons, and many other tasks.
可以找到更多信息在 定制类创建 .
An object that serves as an organizational unit of Python code. Modules have a namespace containing arbitrary Python objects. Modules are loaded into Python by the process of importing .
另请参阅 包 .
Any tuple-like class whose indexable elements are also accessible using named attributes (for example, time.localtime() returns a tuple-like object where the year is accessible either with an index such as t[0] or with a named attribute like t.tm_year ).
A named tuple can be a built-in type such as time.struct_time , or it can be created with a regular class definition. A full featured named tuple can also be created with the factory function collections.namedtuple() . The latter approach automatically provides extra features such as a self-documenting representation like Employee(name='jones', title='programmer') .
Any class which inherits from object . This includes all built-in types like list and dict . Only new-style classes can use Python’s newer, versatile features like __slots__ , descriptors, properties, and __getattribute__() .
可以找到更多信息在 New-style and classic classes .
A named entity in a function (or method) definition that specifies an argument (or in some cases, arguments) that the function can accept. There are four types of parameters:
位置或关键词 : specifies an argument that can be passed either positionally 或作为 关键词自变量 . This is the default kind of parameter, for example foo and bar in the following:
def func(foo, bar=None): ...
仅位置 : specifies an argument that can be supplied only by position. Python has no syntax for defining positional-only parameters. However, some built-in functions have positional-only parameters (e.g. abs() ).
var-positional : specifies that an arbitrary sequence of positional arguments can be provided (in addition to any positional arguments already accepted by other parameters). Such a parameter can be defined by prepending the parameter name with * ,例如 args in the following:
def func(*args, **kwargs): ...
var-keyword : specifies that arbitrarily many keyword arguments can be provided (in addition to any keyword arguments already accepted by other parameters). Such a parameter can be defined by prepending the parameter name with ** ,例如 kwargs in the example above.
Parameters can specify both optional and required arguments, as well as default values for some optional arguments.
另请参阅 argument 词汇表条目,FAQ 问题有关 自变量和参数之间的差异 ,和 函数定义 章节。
An idea or piece of code which closely follows the most common idioms of the Python language, rather than implementing code using concepts common to other languages. For example, a common idiom in Python is to loop over all elements of an iterable using a for statement. Many other languages don’t have this type of construct, so people unfamiliar with Python sometimes use a numerical counter instead:
for i in range(len(food)): print food[i]
As opposed to the cleaner, Pythonic method:
for piece in food:
print piece