result = 'function (%s)' % ', '.join(map(str,args))
我建议,而不是仅仅ARGS地图(STR,参数),因为你的一些参数可能不是字符串,并会造成一个TypeError,例如,在你列表中的int参数:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
当你进入字典对象,你可能会想用英文逗号分隔的字典(大概是因为值是你想传递给这个函数是什么)的值。如果做的字典对象本身的连接方法,你会拿到钥匙分开,就像这样:
>>> d = {'d':5, 'f':6.0, 'r':"BOB"}
>>> ','.join(d)
'r,d,f'
你想要的是以下几点:
>>> d = {'d':5, 'f':6.0, 'r':"BOB"}
>>> result = 'function (%s)' % ', '.join(map(str, d.values()))
>>> result
'function (BOB, 5, 6.0)'
注意你会遇到新的问题,然而。当你通过join函数传递一个字符串参数时,它会失去引用。因此,如果您计划传递字符串,则在传入函数时(通常用许多通用语言引用字符串),通常会包含字符串的引号丢失。但是,如果你只是传递数字,这对你来说不是问题。
有可能是解决我刚才所描述的问题的更好的方式,但这里有一个方法,可以为你工作。
>>> l = list()
>>> for val in d.values():
... try:
... v = float(val) #half-decent way of checking if something is an int, float, boolean
... l.append(val) #if it was, then append the original type to the list
... except:
... #wasn't a number, assume it's a string and surround with quotes
... l.append("\"" + val + "\"")
...
>>> result = 'function (%s)' % ', '.join(map(str, l))
>>> result
'function ("BOB", 5, 6.0)'
现在字符串已经引用了自身。如果你传递比数字原语和字符串更复杂的类型,那么你可能需要一个新的问题:)
最后一点:我一直在使用d.values()来显示如何从字典中提取值,但实际上它会以几乎任意的顺序返回字典中的值。由于你的函数很可能需要特定顺序的参数,你应该手动构造你的值列表,而不是调用d.values()。
如果我没有弄错,结果为'function(a,bcd)' – hop 2008-12-08 12:09:02