【发布时间】:2020-08-09 13:41:44
【问题描述】:
Clojure 中有一个关键字的概念,您可以通过在您要作为关键字处理的单词前面添加一个冒号来定义它们。此外,它对自身进行评估。例如:
:my-keyword
;=> :my-keyword
有没有办法通过定义一些自定义类或任何解决方法在 python 中实现这一点?
这样做的原因是有更多的自描述参数(字符串在那里,但在传递时无法跟踪是否有一致的字符串)。
一个实际的用例是这样的:
def area(polygon_type):
return \
{
"square": lambda side: (side * side),
"triangle": lambda base, height: (0.5 * base * height)
}[polygon_type]
area("square")(2) # ==> 4
但是,如果处理不当,以这种方式使用字符串会导致运行时出错。但是在任何 IDE 中都有类似关键字的东西,甚至是自动完成功能,这表明在传递 polygon_type 时所犯的错误。
area("Sqaure")(2) # would lead to a KeyError
python 中是否有一些我不知道的功能可以解决这类问题? 如果没有,有人会如何解决这个问题?
编辑: 我并不是特别想解决拥有这样一个功能的问题;而是寻找一种在 python 中实现 keyword 概念的方法。因为,对于枚举,我必须捆绑并在某个类别下明确定义它们(在本例中为 polygon_type)
【问题讨论】:
-
使用 clojure 并使用子进程来运行你的 python。这样做不太明智。
-
您是否在询问 python 是否可以找到并解决您代码中的拼写错误?
-
你可以使用枚举。您可以使用类型提示。 IDE 可能会检查这类事情。
-
@khelwood 不完全是。因为使用枚举,我必须将上面示例中的术语捆绑到一个名为 PolygonType 的单个枚举类中。然后将它们用作 PolygonType.square 和 PolygonType.triangle。还必须将 PolygonType 导入我使用它们的每个模块中;这是不可取的。
-
如果你想要一个函数
area(polygon_type),它只有有限数量的精确值是有效的,并且你想要一个能够检查你的代码的工具,看看你是否试图通过它是一个无效的值,枚举和/或类型提示似乎符合该要求。另一方面,如果您真正想要的是以与编写另一种语言完全相同的方式编写 Python,那么您的方法是错误的。
标签: python clojure keyword abstract-data-type