我试图使用一个参数为namedTuple的函数,该参数具有默认值。我试过这个。这有可能吗?
from typing import Optional, NamedTuple
Stats = NamedTuple("Stats", [("min", Optional[int]), ("max", Optional[int])])
def print(value1: Stats=None, value2: Stats=None):
print("min: ", value1.min)
print("max: ", value1.max)
print()发布于 2021-12-20 18:10:09
print() 重命名您的函数,首先使用内置函数名print,这是糟糕的样式,然后在print()中递归调用print() (我确信您是要调用函数体内的实际内置的print() )。
第二,使用 collection.namedtuple类实现实际类型的元组,如下所示:
此外,不需要类型注释。
from collections import namedtuple
StatsTup = namedtuple('Stats', ['min', 'max'], defaults = [3, 7])
def printf(value1 = StatsTup(), value2 = StatsTup(max = 10)):
print("min1: ", value1.min)
print("max1: ", value1.max)
print("min2: ", value2.min)
print("max2: ", value2.max)
printf()
printf(StatsTup(12, 14), StatsTup(16, 18))输出:
min1: 3
max1: 7
min2: 3
max2: 10
min1: 12
max1: 14
min2: 16
max2: 18正如您在上面的代码和输出中所看到的,我将命名tuple作为默认参数传递给funcion。如果像我一样提供defaults = [...],可以省略元组的字段值。如果您提供了这样的默认值,那么您可能不提供像StatsTup()这样的元组值,或者一些值,比如StatsTup(max = 123),或者所有的值,比如StatsTup(min = 20, max = 35)。
以上解决方案仅从Python 3.7开始工作,对于较早版本的Python,请执行以下操作:
from collections import namedtuple
StatsTup = namedtuple('Stats', 'min max')
StatsTup.__new__.__defaults__ = (3, 7)
def printf(value1 = StatsTup(), value2 = StatsTup(max = 10)):
print("min1: ", value1.min)
print("max1: ", value1.max)
print("min2: ", value2.min)
print("max2: ", value2.max)
printf()
printf(StatsTup(12, 14), StatsTup(16, 18))https://stackoverflow.com/questions/70425481
复制相似问题