【问题标题】:how to pass string into a method as a keyword argument如何将字符串作为关键字参数传递给方法
【发布时间】:2019-05-16 20:50:44
【问题描述】:

是否可以将字符串作为关键字参数传递给函数/方法?

下面的代码运行良好

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 语句。

还有什么更好的吗?

【问题讨论】:

    标签: python function datetime


    【解决方案1】:

    也许使用** 操作符传入命名参数:

    params=dict()
    params['hours']=2
    datetime.timedelta(**params)
    # datetime.timedelta(0, 7200)
    
    【解决方案2】:

    不,因为关键字参数是语法,而不是数据。但以下是合法的:

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

    这个

    1. "days=1" 拆分为["days", "1"]
    2. 创建一个字典{"days": "1"}
    3. 使用字典作为timedelta 的关键字参数来源

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2010-09-24
      • 2014-03-03
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多