当前位置: 首页 > 知识库问答 >
问题:

静态/动态作用域、类型化、绑定

龚奕
2023-03-14

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

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

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

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

int void main(){
   cout<<i;          
   int i=15;
}  
int i=10;
def foo():
    print(x)
    x=10
x='global'
foo()

给出一个错误。

共有1个答案

丌官绍元
2023-03-14

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

在C++中,变量i在局部定义int i=15之前被认为是全局的;

在Python中:在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()build-it函数访问全局变量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()
 类似资料:
  • 为便于开发,larva采用动态类型,于是首先遇到的一个问题就是,在转化为java的时候,如何处理动态类型带来的问题。乍一看,这个不是很复杂,已经有前车之鉴了,Cython就可以把python代码直接转化成C代码,我的做法和Cython有相似之处,但考虑效率问题,做了一点修改 (虽然第一版本并不实现class语法来自定义类,不过在论述这个问题的时候,假定有自定义类,因为主要矛盾就在自定义类的属性方面

  • 一个机器或语言是用来计算的,根据计算机模型的定义,其操作的是存储器里的数据,就现在流行的用二进制实现的计算机中(曾出现过三进制计算机),数据本质都是0和1,但机器毕竟是为人服务的,解决的是现实问题,它操作的数据需要有现实的含义,所以基本上所有语言都有类型系统,即便是汇编和机器语言,也有整数和浮点的区别 类型系统是很复杂的理论,值得用一本厚书来写,好点的资料有《类型与程序设计语言》,但我没看懂,因为

  • 问题内容: 我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。 下面的代码会发生什么: 静态绑定还是动态绑定? 这表明什么样的多态性? 问题答案: 您的示例是 动态绑定 ,因为在运行时确定类型是什么,并调用适当的方法。 现在假设您也具有以下两种方法: 即使您更改为 这将打印出来,因为对的调用使用 静态绑定 ,并且编译器仅知道其类型。

  • 静态绑定还是动态绑定? 这显示了什么样的多态性?

  • 我们知道静态绑定发生在私有、静态、最终和重载的方法上,而动态绑定发生在被覆盖的方法上。但是如果我的方法只是公共的,它既不是静态的,也不是覆盖和重载的怎么办? 有人能给我解释一下print()的绑定会怎样,因为它既没有重载也没有被覆盖。

  • 起初我是一个初学者 我看过很多教程,读过很多例子,甚至试图从JLS来理解这个主题,但我仍然有一些困惑或误解。 让我给你看我看不懂的问题。