我应该在函数内部还是全局声明元组?如果在里面,是否会在每次函数调用时重新创建?
def isBracket(s):
t = ('a','b','c','d')
return s in t
答案 0 :(得分:4)
您可以使用dis
模块来反汇编函数字节码。你会看到差异:
>>> import dis
>>> def isBracket(s):
... t = ('a','b','c','d')
... return s in t
...
>>> dis.dis(isBracket)
2 0 LOAD_CONST 5 (('a', 'b', 'c', 'd'))
3 STORE_FAST 1 (t)
3 6 LOAD_FAST 0 (s)
9 LOAD_FAST 1 (t)
12 COMPARE_OP 6 (in)
15 RETURN_VALUE
>>> t = ('a','b','c','d')
>>> def isBracket(s):
... return s in t
...
>>> dis.dis(isBracket)
2 0 LOAD_FAST 0 (s)
3 LOAD_GLOBAL 0 (t)
6 COMPARE_OP 6 (in)
9 RETURN_VALUE
您可以看到第二个版本的改进:每次调用都不需要加载和存储tuple
。
答案 1 :(得分:1)
如果它是常量值的元组,则放在函数外部没有任何问题,因为否则每次调用函数时都会创建它。
为了使这个常量的心理范围接近于它所使用的代码,将它放在函数定义的正上方。
t = ('a','b','c','d')
def isBracket(s):
return s in t