Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果使用列表理解,为什么函数不更新列表,但在使用for循环时会更新列表_Python - Fatal编程技术网

Python 如果使用列表理解,为什么函数不更新列表,但在使用for循环时会更新列表

Python 如果使用列表理解,为什么函数不更新列表,但在使用for循环时会更新列表,python,Python,这是我的计算机科学课程中的一个问题,我不明白为什么列表没有在函数中更新 在下面的代码中,我在测试期间提出了函数\u not \u working,但没有时间找到另一个解决方案,我的朋友代码,函数\u working工作正常,但在函数内打印“字符串”时,两者都返回正确的列表更新 def函数不工作(字符串): strings=[string[::-1].lower()表示字符串中的字符串] def功能_工作(字符串): 对于范围(0,len(字符串))中的n: new_string=strings[

这是我的计算机科学课程中的一个问题,我不明白为什么列表没有在函数中更新

在下面的代码中,我在测试期间提出了函数\u not \u working,但没有时间找到另一个解决方案,我的朋友代码,函数\u working工作正常,但在函数内打印“字符串”时,两者都返回正确的列表更新

def函数不工作(字符串):
strings=[string[::-1].lower()表示字符串中的字符串]
def功能_工作(字符串):
对于范围(0,len(字符串))中的n:
new_string=strings[n].lower()
新字符串=新字符串[:-1]
字符串[n]=新的\u字符串
#编辑:下面的部分是测试的一部分,不能编辑
字符串=[“ABC”、“ABC”、“ABC”]
函数(字符串)
打印(字符串)
对于不工作的功能 预期:['cba'、'cba'、'cba']
实际:[“ABC”、“ABC”、“ABC”]

函数中\u不工作您正在创建另一个列表,该列表不引用通过该函数的列表。这就是它不更新字符串列表的原因。在函数\u工作时引用的列表与作为参数传递的列表相同

要使功能不工作,请查找以下代码:

def function_not_working(strings):
    strings = [string[::-1].lower() for string in strings]
    return strings

strings = ["ABC", "aBc", "abc"]
strings = function_not_working(strings)
print(strings)

我希望您能得到答案

字符串
函数中的一个局部变量\u not \u working()
。在那里声明它
global
。很抱歉,我应该在帖子中更具体一点,代码的底部,没有函数的位不是答案的一部分,而是答案测试的一部分,因为它无法编辑。谢谢,我知道它是如何工作的,但仍然不明白为什么在创建新列表并将其分配给字符串时,它在第一个placeIn函数中不起作用,该字符串创建了新的名称字符串列表,而不是更新全局字符串列表我正在更新我的答案您将得到您想要的结果@ceb@ceb你熟悉C还是C++?@马丁博纳,第一年计算机科学课程只涵盖Python,C++或C++能够提供一个很好的方法来理解全局变量和局部变量是如何不同的?我应该看一下。不同之处在于,在一个函数中,您正在更改局部变量
strings
引用的对象,而在另一个函数中,您正在更改现有对象中的值。因为全局
strings
也引用了这个(已更改的)对象,所以您可以看到测试代码中的更改。
def function_not_working():
    global strings
    strings = [string[::-1].lower() for string in strings]


def function_working(strings):
    for n in range(0, len(strings)):
        new_string = strings[n].lower()
        new_string = new_string[::-1]
        strings[n] = new_string


strings = ["ABC", "aBc", "abc"]
function_not_working()
print(strings)