代码如下:
checkDictionary = {
'0': (print('0'),0),
'1': (print('1'),1),
'2': (print('2'),2)
}
print(checkDictionary.get('1','Not found'))
我期望的输出是:
1
(None, 1)
但它会在每个值字段中运行所有功能:
0
1
2
(None, 1)
任何人都可以解释这种行为,为什么要这样实现?
我从多个来源听说Python字典在大多数情况下应该是O(1)快速的。
所以我真正想完成的事情是用多个执行行做出一个不错的开关/案例:
def readPoint(v):
print(f'Point: {v}')
def readLine(v):
print(f'Line: {v}')
Point = 1
Line = 2
segment = [1,1]
checkDictionary = {
Point: "geometry = readPoint(segment)\n__type='Point'",
Line: "geometry = readLine(segment)\n__type='Line'"
}
exec(checkDictionary.get(segment[0],'raise ValueError("Some error")'))
这种设计模式会存在一些问题吗?不在乎函数或变量,它们只是示例。
答案 0 :(得分:2)
这是完全可以预期的,绝不是奇怪行为。理解的关键是知道在声明字典时创建字典(评估键和值)。
对于您而言,对值的求值导致执行print
语句。
这就是为什么您得到:
0
1
2
3
4
5
6
7
然后print(checkDictionary.get('1','Not found'))
预期会产生:
(None, 1)
答案 1 :(得分:0)
之所以这样做,是因为您在调用print
的任何地方都会打印出来,因此解决此问题的最佳方法是删除打印件或其他内容,并且print
也是无类型
实际上(None, 1)
是代码的输出,只是在创建字典时它正在打印
所以最后您的代码可以按预期工作