您不能更新Python函数参数所指向的引用,而这正是您的代码试图做的。Python中的所有函数调用参数都是通过值传递的;然而,你
能够
在这种情况下,将项附加到传入列表或字典:
sockets = {}
# Populate them
def save_client(global_client_var):
def decorator(func):
async def inner(client, verbose=False):
sockets[global_client_var] = client
# Receive stuff
with client:
while True:
# Get data. If there is no data, quit
data = await loop.sock_recv(client, 10000)
if not data:
break
# respond to the data
await func(client, data)
return inner
return decorator
@save_client(0)
async def socket0_reply(client, data):
await loop.sock_sendall(client, b'Got:'+data)
@save_client(1)
async def socket1_reply(client, data):
await loop.sock_sendall(client, b'Got:'+data)
@save_client(2)
async def socket2_reply(client, data):
await loop.sock_sendall(client, b'Got:'+data)
@save_client(3)
async def socket3_reply(client, data):
await loop.sock_sendall(client, b'Got:'+data)