首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态/动态范围、类型化、绑定

静态/动态范围、类型化、绑定
EN

Stack Overflow用户
提问于 2015-09-13 15:55:10
回答 1查看 3.6K关注 0票数 5

我要求这样做只是为了澄清我的想法是否正确。

静态/动态类型化如果在编译时知道变量的类型,就会静态地输入语言。这实际上意味着,作为程序员,您必须指定每个变量的类型。例如: Java,C,C++。

如果在运行时解释变量的类型,则动态键入语言。这意味着作为程序员,您可以编写得更快一些,因为您不必每次都指定类型。例子: Perl

静态/动态绑定-下面的链接清楚地解释了不同的静态绑定和动态绑定

我想问的主要问题是从这里开始。我知道静态范围和动态范围之间的区别。然而,在我进行堆栈溢出时,人们说C++和Python是静态范围的。

在c++中如果我键入

代码语言:javascript
运行
复制
int void main(){
   cout<<i;          
   int i=15;
}  
int i=10;

它可以工作(甚至在java中).However,它与python相当。

代码语言:javascript
运行
复制
def foo():
    print(x)
    x=10
x='global'
foo()

给出一个错误。

EN

回答 1

Stack Overflow用户

发布于 2015-09-13 17:14:32

这个作用域在Python和C++中都是静态的。这些语言之间的区别与定义名称范围开始和结束的规则有关。

在C++中,变量i在本地定义int i=15;之前被视为全局变量。

在Python中:Python中局部变量和全局变量的规则是什么?

如果一个变量在函数体内的任何地方都被分配了一个值,那么除非显式声明为全局变量,否则它被假定为本地变量。

命名和绑定

当在代码块中使用名称时,它将使用最近的封闭范围进行解析。

因此,由于变量x位于foo()内部,因此假定它是从函数foo()开始开始的局部变量。可以使用x关键字将整个函数块中的global视为全局的:

代码语言:javascript
运行
复制
def foo():                
    global x              # name 'x' refers to the global variable
    print(x)              # print global 'x'
    x=10                  # assign global variable

x='global'
foo() # print 'global'
foo() # print '10'

实际上,即使您希望使用x build函数在同一个函数中有一个本地名称x,也可以访问全局变量globals()

代码语言:javascript
运行
复制
def foo():                # name 'x' refers to the local variable
    print(globals()['x']) # access the global name 'x'
    x=10                  # assign local variable
    print(x)              # print local 'x'

x='global'
foo()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32551547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档