美文网首页
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