为何部分对象方法可赋值给变量,部分却不可?
Python方法赋值差异的原因
这本质是Python方法的两种设计逻辑:返回新对象和原地修改(in-place),两者的行为决定了能否把调用结果赋值给变量。
返回新对象的方法
像readlines()这类方法,调用时会生成一个全新的对象并返回。你拿到的返回值是独立于原对象的新数据,因此可以直接赋值给变量。
示例代码:
with open('test.py', 'r') as file: f = file.readlines()
这里f接收的是方法返回的、包含文件每行内容的新列表,原文件对象不会被这个返回值影响。
原地修改的方法
列表的sort()属于原地修改方法,这类方法的作用是直接修改调用它的原对象本身,不会返回新的有效数据(实际返回None)。如果把这类方法的调用结果赋值给变量,变量得到的只会是None,而原对象已经被修改完成。
错误示例:
cars = ['Ford', 'BMW', 'Volvo'] y = cars.sort() print(y) # 输出 None
正确写法是直接调用方法,之后使用被修改后的原对象:
cars = ['Ford', 'BMW', 'Volvo'] cars.sort() print(cars) # 输出 ['BMW', 'Ford', 'Volvo']
额外补充:Python里可变容器(如列表、字典)的很多方法都是原地修改的,比如列表的append()、字典的update()。如果需要获取修改后的新对象而不改动原数据,可以用对应的非原地替代方案,比如列表的sorted()函数:
cars = ['Ford', 'BMW', 'Volvo'] y = sorted(cars) print(y) # 输出新排序后的列表 print(cars) # 原列表保持不变
内容的提问来源于stack exchange,提问作者Hardliner
相关产品推荐
相关产品推荐

