如何在Python案例中引用变量';s

如何在Python案例中引用变量';s,python,python-3.10,Python,Python 3.10,Python能够针对文本集或占位符集执行以下操作: choice=“苹果” 比赛选择: 案例“梅花”:。。。 案例“樱桃”:。。。 另一个案例是: 打印(“您选择的水果是:”,另一种水果) 但是,如果我们有一个名为另一个_fruit的变量,并且我们希望与该变量的值完全匹配,而不是指定一个同名的占位符,该怎么办?这有什么特殊语法吗?选项1 我不知道这个问题的语法解决方案。裸变量名通常被认为是占位符(或者更准确地说:“捕获模式”) 但是,有一条规则是,限定(即虚线)名称被视为引用,而不是捕获模式。

Python能够针对文本集或占位符集执行以下操作:

choice=“苹果”
比赛选择:
案例“梅花”:。。。
案例“樱桃”:。。。
另一个案例是:
打印(“您选择的水果是:”,另一种水果)
但是,如果我们有一个名为
另一个_fruit
的变量,并且我们希望与该变量的值完全匹配,而不是指定一个同名的占位符,该怎么办?这有什么特殊语法吗?

选项1 我不知道这个问题的语法解决方案。裸变量名通常被认为是占位符(或者更准确地说:“捕获模式”)

但是,有一条规则是,限定(即虚线)名称被视为引用,而不是捕获模式。如果您将变量
另一个_fruit
存储在如下对象中:

fruit\u object=object()
另一个水果=“桃”
并引用如下:

case-fruit\u对象。另一个\u-fruit:
打印(“它是一个桃子!”)
它会按照你想要的方式工作


选择2 我最近还创建了一个,它允许您通过虚线名称引用任何局部或全局变量:

来自matchref导入ref
另一种水果=“桃子”
choice=“没有桃子”
比赛选择:
案例参考:另一种水果:
打印(“你选了一个桃子!”)
它通过使用Python的
inspect
模块来解析本地和全局名称空间(按此顺序)


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

类GetAttributeDict(dict):
def _ugetattr _;(self,name):
返回自我[姓名]
定义某些函数():
另一种水果=“桃子”
choice=“没有桃子”
vars=GetAttributeDict(locals())
比赛选择:
案例变量。另一种水果:
打印(“你选了一个桃子!”)

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

如果您可以安排通过虚线名称访问变量,例如
fruitmodule。另一个_fruit
,这将被解释为一个值,而不是一个捕获变量。否则,我看到的唯一方法就是如果f==另一个水果:,
if
-的想法非常好+1为什么会这样?你的答案更广泛,问题更老,答案也更多。这个问题应该被标记为重复