为什么dict.get()无法与设置为默认值的另一个函数一起使用?

骑乘垫

下面是2个相同的函数,但一个具有dict.get(),另一个具有if键。在15、30和45上,它必须获取哈希值,但是它返回默认值-函数,即使键已经在字典中了?

D = dict()
def bugged(i):
    def nest():
        print('Not in D')
        div, mod = divmod(i, 5)
        D[i] = (div, mod)
        return div, mod
    print()
    print(i)
    print(i in D)
    return D.get(i, nest())


def works(i):
    def nest():
        print('Not in D')
        div, mod = divmod(i, 5)
        D[i] = (div, mod)
        return div, mod
    print()
    print(i)
    print(i in D)
    if i in D:
        return D[i]
    return nest()

f = works
f = bugged

for x in range (0,50,5):
    f(x)
print('='*100)
for x in range (0,50,3):
    f(x)
Nonneneo

在Python中,参数是在函数调用之前进行求值的,因此在您的情况下,nest()是在D.get之前调用的。由于巢会突变D,因此D.get总是返回返回nest()中设置的值。

省略print语句,可以使用setdefault dict方法更简洁地表达您的函数:

def func(i):
    return D.setdefault(i, divmod(i, 5))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么“ object .__ dict__是object .__ dict__”为假?

来自分类Dev

为什么dict文字语法优于dict构造函数?

来自分类Dev

为什么在Python中完全使用“ dict()”?

来自分类Dev

为什么要在Dict上使用HashDict?

来自分类Dev

为什么专门有一个patch.dict

来自分类Dev

python与递归一起使用:为什么一个变通办法起作用而另一个变通?

来自分类Dev

始终设置* {margin:0; padding:0}是一个好主意吗?如果是这样,为什么浏览器没有将其设置为默认值?

来自分类Dev

始终设置* {margin:0; padding:0}是一个好主意吗?如果是这样,为什么浏览器未将其设置为默认值?

来自分类Dev

为什么dict与dict.keys()联合会返回一个集合?

来自分类Dev

为什么decltype无法与重载函数一起使用?

来自分类Dev

为什么在调用另一个函数时不能将一个函数定义为参数?

来自分类Dev

为什么javascript在一个函数而不是另一个函数中从父作用域访问值?

来自分类Dev

JS:为什么这个值不从一个函数传递到另一个函数?

来自分类Dev

当将面板与另一个面板包裹在一起时,为什么胶水会消失?

来自分类Dev

我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

来自分类Dev

我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

来自分类Dev

为什么此函数的__dict__属性为空字典?

来自分类Dev

为什么无法从另一个脚本文件访问 javascript 函数?

来自分类Dev

为什么在调用另一个函数时此char数组会更改值?

来自分类Dev

为什么使用模拟类中另一个函数调用的函数的测试失败?

来自分类Dev

为什么Java无法从另一个线程看到更新的值?

来自分类Dev

为什么不从另一个函数中调用一个函数而不是使用回调呢?

来自分类Dev

为什么不从另一个函数中调用一个函数而不是使用回调呢?

来自分类Dev

为什么我必须从另一个函数中调用一个函数?

来自分类Dev

为什么使用打包的* args / ** kwargs而不是传递列表/ dict?

来自分类Dev

为什么一个参数Ocaml函数可与两个参数一起使用

来自分类Dev

为什么不能在另一个文件中调用类的非默认构造函数?

来自分类Dev

为什么一个变量的值似乎覆盖了另一个?

来自分类Dev

在什么情况下,默认值必须是一个函数?

Related 相关文章

  1. 1

    为什么“ object .__ dict__是object .__ dict__”为假?

  2. 2

    为什么dict文字语法优于dict构造函数?

  3. 3

    为什么在Python中完全使用“ dict()”?

  4. 4

    为什么要在Dict上使用HashDict?

  5. 5

    为什么专门有一个patch.dict

  6. 6

    python与递归一起使用:为什么一个变通办法起作用而另一个变通?

  7. 7

    始终设置* {margin:0; padding:0}是一个好主意吗?如果是这样,为什么浏览器没有将其设置为默认值?

  8. 8

    始终设置* {margin:0; padding:0}是一个好主意吗?如果是这样,为什么浏览器未将其设置为默认值?

  9. 9

    为什么dict与dict.keys()联合会返回一个集合?

  10. 10

    为什么decltype无法与重载函数一起使用?

  11. 11

    为什么在调用另一个函数时不能将一个函数定义为参数?

  12. 12

    为什么javascript在一个函数而不是另一个函数中从父作用域访问值?

  13. 13

    JS:为什么这个值不从一个函数传递到另一个函数?

  14. 14

    当将面板与另一个面板包裹在一起时,为什么胶水会消失?

  15. 15

    我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

  16. 16

    我将一个范围设置为另一个范围。当我删除原始范围时,另一个被清除。为什么?

  17. 17

    为什么此函数的__dict__属性为空字典?

  18. 18

    为什么无法从另一个脚本文件访问 javascript 函数?

  19. 19

    为什么在调用另一个函数时此char数组会更改值?

  20. 20

    为什么使用模拟类中另一个函数调用的函数的测试失败?

  21. 21

    为什么Java无法从另一个线程看到更新的值?

  22. 22

    为什么不从另一个函数中调用一个函数而不是使用回调呢?

  23. 23

    为什么不从另一个函数中调用一个函数而不是使用回调呢?

  24. 24

    为什么我必须从另一个函数中调用一个函数?

  25. 25

    为什么使用打包的* args / ** kwargs而不是传递列表/ dict?

  26. 26

    为什么一个参数Ocaml函数可与两个参数一起使用

  27. 27

    为什么不能在另一个文件中调用类的非默认构造函数?

  28. 28

    为什么一个变量的值似乎覆盖了另一个?

  29. 29

    在什么情况下,默认值必须是一个函数?

热门标签

归档