python - 不同函数之间的链接输出

标签 python

我正在寻找一个过程的名称,该过程处理其他几个函数中一个函数的输出(试图为我的问题找到更好的词)。一些伪/实际代码会非常有帮助。

我编写了以下代码:

def read_data():
    read data from a file
    create df
    return df

def parse_data():
    sorted_df = read_data()
    count lines
    sort by date
    return sorted_df

def add_new_column(): 
    new_column_df = parse_data()
    add new column
    return new_column_df

def create_plot():
    plot_data = add_new_column()
    create a plot
    display chart

我想要理解的是如何跳过一个函数,例如创建以下链read_data() -> parse_data() -> create_plot()

正如代码现在看起来的那样(由于所有返回值以及它们在函数之间传递的方式),它需要我更改最后一个函数 create_plot() 中的输入数据。

我怀疑我创建了逻辑上不正确的代码。

有什么想法吗?

原始代码:

import pandas as pd
import matplotlib.pyplot as plt

# Read csv files in to data frame
def read_data():
    raw_data = pd.read_csv('C:/testdata.csv', sep=',', engine='python', encoding='utf-8-sig').replace({'{':'', '}':'', '"':'', ',':' '}, regex=True)
    return raw_data

def parse_data(parsed_data):
    ...
    # Convert CreationDate column into datetime
    raw_data['CreationDate'] = pd.to_datetime(raw_data['CreationDate'], format='%Y-%m-%d %H:%M:%S', errors='coerce')
    raw_data.sort_values(by=['CreationDate'], inplace=True, ascending=True)
    parsed_data = raw_data
    return parsed_data

raw_data = read_files()
parsed = parsed_data(raw_data)

最佳答案

传递数据而不是仅仅有效地“嵌套”所有内容。理想情况下,函数所需的任何数据都应作为参数传递给函数:

def read_data():
    read data from a file
    create df
    return df

def parse_data(sorted_df):
    count lines
    sort by date
    return sorted_df

def add_new_column(new_column_df):
    add new column
    return new_column_df

def create_plot(plot_data):  
    create a plot
    display chart

df = read_data()
parsed = parse_data(df)
added = add_new_column(parsed)
create_plot(added)

尝试确保函数只处理它们直接负责的事情。知道数据来自哪里或生成数据不是 parse_data 的工作,因此它不应该担心这一点。让调用者处理它。

我在这里设置的方式通常称为“管道”或“线程”。信息从一个功能“流动”到下一个功能。在像 Clojure 这样的语言中,可以写成:

(-> (read-data)
    (parse-data)
    (add-new-column)
    (create-plot))

使用线程宏->,使您无需手动处理数据传递。不幸的是,Python 没有内置任何东西来执行此操作,尽管可以使用 external modules 来实现。 .

<小时/>

另请注意,由于数据帧似乎是可变的,因此您实际上不需要从函数中返回更改后的数据帧。如果您只是直接改变参数,则可以按顺序将相同的数据帧传递给每个函数,而不是将其放置在诸如 parsedadded 之类的中间变量中。我在这里展示的方式是设置的通用方式,但可以根据您的具体用例进行更改。

关于python - 不同函数之间的链接输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58473775/

相关文章:

python - 将输入从一个线程子进程发送到另一个线程子进程

这两个规范的 Python 代码等效

python - 是否可以减少 matplotlib 图中的标记数量?

python - 在 Python 中添加的方法

python - 从屏幕上的矩形获取平均主导颜色(live/python)

python - Pandas 计算连续行之间存在 X 秒差异的次数

python - 为什么我用 Django 得到 "SSL error: called a function you should not call"

python - 在Python中执行mysql查询时如何删除变量周围的单引号?

python - 在 PyCharm 中进行单元测试时如何查看日志消息?

python - xml.etree.ElementTree findall