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

Python 静态/动态范围、类型化、绑定,python,c++,scope,Python,C++,Scope,我问这个只是为了澄清我的想法是否正确 静态/动态类型 如果在编译时已知变量的类型,则语言是静态类型的。这实际上意味着您作为程序员必须指定每个变量的类型。例子:java,C++,c++ .< /p> 如果在运行时解释变量的类型,则语言是动态类型化的。这意味着作为程序员,您可以编写得更快一些,因为您不必每次都指定类型。示例:Perl 静态/动态绑定,下面的链接清楚地解释了差异 我想问的主要问题从这里开始。 我知道静态范围界定和动态范围界定的区别。 但是,当我通过堆栈溢出时,人们说C++和Pytho

我问这个只是为了澄清我的想法是否正确

静态/动态类型 如果在编译时已知变量的类型,则语言是静态类型的。这实际上意味着您作为程序员必须指定每个变量的类型。例子:java,C++,c++ .< /p> 如果在运行时解释变量的类型,则语言是动态类型化的。这意味着作为程序员,您可以编写得更快一些,因为您不必每次都指定类型。示例:Perl

静态/动态绑定,下面的链接清楚地解释了差异

我想问的主要问题从这里开始。 我知道静态范围界定和动态范围界定的区别。 但是,当我通过堆栈溢出时,人们说C++和Python是静态范围的。 在C++中,如果I型为

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()