как передать строку в метод в качестве аргумента ключевого слова - PullRequest
0 голосов
/ 16 мая 2019

Можно ли передать строку в качестве аргумента ключевого слова в функцию / метод?

приведенный ниже код отлично работает

start_time = datetime.datetime.strptime('2019-01-01', '%Y-%m-%d')
end_time = start_time + datetime.timedelta(days=1)
print(end_time)

Однако, если я передам строку вdatetime.timedelta

delta = 'days=1'
start_time = datetime.datetime.strptime('2019-01-01', '%Y-%m-%d')
end_time = start_time + datetime.timedelta(delta)
print(end_time)

, тогда он вернется

TypeError: unsupported type for timedelta days component: str

Но что, если я получу это "days = 1" или "hours = 2" или "seconds = 5" изпользовательский ввод?

Один из способов сделать это - проанализировать пользовательский ввод и создать несколько операторов if / elif.

Есть что-нибудь лучше?

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Возможно передать именованные параметры с помощью оператора **:

params=dict()
params['hours']=2
datetime.timedelta(**params)
# datetime.timedelta(0, 7200)
1 голос
/ 16 мая 2019

Нет, поскольку аргументом ключевого слова является синтаксис , а не данные.Следующее допустимо, однако:

end_time = start_time + datetime.timedelta(**dict([delta.split("=")]))

Это

  1. Разбивает "days=1" на ["days", "1"]
  2. Создает dict {"days": "1"}
  3. Использует dict в качестве источника аргументов ключевого слова для timedelta
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...