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

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

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

案例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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容