这是密码!在
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\u-work,而do\u-work将调用其他函数。以下是我的问题:
如果我需要data
只被2个函数看到,我应该使它全局化吗?如果不是,那么我应该如何调用samples_subset1
?我应该从get_file
调用它还是从do_work
调用它?
这段代码很好用,但是你能指出它的编写方式有哪些好的/坏的地方吗?
我正在处理一个csv文件,有多个步骤。我将这些步骤分解成不同的函数,比如get_file
,samples_subset1
,我还将添加更多的功能。我应该继续这样做吗,我现在在这里调用do_work
中的每个单独的函数?
以下是新代码,根据以下答案之一:
^{pr2}$
根据经验,避免全局变量。在
这里很简单: 让get_file返回数据 然后你可以说
另外,我会在文件顶部执行所有导入操作
如果您必须使用一个全局(有时我们必须这样做),您可以用python方法定义它,并且只允许某些模块访问它,而不必在所有函数/类的顶部使用讨厌的
global
关键字。在创建一个只包含全局数据的新模块(在您的例子中,假设
csvGlobals.py
):然后,您要访问这些数据的每个文件都可以这样做:
^{pr2}$如果要在两个或多个函数之间共享数据,通常最好使用一个类,并将函数转换为方法,将全局变量转换为类实例上的属性。在
顺便说一句,您不需要在每个函数的末尾都使用return语句。只有当您想返回值或在函数中间返回时,才需要显式返回。在
相关问题 更多 >
编程相关推荐