Использование строк как неполных битов кода в Python - PullRequest
1 голос
/ 24 сентября 2011

(пожалуйста, помогите мне уточнить название)

Это то, что я хотел бы сделать:

s = "'arg1', 'arg2', foo='bar', baz='qux'"
def m(*args, **kwargs):
  return args, kwargs

args, kwargs = m(magic(s))
# args = ['arg1', 'arg2']
# kwargs = {'foo': 'bar', 'baz'='qux'}

Каково определение магии ()?

Анализ строки сам по себе является последним средством, поскольку он чреват ошибками (что если в arg1 есть запятая? Что если в arg2 есть кавычки? И т. Д.).

Ответы [ 2 ]

3 голосов
/ 24 сентября 2011

С s и m, определенными как они у вас:

>>> args, kwargs = eval('m(%s)' % s)
>>> args
('arg1', 'arg2')
>>> kwargs
{'foo': 'bar', 'baz': 'qux'}
0 голосов
/ 24 сентября 2011

Взгляните на eval , но помните, что, если вы не будете осторожны, могут случиться плохие вещи.

...