kwargs - 在 python 中,使用 **kwargs的正确方法

  显示原文与译文双语对照的内容
139 2

这个问题我看了一下 ,但它并没有完全回答我的问题。作为例子,我采取了一种简单的方法来打印我。

def call_me_by_name(first_name):
 print("Your name is {}".format(first_name))

稍后,我意识到,我还想能够打印中间名和姓氏。我做了以下更改,以容纳使用 **kwargs 担心将来为名称本身添加更多字段( 例如 3,4,5th 名称 等等 ) 。

我决定使用 **kwargs

def call_me_by_name(first_name,**kwargs):
 middle_name = kwargs['middle_name'] if kwargs.get('middle_name') else""
 last_name = kwargs['last_name'] if kwargs.get('last_name') else""
 print("Your name is {} {} {}".format(first_name,middle_name,last_name))

我的唯一关注是,当我继续实现更多名称的支持时,我最终会编写一行代码。我想找到一个尽可能 Pythonic的解决方案。是否有更好的方法来实现这个?

编辑 1

我想使用关键字参数,因为这只是一个示例程序。实际的用例是通过文件解析。现在的关键字参数将支持从

1 ) 文件中的特定字节。
2 ) 文件中的特定行号。

这两种条件之一在时间( 因为不能从文件中的特定字节偏移量和同一时间的行号读取。) 可以设置,将来可能会在以后的任何时间设置一个字符,这些条件可能会在任何时候设置一个字符 等等,而调用程序的一个条件可能会设置。如果条件不存在,我不希望有 20 -30不同的条件。

时间:原作者:0个回答

85 5

看起来你最好不要使用 kwargs,甚至是一个函数,你可以以简单地做一些事情:

print("Your name is","".join([first_name, middle_name, last_name]))

或者,如果你想要函数:

def call_me_by_name(*args):
 print("Your name is","".join(args))
原作者:
92 4

如果你特别关心关键字参数,这可能不是正确的工具。在这种情况下,你可以使用默认参数获得相同的效果:

def call_me_by_name(first_name, middle_name="", last_name=""):
 print("Your name is {} {} {}".format(first_name,middle_name,last_name))

当你想要一种"grab包"选项时,这是更好的。E.g.

def configure(**kwargs):
 if 'color' in kwargs:
 set_color(kwargs['color'])

等等.

原作者:
126 5

你可以通过以下方式简化它:

middle_name = kwargs.get('middle_name', '')
原作者:
141 1

我将把它作为答案发布:

你可以立即将英镑值解压缩到如下格式的格式函数中:

"Your name is {} {} {}".format(first_name, *kwargs)

但是当用户 @PM 2 Ring mentioned提到你必须知道,这不能保证名称是正确的。

原作者:
...