首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何指示函数应该使用可选参数的默认值而不忽略它?

如何指示函数应该使用可选参数的默认值而不忽略它?
EN

Stack Overflow用户
提问于 2017-06-26 09:40:32
回答 5查看 99关注 0票数 2

我试图按照干的原则编写不重复的代码。

考虑包含许多参数的函数调用,包括强制性的和可选的。在某些情况下,我希望为可选参数指定一个值,而在另一些情况下,我希望将该值保留为默认值。为了简化我的问题:

代码语言:javascript
运行
复制
def func(a, b=2):
    print("b = {}".format(b))

avalue = 1
condition = 2
arg = None  # <-- Means: "use default" 
if condition == 1:
    arg = 3

func(avalue, b=arg)

输出

代码语言:javascript
运行
复制
b = None

预期输出

代码语言:javascript
运行
复制
b = 2

因此,我试图避免像这样两次编写函数调用的代码:

代码语言:javascript
运行
复制
if arg:
    func(avalue, b=arg)
else:
    func(avalue)

在Python中有可能吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-06-26 09:42:33

使用字典,并且只将可选参数设置为键值对,如果要指定它。然后使用**kwargs调用语法应用字典:

代码语言:javascript
运行
复制
avalue = 1
condition = 2

kwargs = {}
if condition == 1:
    kwargs['b'] = 3

func(avalue, **kwargs)

一个空字典( condition != 1大小写)将b设置为默认值。

票数 4
EN

Stack Overflow用户

发布于 2017-06-26 09:55:11

解决办法之一可以是:

代码语言:javascript
运行
复制
def func(a, b=2, **kwargs):
    print("b = {}".format(b))

avalue = 1
condition = 2

func(avalue, **{} if condition != 1 else {'b':3})
票数 1
EN

Stack Overflow用户

发布于 2017-06-26 09:42:51

这个怎么样:

代码语言:javascript
运行
复制
def func(a, b=None):
    b = 2 if not b else b
    print("b = {}".format(b))

avalue = 1
condition = 2
arg = None  # <-- Means: "use default"
if condition == 1:
    arg = 3

func(avalue, arg)  # b = 2

如果condition = 1

代码语言:javascript
运行
复制
func(avalue, arg)  #  b = 3

以上假设您可以修改函数定义。如果不是这样的话,您必须使用**kwargs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44756825

复制
相关文章

相似问题

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