小编Ash*_*sia的帖子

Python 如何在遇到局部变量的声明之前知道它的存在?

def f(): 
    print("Before", locals())   # line 2
    print(x);                   # line 3
    x = 2                       # line 4
    print("After", locals())    # line 5

x = 1
f()
Run Code Online (Sandbox Code Playgroud)

我知道 Python 中范围界定的 LEGB 规则。

对于上面的代码,当我注释掉第 4 行时,一切都按预期正常执行:对于第 3 行,python 在本地范围内找不到变量x,因此在找到它的全局范围中搜索它并打印 1。

但是当我按原样执行整个代码而不加注释时,它会引发UnboundLocalError: local variable 'x' referenced before assignment.

我确实知道我可以使用非本地和全局,但我的问题是:

  1. python 在遇到局部变量声明之前如何知道存在局部变量声明?
  2. 即使它确实知道本地作用域中有一个名为 x 的变量(尽管尚未初始化),为什么它不在 locals() 中显示它?

我尝试在类似问题建议中找到答案,但失败了。如果我的理解有错误,请指正。

python scoping

2
推荐指数
1
解决办法
104
查看次数

C++ 中的字符串是否没有越界例外/错误?

string p="a";
cout<<p[4];
Run Code Online (Sandbox Code Playgroud)

这段代码没有给出任何错误。这是否意味着 C++ 中的字符串数据类型也不受数组限制?

c++ string c++11

1
推荐指数
1
解决办法
196
查看次数

标签 统计

c++ ×1

c++11 ×1

python ×1

scoping ×1

string ×1