Mặc dù không trực tiếp một câu trả lời cho câu hỏi OP, có một khá ngọt ngào cách tìm ra những biến nào nằm trong phạm vi trong một hàm. hãy xem mã này:
>>> def f(x, y):
z = x**2 + y**2
sqrt_z = z**.5
return sqrt_z
>>> f.func_code.co_varnames
('x', 'y', 'z', 'sqrt_z')
>>>
Thuộc tính func_code có tất cả những thứ thú vị trong đó. Nó cho phép bạn làm một số thứ thú vị.Dưới đây là ví dụ về cách tôi đã sử dụng điều này:
def exec_command(self, cmd, msg, sig):
def message(msg):
a = self.link.process(self.link.recieved_message(msg))
self.exec_command(*a)
def error(msg):
self.printer.printInfo(msg)
def set_usrlist(msg):
self.client.connected_users = msg
def chatmessage(msg):
self.printer.printInfo(msg)
if not locals().has_key(cmd): return
cmd = locals()[cmd]
try:
if 'sig' in cmd.func_code.co_varnames and \
'msg' in cmd.func_code.co_varnames:
cmd(msg, sig)
elif 'msg' in cmd.func_code.co_varnames:
cmd(msg)
else:
cmd()
except Exception, e:
print '\n-----------ERROR-----------'
print 'error: ', e
print 'Error proccessing: ', cmd.__name__
print 'Message: ', msg
print 'Sig: ', sig
print '-----------ERROR-----------\n'
Nguồn
2008-09-21 19:46:01
dụ của bạn cho thấy "biến dụ". Biến lớp là một thứ khác. –