Python 是最优雅、最干净的编程语言之一,但拥有漂亮、干净的语法并不等同于编写干净的代码。开发人员仍然需要学习 Python 最佳实践和设计模式来编写干净的代码
什么是清洁代码?
比雅尼·斯特劳斯特鲁普 C++程式语言的发明者这句话清楚地解释了清洁代码的含义:
“我希望我的代码优雅而高效。逻辑应该简单明了,使 bug 难以隐藏,使依赖性最小化,以便于维护,根据清晰的策略完成错误处理,并且性能接近最佳,这样就不会诱使人们用无原则的优化把代码搞得一团糟。干净的代码能做好一件事。”
从这句话中,我们可以挑选出一些干净代码的特性:
- 干净的代码是集中.每个函数、类或模块都应该做一件事,并且做好它
- 清洁代码很容易调试
- 清洁代码易于维护 也就是说,它可以很容易地被其他开发人员阅读和增强
- 干净的代码具有很高的性能
嗯,开发人员可以随心所欲地编写代码,因为没有固定的或有约束力的规则强迫他/她编写干净的代码。然而,糟糕的代码可能导致技术债务,这可能对公司产生严重的后果。因此,这是编写干净代码的警告。
用 Python 编写干净代码的模式
变数命名原则
命名约定是编写干净代码最有用和最重要的方面之一。在命名变量、函数、类等时,使用有意义的名称,以揭示意图。这意味着我们更喜欢长的描述性名称而不是短的模棱两可的名称。
下面是一些例子:
1.使用容易阅读的长描述性名称。这样就不需要写下面这些不必要的评论了:
Python
# Not recommendedbr# The au variable is the number of active usersbrau = 105brbr# Recommended brtotal_active_users = 105
2.使用描述性意图揭示名称。其他开发人员应该能够从名称中找出变量存储的内容。简而言之,您的代码应该易于阅读和推理。
Python
# Not recommendedbrc = [“UK”, “USA”, “UAE”]brbrfor x in c:brprint(x)brbr# Recommendedbrcities = [“UK”, “USA”, “UAE”]br for city in cities:br print(city)
3. 避免使用含糊不清的速记。变量应该有一个长的描述性名称,而不是一个短的令人困惑的名称。
Python
# Not recommendedbrfn = 'John'brLn = ‘Doe’brcre_tmstp = 1621535852brbr# Recommendedbrfirst_name = ‘JOhn’brLas_name = ‘Doe’brcreation_timestamp = 1621535852
4.总是使用相同的词汇。与你的变数命名原则保持一致。保持一致的变数命名原则对于消除其他开发人员在编写代码时的混淆非常重要。这适用于命名变量、文件、函数甚至目录结构。
Python
# Not recommendedbrclient_first_name = ‘John’brcustomer_last_name = ‘Doe;brbr# Recommendedbrclient_first_name = ‘John’brclient_last_name = ‘Doe’brbrAlso, consider this example:br#bad codebrdef fetch_clients(response, variable):
你可以使用各种工具来跟踪你的技术债务,但是最快也是最简单的方法是使用 VSCode 或 JetBrains 的免费步长扩展,它们集成了 Jira、凌力、 Asana 和其他项目管理工具。
6.别用魔法数字。神奇数字是具有特殊硬编码语义的数字,出现在代码中,但没有任何意义或解释。通常,这些数字在代码中的多个位置显示为文本。
Python
import randombrbr# Not recommendedbrdef roll_dice():br return random.randint(0, 4) # what is 4 supposed to represent?brbr# RecommendedbrDICE_SIDES = 4brbrdef roll_dice():br return random.randint(0, DICE_SIDES)
Functions
7.与你的功能变数命名原则保持一致。从上面的变量可以看出,在命名函数时要遵循一个变数命名原则。使用不同的命名约定会使其他开发人员感到困惑。
Python
# Not recommendedbrdef get_users(): br # do somethingbr Passbrbrdef fetch_user(id): br # do somethingbr Passbrbrdef get_posts(): br # do something
8.函数应该做一件事,并且做好它。编写执行单个任务的简短函数。一个需要注意的经验法则是,如果函数名包含“ and”,则可能需要将其拆分为两个函数。
Python
# Not recommendedbrdef fetch_and_display_users():brusers = [] # result from some api callbrbr for user in users:br print(user)brbrbr# Recommendedbrdef fetch_usersl():br users = [] # result from some api call
9.不要使用标志或布尔标志。布尔标志是保存布尔值的变量ーー true 或 false。这些标志被传递给函数,并由函数用来确定其行为。
Python
text = "Python is a simple and elegant programming language."brbr# Not recommendedbrdef transform_text(text, uppercase):br if uppercase:br return text.upper()br else:br return text.lower()brbruppercase_text = transform_text(text, True)brlowercase_text = transform_text(text, False)brbrbr# Recommendedbrdef transform_to_uppercase(text):br return text.upper()brbrdef transform_to_lowercase(text):br return text.lower()brbruppercase_text = transform_to_uppercase(text)brlowercase_text = transform_to_lowercase(text)
Classes:
10. 不要添加冗余上下文。在处理类时,可能会在变量名中添加不必要的变量。
Python
# Not recommendedbrclass Person:br def __init__(self, person_username, person_email, person_phone, person_address):br self.person_username = person_usernamebr self.person_email = person_emailbr self.person_phone = person_phonebr self.person_address = person_addressbrbr# Recommendedbrclass Person:br def __init__(self, username, email, phone, address):
在上面的示例中,因为我们已经在 Person 类中,所以不需要将 Person _ prefix 添加到每个 class 变量中。
Bonus: 模块化代码:
为了保持代码的组织性和可维护性,请将逻辑分割为不同的文件或称为模块的类。Python 中的模块只是一个以。Py 分机。每个模块都应该专注于做好一件事情。
您可以遵循面向对象ーー OOP 原则,比如遵循基本的 OOP 原则,如封装、抽象、继承和多态性。
结论
编写干净的代码有很多好处: 提高软件质量、代码可维护性和消除技术债务。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!