gpt4 book ai didi

python - 静态/动态作用域、类型化、绑定(bind)

转载 作者:太空狗 更新时间:2023-10-29 21:17:34 33 4
gpt4 key购买 nike

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

静态/动态类型如果变量的类型在编译时已知,则语言是静态类型的。这实际上意味着您作为程序员必须指定每个变量的类型。示例:Java、C、C++。

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

Static/Dynamic Binding - 下面的链接清楚地解释了区别 Static Binding and Dynamic Binding

我想问的主要问题从这里开始。我知道静态作用域和动态作用域之间的区别。然而,当我经历堆栈溢出时,人们说 C++ 和 Python 是静态作用域的。

在 C++ 中,如果我输入

int void main(){
cout<<i;
int i=15;
}
int i=10;

它有效(甚至在 java 中)。但是它的 python 等价物

def foo():
print(x)
x=10
x='global'
foo()

报错。

最佳答案

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

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

在 Python 中: What are the rules for local and global variables in Python? :

If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global.

Naming and binding :

When a name is used in a code block, it is resolved using the nearest enclosing scope.

因此,由于变量 x在里面被刺foo()假定它是一个从函数开头开始的局部变量 foo() .可以治疗x在整个功能 block 中作为全局使用 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即使你想要一个本地名称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()

关于python - 静态/动态作用域、类型化、绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551547/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com