我要求这样做只是为了澄清我的想法是否正确。
静态/动态类型化如果在编译时知道变量的类型,就会静态地输入语言。这实际上意味着,作为程序员,您必须指定每个变量的类型。例如: Java,C,C++。
如果在运行时解释变量的类型,则动态键入语言。这意味着作为程序员,您可以编写得更快一些,因为您不必每次都指定类型。例子: Perl
静态/动态绑定-下面的链接清楚地解释了不同的静态绑定和动态绑定
我想问的主要问题是从这里开始。我知道静态范围和动态范围之间的区别。然而,在我进行堆栈溢出时,人们说C++和Python是静态范围的。
在c++中如果我键入
int void main(){
cout<<i;
int i=15;
}
int i=10;
它可以工作(甚至在java中).However,它与python相当。
def foo():
print(x)
x=10
x='global'
foo()
给出一个错误。
发布于 2015-09-13 17:14:32
这个作用域在Python和C++中都是静态的。这些语言之间的区别与定义名称范围开始和结束的规则有关。
在C++中,变量i
在本地定义int i=15;
之前被视为全局变量。
在Python中:Python中局部变量和全局变量的规则是什么?
如果一个变量在函数体内的任何地方都被分配了一个值,那么除非显式声明为全局变量,否则它被假定为本地变量。
当在代码块中使用名称时,它将使用最近的封闭范围进行解析。
因此,由于变量x
位于foo()
内部,因此假定它是从函数foo()
开始开始的局部变量。可以使用x
关键字将整个函数块中的global
视为全局的:
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()
:
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()
https://stackoverflow.com/questions/32551547
复制相似问题