如何在 Python 案例中引用变量



Python能够将值与文字集或占位符进行匹配,如下所示:

choice = "apple"
match choice:
case "plum": ...
case "cherry": ...
case another_fruit:
print("Your selected fruit is:", another_fruit)

但是,如果我们有一个名为another_fruit的变量,并且我们想与恰好匹配该变量的值,而不是分配一个同名的占位符,该怎么办?这有什么特殊的语法吗?

选项1

我不知道有什么句法上的解决办法。裸变量名通常被认为是占位符(或者更准确地说:"捕获模式"(。

然而,有一条规则是,限定的(即虚线(名称被视为引用,而不是捕获模式。如果您将变量another_fruit存储在这样的对象中:

fruit_object = object()
fruit_object.another_fruit = "peach"

并这样引用它:

case fruit_object.another_fruit:
print("It's a peach!")

它会按照你想要的方式工作。


选项2

我最近还创建了一个名为match-ref的库,它允许您通过点名称引用任何本地或全局变量:

from matchref import ref
another_fruit = "peach"
choice = "no_peach"
match choice:
case ref.another_fruit:
print("You've choosen a peach!")

它通过使用Python的inspect模块来解析本地和全局名称空间(按此顺序(。


选项3

当然,如果你不介意失去一点便利,你不必安装第三方库:

class GetAttributeDict(dict):
def __getattr__(self, name):
return self[name]
def some_function():
another_fruit = "peach"
choice = "no_peach"
vars = GetAttributeDict(locals())

match choice:
case vars.another_fruit:
print("You've choosen a peach!")

GetAttributeDict可以使用点属性访问语法访问字典,locals()是一个内置函数,用于在本地命名空间中检索所有变量作为dict。

相关内容

  • 没有找到相关文章

最新更新