从整洁代码角度,Python函数传对象还是传参数更优?需担忧性能吗?
问题分析与解答
先修正代码中的语法问题
原代码存在几处语法错误,修正后再展开讨论:
# 类定义(修正:属性需在__init__方法中初始化) class Test: def __init__(self, model, type, version): self.model = model self.type = type self.version = version # ... 其他属性或方法 test = Test("model_x", "type_y", "v1") # 函数定义(修正:if语句末尾加冒号,修正get_type_1中version的引用错误) def get_type_1(test): if test.model == "something" and test.type == "something" and test.version == "something": return "value" def get_type_2(model, type, version): if model == "something" and type == "something" and version == "something": return "value"
从整洁代码角度,优先选择get_type_1风格的函数
核心原因如下:
- 语义清晰,避免参数混乱:传递
Test对象比零散传三个参数更直观,一眼就能看出函数是在处理这个实体的属性,不会出现参数顺序传错(比如把model和type搞混)的问题,也不用每次调用都重复凑齐多个参数。 - 风格统一,减少认知负担:不管参数数量多少,都用传递实体对象的方式,能直接解决你现在遇到的“逻辑混乱”问题,团队协作时也能保持代码风格一致。
- 扩展性更强:如果后续
Test类新增属性(比如release_date),get_type_1不需要修改参数列表,只需要调整内部判断逻辑即可;而get_type_2必须修改参数,所有调用它的地方也要跟着改,维护成本更高。
Python中频繁传递类对象的性能问题
完全不需要担心:
- Python里传递对象是传引用,不是拷贝整个对象的内存数据,本质上只是传递一个内存地址(占用极小内存空间),速度和传递普通变量(比如字符串、整数)几乎没有区别。
- 只有当你主动调用拷贝方法(比如
copy.deepcopy())时,才会产生额外的内存开销和性能损耗,单纯传递对象引用不会有任何问题,就算频繁传递也不会成为性能瓶颈。
内容的提问来源于stack exchange,提问作者Marcin Kamienski
相关产品推荐
相关产品推荐

