编写Python代码的10大习惯

在这里插入图片描述

1. 遵循PEP 8风格指南

理论知识:PEP 8是Python官方推荐的代码风格指南,它包含了命名规则、缩进、空格、行长度等建议。

实践示例

# 不好的写法  
def  my_function  (   x  ,  y  ) :  
    return x + y  
  
# 好的写法(遵循PEP 8)  
def my_function(x, y):  
    return x + y  

2. 使用列表推导式

理论知识:列表推导式是一种简洁地创建列表的方法,可以替代循环和条件语句。

实践示例

# 不好的写法  
squares = []  
for x in range(10):  
    squares.append(x ** 2)  
  
# 好的写法  
squares = [x ** 2 for x in range(10)]  

3. 利用f-string进行字符串格式化

理论知识:f-string是从Python 3.6开始引入的一种字符串格式化方式,更加直观且性能更好。

实践示例

name = "Alice"  
age = 25  
  
# 不好的写法  
message = "My name is %s and I am %d years old." % (name, age)  
  
# 好的写法  
message = f"My name is {name} and I am {age} years old."  

4. 尽量避免全局变量

理论知识:全局变量容易引起混乱,尤其是在大型项目中。使用局部变量可以减少错误和调试时间。

实践示例

# 不好的写法  
count = 0  
  
def increment():  
    global count  
    count += 1  
  
# 好的写法  
def increment(count):  
    return count + 1  

5. 使用异常处理

理论知识:异常处理可以让程序在遇到错误时优雅地失败,而不是崩溃。

实践示例

try:  
    result = 10 / 0  
except ZeroDivisionError:  
    print("Cannot divide by zero.")  

6. 使用生成器表达式

理论知识:生成器表达式类似于列表推导式,但返回的是一个迭代器,节省内存。

实践示例

# 不好的写法  
numbers = [x * 2 for x in range(1000000)]  
  
# 好的写法  
numbers = (x * 2 for x in range(1000000))  

7. 代码重构和模块化

理论知识:重构代码可以提高其质量和可维护性。模块化则是将代码分解为独立的、可重用的部分。

实践示例

# 不好的写法  
def calculate_area(radius):  
    pi = 3.14  
    return pi * radius * radius  
  
# 好的写法  
pi = 3.14  
  
def calculate_area(radius):  
    return pi * radius * radius  

这里,我们可以进一步将pi定义在一个单独的模块中,供多个函数使用。

8. 注释和文档字符串

理论知识:良好的注释和文档字符串可以提高代码的可读性和可维护性。

实践示例

def calculate_area(radius):  
    """  
    Calculate the area of a circle.  
      
    Args:  
        radius (float): The radius of the circle.  
          
    Returns:  
        float: The area of the circle.  
    """  
    return pi * radius * radius  

9. 使用类型注解

理论知识:类型注解可以帮助IDE和linter更好地理解和检查代码。

实践示例

def greet(name: str) -> str:  
    return f"Hello, {name}"  

10. 单元测试

理论知识:单元测试可以确保代码的各个部分按预期工作,减少未来的bug。

实践示例

import unittest  
  
class TestMathFunctions(unittest.TestCase):  
    def test_calculate_area(self):  
        self.assertEqual(calculate_area(1), 3.14)  
  
if __name__ == "__main__":  
    unittest.main()  

通过遵循这些习惯,你将能够写出更加清晰、高效和易于维护的Python代码。


继续深入:实战案例分析

让我们通过一个实战案例来深入理解如何综合运用上述习惯,以提升代码的优雅度。

案例:文本分析工具

假设我们需要开发一个简单的文本分析工具,用于统计文本文件中的单词数量。我们将逐步应用上述习惯来优化代码。

步骤1:读取文件并统计单词

首先,我们实现基本的功能,即读取文件并统计其中的单词数量。

不优雅的代码

def word_count(filename):  
    with open(filename, 'r') as file:  
        text = file.read()  
        words = text.split()  
        return len(words)  

改进后的代码

  • 应用PEP 8风格指南。

  • 引入异常处理,使程序更加健壮。

  • 添加类型注解,提高代码可读性。

from typing import TextIO  
  
def word_count(filename: str) -> int:  
    """Counts the number of words in a given file."""  
    try:  
        with open(filename, 'r') as file:  # type: TextIO  
            text = file.read()  
            words = text.split()  
            return len(words)  
    except FileNotFoundError:  
        print(f"The file {filename} does not exist.")  
        return 0  

步骤2:增加功能和模块化

接下来,我们希望扩展工具的功能,包括计算平均单词长度和最常出现的单词。同时,我们将代码模块化,使其更易于维护。

不优雅的代码

def main():  
    filename = "example.txt"  
    print(f"Word count: {word_count(filename)}")  
    print(f"Average word length: {average_word_length(filename)}")  
    print(f"Most common word: {most_common_word(filename)}")  

改进后的代码

  • 将每个功能封装到单独的函数中,提高模块化。

  • 使用生成器表达式来计算平均单词长度,节省内存。

def average_word_length(filename: str) -> float:  
    """Calculates the average word length in a given file."""  
    with open(filename, 'r') as file:  
        words = (len(word) for line in file for word in line.split())  
        return sum(words) / word_count(filename)  
  
def most_common_word(filename: str) -> str:  
    """Finds the most common word in a given file."""  
    from collections import Counter  
    with open(filename, 'r') as file:  
        words = (word for line in file for word in line.split())  
        return Counter(words).most_common(1)[0][0]  
  
def main():  
    filename = "example.txt"  
    print(f"Word count: {word_count(filename)}")  
    print(f"Average word length: {average_word_length(filename)}")  
    print(f"Most common word: {most_common_word(filename)}")  

步骤3:添加单元测试

最后,我们编写单元测试以确保所有功能正常运行。

测试代码

import unittest  
  
class TestTextAnalyzer(unittest.TestCase):  
    def setUp(self):  
        self.filename = "test.txt"  
        with open(self.filename, 'w') as file:  
            file.write("This is a test text. This text contains some words.")  
  
    def tearDown(self):  
        import os  
        os.remove(self.filename)  
  
    def test_word_count(self):  
        self.assertEqual(word_count(self.filename), 10)  
  
    def test_average_word_length(self):  
        self.assertEqual(average_word_length(self.filename), 4.0)  
  
    def test_most_common_word(self):  
        self.assertEqual(most_common_word(self.filename), "this")  
  
if __name__ == "__main__":  
    unittest.main()  

通过这个案例,我们看到了如何将上述习惯应用于实际编程场景中,从而编写出既优雅又高效的代码。

关于Python技术储备

由于文章篇幅有限,文档资料内容较多,需要这些文档的朋友,可以加小助手微信免费获取,【保证100%免费】,中国人不骗中国人。

在这里插入图片描述

                                     **(扫码立即免费领取)**

全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

如有侵权,请联系删除。

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值