You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何不使用全局变量在函数间传递列表?

解决Python中避免全局变量传递数据集的问题

嘿,很高兴帮你搞定这个问题!避免使用全局变量确实是个值得坚持的好习惯——它能让你的代码更模块化、更容易调试和维护。针对你的场景,这里有两个实用的方案来传递加载好的数据集给其他函数:

方案1:让加载函数返回数据集,显式传递给其他函数

最直接的方式就是修改loadFile函数,让它在完成数据加载后返回这个数据集,然后在调用其他处理函数时,把这个数据集作为参数传进去。这样完全不需要全局变量,所有数据的流向都清晰可见。

修改后的代码示例:

import csv
import sys

def loadFile(x):
    data_set = []  # 将数据集定义在函数内部,不再依赖全局变量
    with open(x, "r") as readfile:
        csv_reader = csv.reader(readfile, delimiter= ';')
        for row in csv_reader:
            data_set.append(row)
    print("Loaded weather data from", (x[0:-4]).capitalize())
    print()
    return data_set  # 返回加载完成的数据集

def avgDay(data_set, x):  # 新增data_set作为第一个参数,接收传递过来的数据
    for line in data_set:
        if(len(x) == 5 and (x[3:5] + "-" + x[0:2]) in line[0]):
            print("The weather on", x, "was on average", line[2], "centigrade")

# 调用示例(放在主程序入口里)
if __name__ == "__main__":
    # 先加载数据,拿到返回的数据集
    weather_data = loadFile("weather.csv")
    # 把数据集传给avgDay函数
    avgDay(weather_data, "01-05")
    # 其他需要处理数据的函数也用同样的方式传递
    # temp_range(weather_data, "01-05")
    # humidity_avg(weather_data, "July")

方案2:用类封装数据和处理函数

如果你的项目中有多个需要处理该数据集的函数,用类来封装会更优雅。把数据集作为类的实例属性,类内的所有方法都可以直接访问它,不用每次都手动传递参数,代码结构也更整洁。

示例代码:

import csv
import sys

class WeatherDataProcessor:
    def __init__(self):
        self.data_set = []  # 实例属性,类内所有方法都能直接访问

    def loadFile(self, x):
        with open(x, "r") as readfile:
            csv_reader = csv.reader(readfile, delimiter= ';')
            for row in csv_reader:
                self.data_set.append(row)
        print("Loaded weather data from", (x[0:-4]).capitalize())
        print()

    def avgDay(self, x):
        for line in self.data_set:
            if(len(x) == 5 and (x[3:5] + "-" + x[0:2]) in line[0]):
                print("The weather on", x, "was on average", line[2], "centigrade")

    # 这里可以添加更多处理数据的函数,比如:
    def maxTempWeek(self, week_num):
        # 直接使用self.data_set进行处理
        pass

# 调用示例
if __name__ == "__main__":
    processor = WeatherDataProcessor()
    processor.loadFile("weather.csv")
    processor.avgDay("01-05")
    # 其他处理函数直接调用即可,不用传数据集
    # processor.maxTempWeek(2)

两个方案各有优势:方案1简单直接,适合函数数量不多的小型项目;方案2的封装性更好,适合有多个相关处理函数的场景,后续扩展功能也更方便。

内容的提问来源于stack exchange,提问作者Alexander Kerr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:57:46