提升 Python 代码水平的 5 个方法

B站影视 2025-01-17 10:13 1

摘要:from datetime import datetimedef is_legal_age(dob_str): """Checks if a person with the given DOB is a legal adult (18+). Args: dob

这是原始函数:

from datetime import datetimedef is_legal_age(dob_str): """Checks if a person with the given DOB is a legal adult (18+). Args: dob_str: The date of birth in the format YYYY-MM-DD. Returns: True if the person is a legal adult, False otherwise. """ try: dob = datetime.strptime(dob_str, '%Y-%m-%d') except ValueError: return False today = datetime.today age = today.year - dob.year - ((today.month, today.day) = 18

虽然该代码片段很实用,但仍有改进的空间。让我们深入探讨可以进行增强以符合 Python 最佳实践的五个领域。

添加类型提示可以使函数的签名更具描述性且更易于理解。它阐明了预期的输入和输出类型,这在协作或维护代码时特别有用。

长的、嵌套的计算可能难以阅读和调试。将它们分解为更小的变量可以增强可读性。

原始片段:

age = today.year - dob.year - ((today.month, today.day)

改进版本:

is_before_birthday = (today.month, today.day)

现在,每个变量代表计算中的一个不同步骤,使逻辑更加清晰。

过长的功能可能难以在屏幕上显示,从而更难掌握整体逻辑。通过整合相关逻辑并利用Python的特性,我们可以在不牺牲清晰度的情况下保持函数简洁。

例子:

from datetime import datetimedef is_legal_age(dob: str) -> bool: """Checks if a person with the given DOB is a legal adult (18+).""" try: dob = datetime.strptime(dob, '%Y-%m-%d') except ValueError: return False today = datetime.today is_before_birthday = (today.month, today.day) = 18

该版本足够短,可以适应标准屏幕尺寸,同时保持易于阅读。

对于无效日期返回False是可行的,但并不理想。最好通过提出异常或记录问题来提供有意义的反馈。这使得调试更加容易,并有助于确保正确使用该函数。

改进的错误处理:

try: dob = datetime.strptime(dob, '%Y-%m-%d')except ValueError as e: raise ValueError(f"Invalid format:{dob} Expected YYYY-MM-DD.") from e

现在,错误消息明确指出出了什么问题,从而改善了用户反馈。

文档字符串应该简洁但信息丰富。使用它们以对读者立即有用的方式描述函数的目的、参数和返回值。

更新的文档字符串:

"""Determine if a person is a legal adult based on their date of birth. Args: dob: The date of birth as a string in YYYY-MM-DD format. Returns: True if the person is 18 years or older, False otherwise. Raises: ValueError: If the date of birth is not in the expected format. """

此更新的文档字符串删除了冗余并明确提及了引发的异常。

这是完全更新和完善的功能:

from datetime import datetimedef is_legal_age(dob: str) -> bool: """Determine if a person is a legal adult based on their date of birth. Args: dob: The date of birth as a string in YYYY-MM-DD format. Returns: True if the person is 18 years or older, False otherwise. Raises: ValueError: If the date of birth is not in the expected format. """ try: dob = datetime.strptime(dob, '%Y-%m-%d') except ValueError as e: raise ValueError(f"Invalid format:{dob} Expected YYYY-MM-DD.") from e today = datetime.today is_before_birthday = (today.month, today.day) = 18

编写干净的 Python 代码是一个不断完善的过程。通过添加类型提示、分解复杂逻辑、缩短函数长度、优雅地处理错误以及改进文档字符串,您可以提高代码质量。这些原则不仅使您的代码更加 Pythonic,而且还确保从长远来看更容易维护和调试。

来源:自由坦荡的湖泊AI

相关推荐