【发布时间】:2021-03-29 10:12:57
【问题描述】:
我是 Python 新手,请多多包涵。 为什么Python在编译以下代码时不会抛出错误。
def b_search(left, right):
while left <= right:
mid = left + (right-left)//2
if nums[mid] == target:
return mid
if nums[mid] < target:
left = whatever
else:
right = mid-1
return -1
想知道为什么没有定义“nums”,也没有定义“whatever”和“target”。
谢谢!
【问题讨论】:
-
我确定这是重复的,但我找不到。
-
我也没有,我在找不到类似问题时发布了这个。对 Python 的新手肯定有过这个问题吗?
-
@KarlKnechtel - 这只是范围规则。我不知道为什么这对每个人来说都是一个启示。
-
这不仅仅是“范围规则”;本地与全局是与运行时与编译时名称查找不同的问题。这对许多人来说是一个启示,因为许多其他编程语言的工作方式不同。
-
另外,在大多数情况下,局部变量在字节码编译时被解析。全局变量的处理方式和本地变量(通常)的处理方式之间的区别可能会令人困惑。 (在编译时未解析本地变量的主要情况是类范围和
exec。)