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

是否可以在外部范围而不是全局范围内的python中修改变量?

夔宏深
2023-03-14
问题内容

给定以下代码:

def A() :
    b = 1

    def B() :
        # I can access 'b' from here.
        print( b )
        # But can i modify 'b' here? 'global' and assignment will not work.

    B()
A()

因为B()函数变量中的代码在b外部范围内,但不在全局范围内。是否可以bB()函数内修改变量?我当然可以从和阅读print(),但是如何修改?


问题答案:

Python
3.x具有nonlocal关键字。我认为这可以满足您的要求,但是我不确定您是在运行python 2还是3。

非本地语句使列出的标识符引用最近的封闭范围中的先前绑定的变量。这很重要,因为绑定的默认行为是首先搜索本地名称空间。该语句允许封装的代码在全局(模块)范围之外的本地范围之外重新绑定变量。

对于python 2,我通常只使用可变对象(如列表或dict),然后更改值而不是重新分配。

例:

def foo():
    a = []
    def bar():
        a.append(1)
    bar()
    bar()
    print a

foo()

输出:

[1, 1]


 类似资料:
  • 问题内容: 首先,我想说我想做的事情可能不被认为是好的做法。但是,我需要执行类似的操作,以便以较小的增量步骤将大型Web应用程序迁移到AngularJs。 我试着做 其中myVar是全局变量(在窗口上定义) 然后从控制台更改myVar。但是只有在首次设置观察者时才会触发。 如果我从控制器内部更新myVar(请参阅http://jsfiddle.net/rasmusvhansen/vsDXz/3/)

  • 问题内容: 我有一个可选参数,它本身支持参数列表。 我的意思是,它应该支持: -f 1 2 -f 1 2 3 但不是: -f 1 -f 1 2 3 4 有没有办法在argparse中强制执行此操作?现在,我使用nargs =“ *”,然后检查列表长度。 编辑: 根据要求,我需要的是能够定义一个可接受数量的参数范围。我的意思是说(在示例中)2或3个args是正确的,但不是1或4或不在2..3范围内的

  • 问题内容: 我需要从指令中的父控制器继承范围。我不一定要离开范围:false。我也不一定要使用孤立的作用域,因为要获得我确实关心的值正确链接(需要在父控制器中考虑很多值),就需要大量的工作。 如果要更新父范围,在我的指令中使用是否有意义? 请检查小提琴 问题答案: 尽管@user1737909已经引用了SO问题来阅读(AngularJS中范围原型/原型继承的细微差别是什么?它将解释该问题并建议各种

  • 我的Java外汇应用程序处理工作时间。我在两个日期字段中有工作开始和结束时间。我成功地计算了两个日期之间的差异时间;但是现在我如何检查结果是在晚上还是白天的范围内???一天从6点开始,到22点结束。例如,有人在凌晨3点到晚上11点之间工作。下面是我如何计算总工作小时数的。 我们有可以工作到晚上10点以上的工人,工资也不一样。如果他们在晚上10点以后工作,他们将获得特殊报酬。我们在工作结束时付款。他

  • 问题内容: 在玩过Go HTML模板后,我发现所有用于遍历模板中对象的示例都是将切片的结构传递给模板,有点像此示例中所示: 其中“主要”模板为: 这有效,但是如果我仅使用.Name属性,则我不明白如何在每个ID旁边显示每个ID。我会发现在显示时将每个用户视为一个对象来对其属性进行分组会更合乎逻辑。 因此,我的问题是: 如果我想将结构片段传递给模板怎么办? 使它起作用的语法是什么?我尚未在官方htm

  • 我想在foreach内部的模型中传递一个数组的范围。 我重新创建了一个示例: 周围的工作 我发现是传递所有的列表,并在子视图内部执行范围。但我不想这样做,因为数组非常大: