首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有默认值的NamedTuple

具有默认值的NamedTuple
EN

Stack Overflow用户
提问于 2021-12-20 17:09:23
回答 1查看 2.4K关注 0票数 9

我试图使用一个参数为namedTuple的函数,该参数具有默认值。我试过这个。这有可能吗?

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-20 18:10:09

print() 重命名您的函数,首先使用内置函数名print,这是糟糕的样式,然后在print()中递归调用print() (我确信您是要调用函数体内的实际内置的print() )。

第二,使用 collection.namedtuple类实现实际类型的元组,如下所示:

此外,不需要类型注释。

在网上试试!

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
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,请执行以下操作:

在网上试试!

代码语言:javascript
复制
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))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70425481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档