python – 为什么在C中允许以下内容?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么在C中允许以下内容?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1430字,纯文字阅读大概需要3分钟。
内容图文
![python – 为什么在C中允许以下内容?](/upload/InfoBanner/zyjiaocheng/756/834d6029550142f98e70082834d14c5c.jpg)
为什么大多数C的实现都允许以下行为?如果我们使用变量本身来定义它,就像这样:
#include <stdio.h>
int main()
{
int a = 9;
int b = ( a +b );
printf("%d",b);
}
我知道将使用b的垃圾值,但应该有一些编译时警告.这对我来说听起来有点奇怪.在像Python这样的语言中,执行这样的操作是违法的:
>>> b = 9
>>> a = a + b
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
a = a + b
NameError: name 'a' is not defined
我猜Python在当前命名空间中没有变量(直到它具有当前范围内的值),而在C中,上述语句断开如下:
int b = 9;
int a; // put to namespace or whatever a lookup table with garbage value
a = a + b;
如果有人指出这背后的哲学,那将是很好的.
解决方法:
说明
在C函数中,所有局部变量声明都会立即发生.从本质上讲,编译器会将您的代码转换为:
int a;
int b;
// start of function
a = 9;
b = a + b;
// end of function
所以你可以看到,总有一个变量b,它存在于函数的整个运行时.
在Python中,这不会发生. b在第一次分配之前不存在.
Python解释器在运行之前运行代码a b b =< b>的结果.如果你考虑它正在用中间结果做什么,你会得到相当于的东西:
a = 9;
intermediate_value = a + b
b = intermediate_value
现在很清楚,在定义之前使用b.
哲学
这归结为像C这样的静态语言和像Python这样的动态语言之间的区别.在动态语言中,很多以静态语言编译的事情都是在运行时完成的.这些事情甚至可以包括修改正在运行的程序本身的代码. (理论上,通过不受限制地访问计算机的内存,您也可以在C中执行此操作;但在所有现代操作系统上,这是不可能的).
有关详细信息,请阅读此页面http://en.wikipedia.org/wiki/Dynamic_programming_language.
内容总结
以上是互联网集市为您收集整理的python – 为什么在C中允许以下内容?全部内容,希望文章能够帮你解决python – 为什么在C中允许以下内容?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。