先给出结论
print的参数中如果有函数,会先依次运行各个函数结果,再依次输出函数和变量。
注意:如果某些函数能直接修改变量,如:
print(a, func1(a), a, func2(a), a)
那么输出的3个a:
不是
[原始a,func1返回值,func1处理后的a,func2返回值,func2处理后的a]
而是
[func1和func2处理后的a,func1返回值,func1和func2处理后的a,func2返回值,func1和func2处理后的a]
具体情况
下图中,第三行print,明明在a.sort()前后各应输出a,即sort前的a与sort后的a,但是却输出结果显示两个a的输出都是sort后的。
从此现象推断,如果print中有函数,那么会先运行函数,再依次输出。
所以先运行第一个add(a),此时a是原始值
然后运行a.sort(),对a进行排序,这导致a变成升序的a
然后运行add(a), 只是这时的a是升序的a
所有函数运算完成后,再依次输出,注意2个输出的a都会输出升序的a
进一步验证
在上图中的第三行print,末尾加入新的排序函数,检查是否这个函数的加入会对其他函数运算与a的输出带来影响。
a = [1,10,2,4]
def add(a):
return [2*i for i in a]
print(a)
# print(add(a), a)
print(add(a),a, a.sort(), a, add(a), a, a.sort(reverse=True), a, add(a))
末尾新增的输出内容为: a, a.sort(reverse=True), a, add(a))
输出显示,所有的a都是降序的a,即经过了新增的降序排列函数。