在我的Python Shell中,删除benzoUpdate searchMsg ({meds} as model) =
{ model | meds = { meds | benzo = Input.updateSelection searchMsg meds.benzo }
, selectedMed = case Input.selected meds.benzo of
Nothing -> NoneChosen
Just benzo -> Stage1 benzo
} |> updateCurrentMedDose
updateCurrentMedDose model = { model | dose = (dosing (Maybe.withDefault 0 model.ptWt) model.selectedMed) }
会使其成为__name__
。虽然,使用'builtins'
检查确认我没有从某个全局变量引用globals
。
__name__
我的猜测是我们从一些关闭中使用它。这种行为是如何发生的?
答案 0 :(得分:5)
首先从局部变量查找所有名称,然后查找全局变量,然后查找__builtins__
,这在任何地方都可用。它就是所有内置函数的所在。
In[6]: __builtins__
Out[6]: <module 'builtins' (built-in)>
In[7]: __builtins__.__name__
Out[7]: 'builtins'
In[8]: __builtins__.len
Out[8]: <function len>
答案 1 :(得分:4)
您可以从__name__
猜测,您正在访问builtins
module的名称。
每当您访问变量并且在任何闭包,本地范围或全局范围中找不到该变量时,查找都会回退到内置函数。这就是为什么您可以访问min
或max
或type
之类的内容,即使它们不是全局变量:
>>> 'min' in globals()
False
>>> min
<built-in function min>
>>> __builtins__.min
<built-in function min>
同样的事情发生在__name__
上。最初,在全局范围中定义了__name__
变量:
>>> globals()['__name__']
'__main__'
但是一旦使用del __name__
删除了该名称,全局变量中的查找将失败并返回到内置函数 - 因此您最终会得到builtins
模块的名称。
>>> del __name__
>>> __name__
'builtins'
>>> __builtins__.__name__
'builtins'