python - 在不使用全局变量的情况下保存函数的数据

标签 python function

下面是我尝试的功能:

 def function(x):
        list1 = []
        if("word" in x):
          print("Option 1: XXX, Option 2: YYY ...")
          list1.extend(input("Enter a word: "))

我在这里尝试做的是将值 X 与我选择的字符串(向用户提出的问题)放在一起,然后让用户输入他们的答案。然后我想将该答案添加到一个不是全局变量的列表中(因为这是我要避免的要点),而不是每次调用此函数时都删除该列表;因为我想针对几个问题多次调用 function(x)。完成此操作后,我还需要能够提取此列表并将其传递给另一个函数,以便可以对用户答案进行数学运算等。

有什么建议吗?如果您也能解释发生了什么,我将非常感激,因为我正在努力了解这里实际发生的事情。有人告诉我,将列表放在函数参数中是有效的(确实如此),但这不允许我稍后获取列表并对它做一些事情(这显然是 python 中的一个错误)。为此运行一个循环也无济于事。

编辑:我会在几个小时后回来,然后标记答案;还没有通读所有内容,但到目前为止,我认为我已经掌握了它。

最佳答案

我想你要找的东西在像 C 这样的语言中被称为 static 。Python 不需要这样的关键字,因为它非常灵活。实现它的一种方法是使用保持封装的闭包。您会注意到 setupf 函数返回两个内部函数,它们的名称可以是任何合法的名称。

def setupf():
    list1 = []    # This is the "static" variable

    def internal(x):
        if ("word" in x):
            print("Option 1: XXX, Option 2: YYY ...")
            list1.append(input("Enter a word: "))

    def getit():
        return list1

    return internal, getit


function, getlist = setupf()

function("word")
function("word")
function("word")
function("word")

print(getlist())

给予:

Option 1: XXX, Option 2: YYY ...
Enter a word: hello
Option 1: XXX, Option 2: YYY ...
Enter a word: goodbye 
Option 1: XXX, Option 2: YYY ...
Enter a word: stuff
Option 1: XXX, Option 2: YYY ...
Enter a word: another
['hello', 'goodbye', 'stuff', 'another']

您可能会注意到我将 .extend 替换为 .append - 在 Python 的 C 实现中使用 .append 效率更高,因为列表的实现方式。

我对“单词”的测试感到困惑,也许你能解释一下。

关于python - 在不使用全局变量的情况下保存函数的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43016772/

相关文章:

c++ - 在C++线程内调用类的方法

javascript - 悬停时在 div 中的两个范围之间切换

r - 使用 while 循环计算 R 函数

Python 3.4 : creating an asterisk diamond

python - Sphinx 文档在本地有效,但无法阅读文档

python - 为什么这个带有线程的 Popen 不起作用?

python - 从 GroupBy 对象中的组中获取除前 k 行以外的所有行

python - Python 模块名称前的前导下划线

linux - 前置符号链接(symbolic link)文件名

javascript - 如何在javascript中应用带有功能的复选框?