Python 静态/动态范围、类型化、绑定
我问这个只是为了澄清我的想法是否正确 静态/动态类型 如果在编译时已知变量的类型,则语言是静态类型的。这实际上意味着您作为程序员必须指定每个变量的类型。例子:java,C++,c++ .< /p> 如果在运行时解释变量的类型,则语言是动态类型化的。这意味着作为程序员,您可以编写得更快一些,因为您不必每次都指定类型。示例:Perl 静态/动态绑定,下面的链接清楚地解释了差异 我想问的主要问题从这里开始。 我知道静态范围界定和动态范围界定的区别。 但是,当我通过堆栈溢出时,人们说C++和Python是静态范围的。 在C++中,如果I型为Python 静态/动态范围、类型化、绑定,python,c++,scope,Python,C++,Scope,我问这个只是为了澄清我的想法是否正确 静态/动态类型 如果在编译时已知变量的类型,则语言是静态类型的。这实际上意味着您作为程序员必须指定每个变量的类型。例子:java,C++,c++ .< /p> 如果在运行时解释变量的类型,则语言是动态类型化的。这意味着作为程序员,您可以编写得更快一些,因为您不必每次都指定类型。示例:Perl 静态/动态绑定,下面的链接清楚地解释了差异 我想问的主要问题从这里开始。 我知道静态范围界定和动态范围界定的区别。 但是,当我通过堆栈溢出时,人们说C++和Pytho
int void main(){
cout<<i;
int i=15;
}
int i=10;
给出了一个错误。
< P>在Python中以及C++中,该作用域是静态的。这些语言之间的差异与定义名称范围开始和结束的规则有关 <>在C++中,变量<代码> i>代码>在局部定义<代码> int i=15之前被认为是全局的;代码> 在Python中: : 如果在函数体的任何位置为变量赋值, 除非明确声明为全局,否则假定它是局部的 : 在代码块中使用名称时,将使用最近的 封闭范围 因此,由于变量x
在foo()
中分配,因此假定它是从函数foo()
开始的局部变量。
可以使用global
关键字将整个功能块中的x
视为全局:
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'
实际上,使用globals()
buildit函数,即使您希望在同一函数中有一个本地名称x
,也可以访问全局变量x
:
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()
因此,基本上,范围界定规则是不同的
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()