调用函数时,是否可以使用与函数体内部不同的关键字名称?例如,在Swift中,您可以定义:
func person(with_name name: str) -> Person {
return Person(name: name)
}
var p = person(with_name: "Jeffry Mills") # p is now a person object with the name jeffry Mills
有什么办法可以在Python中模仿吗?尽管Python 3.7允许类型注释,但镜像语法无效:
def person(with_name name: str): # Invalid Syntax
return Person(name=name)
p = person(with_name="Jeffry Mills") # Looking for something similar to this
我正在寻找它,因为我认为它有助于提高可读性。
编辑:
评论要求用例。在没有用例中,解决问题的方法根本没有不同,我只是认为这有助于提高可读性。
我上面的代码作为示例。当您想通过我们的包装函数创建一个新的person实例时,它会写
person(with_name="Jeffry")
因此,当您调用它时,它的读起来更像句子。与“人名杰弗里”相比,“人名杰弗里的人”对海事组织的理解更为流利。
答案 0 :(得分:1)
如果没有具体的示例或用例,很难理解您的要求。但是,如果您只想让p = Person(with_name="Jeffry")
返回一个Person
属性且name
属性设置为“ Jeffry”的对象,那很容易做到。您的函数可以简单地遍历参数,并将以with_
开头的任何参数更改为不带with_
的变量。
例如:
class Person():
def __init__(self, name):
self.name = name
def person(**kwargs):
attrs = {}
for key, value in kwargs.items():
if key.startswith("with_"):
key_name = key[5:]
attrs[key_name] = value
return Person(**attrs)
p = person(with_name="Jeffry")
print("name is", p.name)
运行时,它输出以下内容:
name is Jeffry
就我个人而言,我绝不允许此代码通过代码审查,因为这会使代码对理解python的任何人更加混乱。他们会发现必须通过with_name=foo
才能设置name=foo
非常令人困惑。