Python内置了交互式调试器,可以通过引入pdb模块,并调用set_trace()函数来触发调试器,让代码停在指定的位置,然后通过输入局部变量的名称来打印它们的值,或通过locals()函数来列出所有的局部变量,当然还可以引入模块、创建新对象、调用help()函数获取帮助等。
Python函数在定义的时候,默认参数items的值就被计算出来了,即[]。因为默认参数 items引用了对象[],每次调用该函数,如果对items引用的列表进行了操作,下次调用时,默认参数还是引用之前的那个列表而不是重新赋值为[],所以列表中会有之前添加的元素。
这个题目在初中级Python岗位面试的时候经常出现,题目源于《Python Cookbook》这本书第一章的第10个问题,有很多面试题其实都是这本书上的原题,所以建议大家有时间的话好好研读一下这本书。
当捕捉闭包的时候,它的自由变量(在函数外部定义但在函数内部使用的变量)会在捕捉时被确定,这样即便脱离了捕捉时的上下文,它也能照常运行。简单的说,可以将闭包理解为能够读取其他函数内部变量的函数。
搜索一个标识符时,会按照LEGB的顺序进行搜索,如果所有的作用域中都没有找到这个标识符,就会引发NameError异常。