12.11.4 任意API名
还有一个有趣的特性,可以用一些非法的Python对象属性名来注册函数。下面的示例服务器用名字multiply args 注册了一个函数。
from xmlrpc.server import SimpleXMLRPCServer
server = SimpleXMLRPCServer(('localhost',9000))
def my_function(a,b):
return a * b
server.register_function(my_function,'multiply args')
try:
print('Use Control-C to exit')
server.serve_forever()
except KeyboardInterrupt:
print('Exiting')
由于所注册的名字包含一个空格,因此不能使用点记法直接从代理访问。不过,使用getattr()是可以的。
import xmlrpc.client
proxy = xmlrpc.client.ServerProxy('http://localhost:9000')
print(getattr(proxy,'multiply args')(5,5))
但是并不建议使用类似这样的名字创建服务。给出这个例子并不是因为这是一个好的想法,而是因为确实存在这种有任意名字的服务,新程序可能需要调用这些服务。
运行结果: