【发布时间】:2018-09-14 12:01:48
【问题描述】:
我查看了this question,但它并没有完全回答我的问题。 例如,我采用了一种简单的方法来打印我的姓名。
def call_me_by_name(first_name):
print("Your name is {}".format(first_name))
后来,我意识到可选地,我还希望能够打印中间名和姓氏。我进行了以下更改以适应使用 **kwargs 的情况,担心将来我可能会为名称本身添加更多字段(例如第三、第四、第五名称等)
我决定使用 **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) 文件中的特定行号。
在任何给定时间点只能设置这两个条件中的一个(因为不可能同时从文件中的特定字节偏移量和行号中读取。)但可能还有更多这样的条件将来的条件,例如从第一次出现的字符中解析文件等。可能有 10-20 种不同的此类条件,我的方法应该支持但只有一个条件会由调用者随时设置。除非没有其他选择,否则我不希望有 20-30 种不同的 IF 条件。
【问题讨论】:
-
为什么不用
*解压dict?我的意思是您可以直接将 kwargs 格式设置为...format(*kwargs),但是您的格式化字符串必须只有占位符 -
@Take_Care_ 在 python 3.6 之前,这不能保证名称的顺序正确。如果名字不见了怎么办?
-
@PM 2Ring 感谢您的提及。是的,用户必须意识到这一点:P
-
@PM2Ring,我已经编辑了我的问题以更彻底地解释我的用例。
-
如果只能设置一个选项,为什么不直接使用enum 或类似的?