python - 本地人的 Python 绑定环境
问题描述
在下面的:
a = 3
def b():
# global a; // will error without this statement
a = a + 1
print a
除非我添加global
. 从这个意义上说,python 似乎首先评估表达式的 LHS(为 创建新的本地a
)而不是先评估 RHS(等于 4),然后将其分配给本地 a。换句话说,比如:
local a <-- local a + 1
^
doesnt exist so look up in parent environment
local a <-- global a + 1
local a <-- 3 + 1
我只是好奇为什么在 python 中没有默认使用这种方法。例如,在 C 中它使用这种模式:
// file.c
#include <stdio.h>
int a=3;
int main(void)
{
a = a + 1;
printf("%d\n", a);
}
$ gcc file.c -o file; ./file
4
解决方案
官方没有解释,但我能想到两个原因
- 由于
a = a + 1
是一个赋值,它指的是局部变量a
,而不是全局变量(除非另有说明)。由于您尚未声明 locala
,因此它是隐式定义的,但未初始化(类似的事情也发生在 javascript 中,也是常见的混淆来源)。在 C 中,您不会有这种误解,它是一种静态语言,int a
如果存在,您将定义一个本地语言。 - 在 python 中,你可以在 function 中定义一个函数
c()
,b()
它会绑定到a
里面的变量b
,而不是全局的a
。C没有闭包,所以这没有用。
推荐阅读
- centos - CentOS 默认 confiteor repos 和 vault (online repos) 之间有什么关系
- ios - 将特定类型的数据显示到表格视图
- r - 我如何安装这个包“JohnsonDistribution”
- c# - 仅将包含数据的第一列从一个 DataTable 复制到另一个新 DataTable
- java - BLOG 语言成绩差了一小部分
- php - 如何通过正则表达式收集 HTML 链接中的文本?
- python - 解压二进制数据得到需要字符串参数错误
- python - 如何将 python3 manage.py runserver 放入 Bash 脚本中
- html - HTML 视频标签仅显示背景
- selenium - 如何在 Katalon Studio 中获取元素的所有子元素