如何调用和访问具有冒号分隔参数的函数的参数?

时间:2015-01-28 02:17:37

标签: python python-3.x

我试图编写一个python函数来计算给定天,小时和分钟的分钟数。

该函数被称为

def minutes(d:'days', h:'hours', m:'minutes'):

我对如何为dhm分配数值感到困惑,因此我可以操纵这些变量。任何帮助或建议都会非常感激。

2 个答案:

答案 0 :(得分:2)

该函数使用的是python3 function annotations

你仍然可以像往常一样传递args:

def minutes(d:'days', h:'hours', m:'minutes'):
    print(minutes.__annotations__ )
    print(d,h,m)
print(minutes(10,10,10)

{'d': 'days', 'm': 'minutes', 'h': 'hours'}
10 10 10

或传递一个词典:

dic = {"d":22,"h":12,"m":25}
print(minutes(**dic))  
{'d': 'days', 'm': 'minutes', 'h': 'hours'}
22 12 25

答案 1 :(得分:0)

可能是namedtuplecollections库的一部分)的工作。 collections.namedtuple允许您按照给出的名称访问元组的不同成员。

示例:

# import the namedtuple module from the library
from collections import namedtuple as nt
# create a type of namedtuple called Time that contains days, hours, minutes
Time = nt('Time', 'days hours minutes')
# you can make a Time instance this way
t1 = Time(0, 0, 1)
# now you can print it to see what's inside
print(t1) # Time(days=0, hours=0, minutes=1)
# ...and access the parts of the Time object by name
print(t1.minutes) # 1
# ...or access them by index
print(t1[2]) # 1

现在要转换为分钟,您只需执行此操作:

from collections import namedtuple as nt
Time = nt('Time', 'days hours minutes')
def minutes(d: 'days', h: 'hours', m: 'minutes'):
    t = Time(d, h, m)
    return t.days*24*60 + t.hours*60 + t.minutes

#testing
assert minutes(1,1,1) == 24*60 + 60 + 1

或者你也可以稍微改变你想要的功能签名,并且这样做似乎更直接:

def minutes(t: 'time'):
    return t.days*24*60 + t.hours*60 + t.minutes

#testing
t = Time(1,1,1)
assert minutes(t) == 24*60 + 60 + 1
编辑:没有意识到问题的关键是要了解冒号正在做什么。函数签名中的参数后面的冒号和字符串不是字典;它们是function annotations,我相信它是Python 3中的新功能。