我试图编写一个python函数来计算给定天,小时和分钟的分钟数。
该函数被称为
def minutes(d:'days', h:'hours', m:'minutes'):
我对如何为d
,h
和m
分配数值感到困惑,因此我可以操纵这些变量。任何帮助或建议都会非常感激。
答案 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)
可能是namedtuple
(collections
库的一部分)的工作。 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中的新功能。