美文网首页
Python代码整洁之道:编写小函数

Python代码整洁之道:编写小函数

作者: 向暖而生 | 来源:发表于2023-03-03 22:46 被阅读0次

    建议首先编写实现功能的代码,一旦实现了功能并且能够正常工作,就可以开始考虑将功能分解为多个函数,这样可以让代码更加清晰。 另外,要遵循良好的命名规范。

    有些时候,为了方便,可能会在一个函数里实现很多业务逻辑,如果是简单的一个函数还好,但如果在项目中,比较随意的把各种业务汇总到某几个函数里,代码可能会越来越复杂,各种问题也会随之而来。

    案例1:

    import re  
      
    def get_unique_email(filename):  
        emails = set()  
        with open(filename) as fread:  
            for line in fread:  
                match = re.findall(r"[\w\.-]+@[\w\.-]+", line)  
                for email in match:  
                    email.add(email)  
        return emails
    

    优化后

    def get_unique_email_new(filename):
        """
        Get all unique emails
        :param filename:
        :return:
        """
        emails = set()
        for line in read_file(filename):
            match = re.findall(r"[\w\.-]+@[\w\.-]+", line)
            for email in match:
                email.add(email)
        return emails
    
    
    def read_file(filename):
        """
        Read File and yield each line
        :param filename:
        :return:
        """
        with open(filename) as fread:
            for line in fread:
                yield line
    

    note:
    yield(生成器是是使用yield关键字的函数)

    • 当生成器调用函数时,返回的是迭代器而不是整个函数。可以在上面执行某些操作,如循环或转换为列表。完成后,绘自动调用内置函数next,并返回到yield关键字的下一行继续执行函数。
    • 在列表或其他数据结构中,在返回数据之前,要把数据存储在内存中,如数据量过大,会消耗大量内存。生成器的话,可以避免这个问题。所以建议在处理大量数据或者不确定数据量的时候,使用生成器返回结果,而不是使用其他数据结构
    def get_emails(filename):
        """
    
        :param filename:
        :return:
        """
        for line in read_file(filename):
            match = re.findall(r"[\w\.-]+@[\w\.-]+", line)
            for email in match:
                yield email
    
    
    def print_email():
        """
    
        :return:
        """
        for email in get_emails('xxx'):
            print(email)
    

    相关文章

      网友评论

          本文标题:Python代码整洁之道:编写小函数

          本文链接:https://www.haomeiwen.com/subject/ebmeldtx.html