当前位置: 首页 > 面试题库 >

对python变量作用域的怀疑

国胤
2023-03-14
问题内容

这个问题已经在这里有了答案

8年前关闭。

可能重复:
Python范围规则的简短描述

我写了两个简单的函数

# coding: utf-8
def test():
    var = 1 
    def print_var():
        print var 
    print_var()
    print var

test()
# 1
# 1
def test1():
    var = 2 
    def print_var():
        print var 
        var = 3 
    print_var()
    print var

test1()
# raise Exception

相比之下,test1()在之后赋值print var,然后引发Exception:,UnboundLocalError: local variable 'var' referenced before assignment我认为当我调用inner时print var,var的值为2,我错了吗?


问题答案:

是的,您在这里不正确。函数定义引入了新的范围。

# coding: utf-8
def test():
    var = 1 
    def print_var():
        print var    <--- var is not in local scope, the var from outer scope gets used
    print_var()
    print var

test()
# 1
# 1
def test1():
    var = 2 
    def print_var():
        print var     <---- var is in local scope, but not defined yet, ouch
        var = 3 
    print_var()
    print var

test1()
# raise Exception


 类似资料:
  • 问题内容: 我试图在某些函数中声明一些全局变量,然后将具有这些函数的文件导入另一个函数。但是,我发现在第二个文件中运行该函数不会创建全局变量。我尝试创建另一个具有相同名称的变量,但是当我打印出该变量时,它将打印出第二个文件的值,而不是全局值 globals.py main.py 这将打印0。如果我没有main,程序将出错(值未定义)。 如果我在函数外部声明,将采用global的值,而不是在中设置的

  • 变量作用域 变量的作用域值的是变量的生命周期和作用范围(全局与局部作用域的区别)。 作用域介绍 静态作用域 静态作用域有称为词法作用域,即指其在编译的阶段就可以决定变量的引用。静态作用域只更变量定义的位置有关与代码执行的顺序无关。 var x = 0; function foo() { alert(x); } function bar() { var x = 20; foo(); }

  • 任何编程中的范围都是程序的一个区域,其中定义的变量可以存在,并且超出该变量无法访问。 有三个地方,其中变量可以用Pascal编程语言声明 - 在子程序或块中,称为局部变量 在所有子程序之外,称为全局变量 在子程序参数的定义中称为形式参数 让我们解释什么是local和global变量和形式参数。 局部变量 (Local Variables) 在子程序或块内声明的变量称为局部变量。 它们只能由子程序或

  • 如果你之前用过像Python或者Ruby之类的动态语言,现在你可能已经熟悉了Vim脚本的变量。你会发现Vim变量的大部分内容跟你想的一样,不过有一个东西可能会不同,那就是变量的作用域。 在两个分隔的窗口中分别打开两个不同的文件,然后在其中一个窗口中执行下面的命令: :::vim :let b:hello = "world" :echo b:hello 如你所愿,Vim会显示world。现在切换到

  • 主要内容:Python局部变量,Python全局变量,获取指定作用域范围中的变量所谓 作用域(Scope),就是变量的有效范围,就是变量可以在哪个范围以内使用。有些变量可以在整段代码的任意位置使用,有些变量只能在函数内部使用,有些变量只能在 for 循环内部使用。 变量的作用域由变量的定义位置决定,在不同位置定义的变量,它的作用域是不一样的。本节我们只讲解两种变量, 局部变量和 全局变量。 Python局部变量 在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能

  • 主要内容:成员变量,局部变量变量的作用域规定了变量所能使用的范围,只有在作用域范围内变量才能被使用。根据变量声明地点的不同,变量的作用域也不同。 根据作用域的不同,一般将变量分为不同的类型:成员变量和局部变量。下面对这几种变量进行详细说明。 成员变量 Java 的成员变量有两种,分别是全局变量和静态变量(类变量)。定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类。 名称 修饰 访问 生命周期 全局变量(实例变量)