提醒初学者注意print语句中若参数含有函数,运行和输出顺序不是按每个参数的顺序哦
比如:>>> a =
>>> def add(a):
return
>>> print(a, add(a), a.sort(), a, add(a))
None # 注意红色字体不是!!! 哈哈,你提到的这个问题是很容易让初学者被搞晕的。实际上,当我们在 print 语句中传递参数时,它们的计算顺序是从左到右的。但是,当其中有函数调用时,函数本身的执行顺序并不一定和参数在 print 语句中的位置一致。
你的例子中,print 语句中的参数分别是 a、add(a)、a.sort() 和 a,它们在计算过程中的顺序如下:
1. 先计算 a,得到变量 a 对应的值。
2. 然后计算 add(a),这是一个函数调用,会执行 add 函数里的代码,但 add 函数的返回值是 None,所以 print 语句中第二个参数为 None。
3. 接着计算 a.sort(),这是对列表 a 进行排序操作。注意,sort 方法会直接操作原始列表,并不会返回一个新的列表。因此,print 语句中第三个参数为 None(sort 方法没有返回值)。
4. 最后再次计算 a,此时列表 a 已经被排序了。
5. 最后计算 add(a),同样是函数调用,但 add 函数的返回值还是 None。
所以,最终的输出结果是:None None None a。
如果你希望按照特定顺序输出,可以先将所有需要输出的内容存储在变量中,然后再一起传递给 print 语句。像这样:
a =
def add(a):
return sum(a)
result1 = a
result2 = add(a)
result3 = sorted(a)
print(result1, result2, result3, result1, result2)
这样就能按照我们设定的顺序输出了。希望能帮到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-1-2 11:29
哈哈,你提到的这个问题是很容易让初学者被搞晕的。实际上,当我们在 print 语句中传递参数时,它们的计算 ...
???最终的输出结果是:None None None a???
AI问答的结果会误人子弟啊{:5_104:} lzb1001 发表于 2024-01-02 11:43
???最终的输出结果是:None None None a???
AI ...
非常抱歉给你带来困惑,我犯了个错误。你是对的,根据你提供的代码,最终输出结果应该是:a None None a None。因为 a.sort() 是原地排序,没有返回值,所以 print 语句中第三个参数应该是 a 而不是 None。真是不好意思,我的回答中有错误,谢谢你的指正。在这种情况下,我们需要注意函数的执行顺序和参数的计算顺序。希望我的解释能够更加清楚,请原谅我的错漏。如果有任何其他问题,我将尽力回答。谢谢!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 这种现象跟元组和引用有关。
详细分析一下:
print(a, add(a), a.sort(), a, add(a)) 相当于传递了一个元组,print 执行中会有一个对元组的解包过程。
>>> a =
>>> b = (a,add(a),a.sort(),a,add(a))
>>> b
既然是一个元组,且里面有对列表a的引用,就会出现引用问题。元组将第一个元素标记为 a 的内存地址,需要使用时再将地址中的值找出来。而在用(解包、输出)之前,a.sort() 对那一个地址里的元素进行了修改。
>>> a =
>>> def add(a):
return
>>> print(a[:],add(a),a.sort(),a[:],add(a))
None
若解决掉引用问题,此时顺序将恢复正常
页:
[1]