具有默认值的 NamedTuple
NamedTuple with default values
我正在尝试使用一个参数为 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()
重命名你的 print()
函数,首先你使用的是内置函数名称 print
,这是一种糟糕的风格,其次你制作了一个在 print()
中对 print()
的递归调用(我确定你是想在函数体内调用实际的内置 print()
)。
其次,使用collection.namedtuple
class实现元组的实际类型,如下所示:
也不需要类型注释。
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
正如您在上面的代码和输出中看到的,我将命名元组作为默认参数传递给函数。如果您像我一样提供 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))
我正在尝试使用一个参数为 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()
重命名你的 print()
函数,首先你使用的是内置函数名称 print
,这是一种糟糕的风格,其次你制作了一个在 print()
中对 print()
的递归调用(我确定你是想在函数体内调用实际的内置 print()
)。
其次,使用collection.namedtuple
class实现元组的实际类型,如下所示:
也不需要类型注释。
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
正如您在上面的代码和输出中看到的,我将命名元组作为默认参数传递给函数。如果您像我一样提供 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))