def wrapper(*extra_args): args = list(part_args) args.extend(extra_args) return func(*args) return wrapper
利用用闭包的特性绑定预先绑定一些函数参数,返回一个可调用的变量, 直到真正的调用执行:
#!/usr/bin/env python # -*- coding: utf-8 -*- from functools import partial def sum(a, b): return a + b def test_partial():
fun = partial(sum, 2) # 事先绑定一个参数, fun成为一个只需要一个参数的可调用变量
print fun(3) # 实现执行的即是sum(2, 3) if __name__ == '__main__': test_partial()
# 执行结果 5
神秘eval
eval我理解为一种内嵌的python解释器(这种解释可能会有偏差), 会解释字符串为对应的代码并执行, 并且将执行结果返回。
看一下下面这个例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- def test_first(): return 3
def test_second(num): return num
action = { # 可以看做是一个sandbox \
\ \ }
def test_eavl():
condition = \
res = eval(condition, action) # 解释condition并根据action对应的动作执行 print res
if __name__ == '_ exec
exec在Python中会忽略返回值, 总是返回None, eval会返回执行代码或语句的返回值
exec和eval在执行代码时, 除了返回值其他行为都相同
在传入字符串时, 会使用compile(source, '
\ \ }
def test_exec():
exec \
if __name__ == '__main__': test_exec() # 无法看到执行结果 getattr
getattr(object, name[, default])返回对象的命名属性,属性名必须是字符串。如果字符串是对象的属性名之一,结果就是该属性的值。例如, getattr(x, ‘foobar') 等价于 x.foobar。 如果属性名不存在,如果有默认值则返回默认值,否则触发 AttributeError 。
# 使用范例
class TestGetAttr(object): test = \ def say(self):
print \def test_getattr(): my_test = TestGetAttr() try:
print getattr(my_test, \ except AttributeError: print \ try:
getattr(my_test, \
except AttributeError: # 没有该属性, 且没有指定返回值的情况下
print \if __name__ == '__main__': test_getattr()
# 输出结果 test attribute test method 命令行处理
def process_command_line(argv): \
Return a 2-tuple: (settings object, args list).
`argv` is a list of arguments, or `None` for ``sys.argv[1:]``. \
if argv is None: argv = sys.argv[1:] # initialize the parser object: parser = optparse.OptionParser(
formatter=optparse.TitledHelpFormatter(width=78), add_help_option=None) # define options here:
parser.add_option( # customized description; put --help last