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

在函数内部使用exec设置变量

左丘耀
2023-03-14
问题内容

我刚刚开始自学Python,此脚本需要一些帮助:

old_string = "didnt work"   
new_string = "worked"

def function():
    exec("old_string = new_string")     
    print(old_string)

function()

我想得到它old_string = "worked"


问题答案:

你快到了。您正在尝试修改全局变量,因此必须添加以下global语句:

old_string = "didn't work"
new_string = "worked"

def function():
    exec("global old_string; old_string = new_string")
    print(old_string)

function()

如果运行以下版本,则会看到您的版本中发生了什么:

old_string = "didn't work"
new_string = "worked"

def function():
    _locals = locals()
    exec("old_string = new_string", globals(), _locals)
    print(old_string)
    print(_locals)

function()

输出:

didn't work
{'old_string': 'worked'}

运行它的方法,最终尝试在中修改函数的局部变量exec,这基本上是未定义的行为。请参阅exec文档中的警告:

注意: 默认 本地语言的 行为如以下功能locals()所述:不应尝试对默认 本地 字典进行修改。如果需要在函数返回后查看代码对
本地人的 影响,请传递一个明确的 本地人 字典。 __exec()

以及以下相关警告locals()

注意: 此字典的内容不得修改;更改可能不会影响解释器使用的局部变量和自由变量的值。



 类似资料:
  • 首先我想问一下这是不是可能的,设置值为全局变量在异步函数或承诺? 如果是,那么为什么每个可用的教程/网站都在教程中使用console.log(结果),但从来没有使用它将其赋值给variable。 例如:

  • 问题内容: 我正在尝试设置一个环境变量,然后将其读回以验证它是否确实被设置。 我有以下内容: 但是,它看起来总是空的,这意味着它可能设置不正确。 我的exec命令正确吗?javadocs声明它可以将字符串参数作为命令。 有任何想法吗? 问题答案: 这行不通。当您开始一个新过程时,该过程将收到环境 的副本 。然后,它对环境变量所做的任何更改都将在该副本中进行,并且在任何时候都不会对调用方可见。 您实

  • 问题内容: 我对JavaScript比较陌生,我想我知道回调函数的工作原理,但是在搜索Web几个小时后,我仍然不明白为什么我的代码不起作用。 我正在提出一个AJAX请求,该请求返回一个字符串数组。我正在尝试将此数组设置为局部变量,但是一旦执行回调函数,它似乎就失去了它的值。 在控制台中,显示为未定义。谁能向我解释为什么未设置此参数,以及如何在回调函数中设置局部变量。 问题答案: 这里的问题是aja

  • 问题内容: 我究竟做错了什么?为什么$ path在函数外部正确打印,但是在函数内部无法访问? 问题答案: 因为它没有在函数中定义。 有几种方法可以解决此问题: 1)使用亚历克斯所说的话,告诉函数它是一个全局变量: 2)将其定义为常量: 3)如果特定于该函数,则将其传递给该函数: 根据功能的实际工作原理,其中之一会起作用。

  • 问题内容: 我正在使用函数,这样我的程序就不会一团糟,但我不知道如何将局部变量变成全局变量。 问题答案: 这是两种实现相同目的的方法: 使用参数并返回(推荐) 运行时,将获得以下输出 使用全局变量(永远不要这样做) 现在您将获得:

  • 问题内容: 我需要在查询之前设置search_path。新的搜索路径应基于功能参数。我该怎么做?现在我有: 但它根本不会接受1美元。我也尝试了quote_ident($ 1),但是没有用。 谢谢! 问题答案: 我使用set_config()创建了一个纯SQL函数。 该解决方案支持在以逗号分隔的字符串中设置多个架构。默认情况下,更改适用于当前会话。将“ is_local”参数设置为true可使更改仅