字典的表现

时间:2018-08-08 07:16:34

标签: python dictionary

代码如下:

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")'))

这种设计模式会存在一些问题吗?不在乎函数或变量,它们只是示例。

2 个答案:

答案 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)是代码的输出,只是在创建字典时它正在打印

所以最后您的代码可以按预期工作