首页 > 解决方案 > 将参数传递给函数内的方法

问题描述

我是 Python 新手,在试图理解为什么这段代码不起作用时遇到了一些问题。我正在尝试将函数参数传递给函数内的方法参数。这是我的代码:

import datetime
    
starter = datetime.datetime(2015, 10, 21, 16, 29)
    
def time_machine(integer, string):
    if string == 'years':
        string = 'days'
        integer *= 365
    return starter - datetime.timedelta(string=integer)

当我尝试这个时,我只是得到一个 TypeError。

标签: python

解决方案


string不是有效的参数datetime.timedelta

改为使用datetime.timedelta(days=integer)datetime.timedelta(integer)

def time_machine(integer, string):
    if string == 'years':
        integer *= 365
    return starter - datetime.timedelta(days=integer)

例子:

>>> time_machine(2, 'years')
datetime.datetime(2013, 10, 21, 16, 29)

或以编程方式传递参数名称:

def time_machine(integer, string):
    if string == 'years':
        string = 'days'
        integer *= 365
    else:
        assert string in ('days', 'seconds', 'microseconds',
                          'milliseconds', 'minutes', 'hours', 'weeks'
                         ), 'invalid parameter'
    return starter - datetime.timedelta(**{string: integer})

例子:

>>> time_machine(2, 'minutes')
datetime.datetime(2015, 10, 21, 16, 27)

推荐阅读