gpt4 book ai didi

python:正确使用全局变量

转载 作者:行者123 更新时间:2023-11-28 19:59:41 25 4
gpt4 key购买 nike

这是代码!

import csv

def do_work():
global data
global b
get_file()
samples_subset1()
return

def get_file():

start_file='thefile.csv'

with open(start_file, 'rb') as f:
data = list(csv.reader(f))
import collections
counter = collections.defaultdict(int)

for row in data:
counter[row[10]] += 1
return

def samples_subset1():

with open('/pythonwork/samples_subset1.csv', 'wb') as outfile:
writer = csv.writer(outfile)
sample_cutoff=5000
b_counter=0
global b
b=[]
for row in data:
if counter[row[10]] >= sample_cutoff:
global b
b.append(row)
writer.writerow(row)
#print b[b_counter]
b_counter+=1
return

我是 python 的初学者。我的代码运行的方式是我调用 do_work 并且 do_Work 将调用其他函数。这是我的问题:

  1. 如果我需要 data 只被 2 个函数看到,我应该将它设为全局吗?如果不是,那么我应该如何调用 samples_subset1?我应该从 get_file 还是从 do_work 调用它?

  2. 代码有效,但您能否指出有关其编写方式的其他优点/缺点?

  3. 我正在处理一个 csv 文件,其中有多个步骤。我将这些步骤分解为不同的函数,例如 get_filesamples_subset1,我还会添加更多函数。我应该继续按照我现在做的方式去做吗?我从 do_work 调用每个单独的函数?

根据以下答案之一,这是新代码:

import csv
import collections

def do_work():
global b
(data,counter)=get_file('thefile.csv')
samples_subset1(data, counter,'/pythonwork/samples_subset1.csv')
return

def get_file(start_file):

with open(start_file, 'rb') as f:
global data
data = list(csv.reader(f))
counter = collections.defaultdict(int)

for row in data:
counter[row[10]] += 1
return (data,counter)

def samples_subset1(data,counter,output_file):

with open(output_file, 'wb') as outfile:
writer = csv.writer(outfile)
sample_cutoff=5000
b_counter=0
global b
b=[]
for row in data:
if counter[row[10]] >= sample_cutoff:
global b
b.append(row)
writer.writerow(row)
#print b[b_counter]
b_counter+=1
return

最佳答案

根据经验,避免使用全局变量。

这里很简单:让 get_file 返回数据那么你可以说

data = get_file()
samples_subset1(data)

此外,我会在文件顶部进行所有导入

关于python:正确使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com