沈洁元 译
在函数中接收元组和列表
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> def powersum(power,*args): total = 0 for i in args: total+=pow(i,power) return total >>> powersum(2,3,4) 25 >>> powersum(2,10) 100 >>>
args
变量前有
*
前缀,所有多余的函数参数都会作为一个元组存储在
args
中。如果使用的是
**
前缀,多余的参数则会被认为是一个字典的键/值对。
列表综合:
通过列表综合,可以从一个已有的列表导出一个新的列表。例如,你有一个数的列表,而你想要得到一个对应的列表,使其中所有大于2的数都是原来的2倍。对于这种应用,列表综合是最理想的方法。
#!/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
),从而导出一个新的列表。注意原来的列表并没有发生变化。在很多时候,我们都是使用循环来处理列表中的每一个元素,而使用列表综合可以用一种更加精确、简洁、清楚的方法完成相同的工作。
lambda形式:
lambda
语句被用来创建新的函数对象,并且在运行时返回它们。
使用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
函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有
eval(repr(object)) == object
。
>>> i = [] >>> i.append('item') >>> `i` "['item']" >>> repr(i) "['item']"
repr
函数和反引号用来获取对象的可打印的表示形式。你可以通过定义类的
__repr__
方法来控制你的对象在被
repr
函数调用的时候返回的内容