a.py
#!c:/Python27/python.exe -u
from connection import Connection
import globals
globals.server_ip = '192.168.0.1'
connection = Connection()
globals.py
#!c:/Python27/python.exe -u
server_ip = '127.0.0.1'
connection.py
import globals
class Connection:
def __init__(self, server_ip = globals.server_ip):
print 'Connection is ' + server_ip + '\n'
我原以为我会被Connection is 192.168.0.1
打印出来。但是,相反,正在打印Connection is 127.0.0.1
。
除非我尝试通过显式传递参数来构建连接(这不是我想要的,因为我不愿意在连接0参数上进行更改)
connection = Connection(globals.server_ip)
为什么会这样?我还能申请其他技术吗?
答案 0 :(得分:11)
def __init__(self, server_ip=globals.server_ip):
创建方法时绑定参数,以后不再重新计算。 要使用当前值,请使用以下内容:
def __init__(self, server_ip=None):
if server_ip is None:
server_ip = globals.server_ip
顺便说一下,出于完全相同的原因,这样的功能很可能无法正常工作:
def foobar(foo=[]):
foo.append('bar')
return foo
在性能关键代码中,此行为也可用于避免对内置函数进行全局查找:
def highspeed(some_builtin=some_builtin):
# in here the lookup of some_builtin will be faster as it's in the locals