微信扫码
添加专属顾问
我要投稿
别再误用Python函数!掌握这三个关键技巧,让你的代码更高效、更易维护。 核心内容: 1. 避免使用可变对象作为默认参数 2. 保持函数返回值类型一致 3. 遵循单一职责原则,保持函数精简
写出更简洁、更聪明的 Python 函数!
别再用错误的方式写 Python 函数!改用这些做法!
Python 是一门很棒的语言——简单、优雅、易上手。但人人都会犯错:很多开发者(包括老手)在写函数时不经意会犯一些小错。这些错误眼下也许不会让你的代码崩溃,但随着代码库老化,它们会让代码变得又慢、又笨、甚至烂得让人瞠目结舌。
如果你一直把写 Python 函数当成“能跑就行”,现在该进阶了。是时候了解常见坑,并用最佳实践来修正它们。
Python 在函数定义时只初始化一次默认参数,而不是在每次调用时初始化。因此,多次调用会共享同一个列表,稍有不慎就会出现意料之外的行为。
def add_item(item, items=[]):
items.append(item)
return items
print(add_item('apple')) # ['apple']
print(add_item('banana')) # ['apple', 'banana'] ???
当参数可能是可变对象时,把默认值设为 None,并在函数内部初始化。
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item('apple')) # ['apple']
print(add_item('banana')) # ['banana']
返回不一致的数据类型会让函数更难使用,也容易埋下错误的隐患。
def process(value):
if value > 10:
return "Success"
else:
return 0 # Mixing str and int
返回 None(或保持同一类型)能让函数行为更可预测、更易调试。
from typing import Optional
def process(value: int) -> Optional[str]:
return "Success" if value > 10 else None
这个函数做得太多:计算价格、加税、应用折扣、还把运费也算上。
def calculate_price(quantity, price, tax_rate, discount, shipping):
total = (quantity * price) + shipping
total += total * tax_rate
if discount:
total -= total * discount
return total
现在每个函数都只做一件事,且做到位——更容易测试、调试和复用。
def calculate_subtotal(quantity, price):
return quantity * price
defapply_tax(subtotal, tax_rate):
return subtotal + (subtotal * tax_rate)
defapply_discount(amount, discount):
return amount - (amount * discount)
defcalculate_total(quantity, price, tax_rate, discount, shipping):
subtotal = calculate_subtotal(quantity, price)
taxed_total = apply_tax(subtotal, tax_rate)
discounted_total = apply_discount(taxed_total, discount)
return discounted_total + shipping
def greet(name, age):
return "Hello, my name is %s and I am %d years old." % (name, age)
或者
def greet(name, age):
return "Hello, my name is {} and I am {} years old.".format(name, age)
def greet(name, age):
return f"Hello, my name is {name} and I am {age} years old."
f-strings 更高效、更易读,是 Python 中推荐的字符串格式化方式。
虽然能运行,但 a 和 b 是什么类型?整数?浮点?字符串?
def add_numbers(a, b):
return a + b
Type Hints 让函数更“自解释”,也能避免副作用。
def add_numbers(a: int, b: int) -> int:
return a + b
enumerate(),别手动维护索引fruits = ["Mango", "Pineapple", "Guava"]
index = 0
for fruit in fruits:
print(f"{index}: {fruit}")
index += 1
enumerate() 免去手动维护索引,让循环更简洁、更 Pythonic。
fruits = ["Mango", "Pineapple", "Guava"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
try-except 做流程控制def get_price(data):
try:
return data["price"]
except KeyError:
return 0
使用 .get() 更易读,也避免不必要的异常处理。
def get_price(data):
return data.get("price", 0)
写好 Python 函数,不只是“能跑”,还要可读、可维护、也要高效。避开这些常见坑并采用最佳实践,能让你的 Python 代码干净而专业。
既然你已经知道如何改进 Python 函数,回头把你的旧代码重构一遍吧!你会惊讶于它变得多么高效、整洁。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-09-17
2025-09-04
2025-09-02
2025-09-15
2025-09-05
2025-08-22
2025-09-18
2025-08-20
2025-10-10
2025-09-22