result = 'function (%s)' % ', '.join(map(str,args))
Я рекомендую карту (str, args) вместо просто args, потому что некоторые из ваших аргументов могут не быть строками и вызвать TypeError, например, с аргументом int в вашем списке:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
Когда вы попадаете в объекты dict, вы, вероятно, захотите разделить значения dict запятыми (предположительно потому, что значения - это то, что вы хотите передать в эту функцию). Если вы примените метод join к самому объекту dict, ключи будут разделены следующим образом:
>>> 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 ().