gpt4 book ai didi

python新手问题: converting code to classes

转载 作者:行者123 更新时间:2023-11-28 21:30:15 24 4
gpt4 key购买 nike

我有这个代码:

import csv
import collections

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

def get_file(start_file):

with open(start_file, 'rb') as f:
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,sample_cutoff):

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

我最近开始学习Python,并希望从良好的习惯开始。因此,我想知道您是否可以帮助我开始将此代码转换为类。我不知道从哪里开始。

最佳答案

根据我对原始帖子的评论,我认为这里不需要上课。不过,如果其他 Python 程序员会读到这篇文章,我建议将其与 PEP8(Python 风格指南)内联。这是一个快速重写:

import csv
import collections

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

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

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

return (data, counter)

def samples_subset1(data, counter, output_file, sample_cutoff):
with open(output_file, 'wb') as outfile:
writer = csv.writer(outfile)
b = []
for row in data:
if counter[row[10]] >= sample_cutoff:
b.append(row)
writer.writerow(row)

return b

注释:

  1. 没有人使用超过 4 个空格永远缩进。使用 2 - 4。以及所有你的缩进级别应该匹配。
  2. 在参数之间的逗号后使用一个空格到函数(“F(a,b,c)”不“F(a,b,c)”)
  3. 函数末尾的裸露 return 语句是没有意义的。功能无return 语句隐式返回
  4. 所有周围都有一个空格运算符(a = 1,而不是 a=1)
  5. 不要将单个值括在括号中。它看起来像一个元组,但事实并非如此。
  6. b_counter 根本没有被使用,所以我删除它。
  7. csv.reader 返回一个迭代器,您将其转换为列表。这通常是一个坏主意,因为它迫使 Python 立即将整个文件加载到内存中,而迭代器只会根据需要返回每一行。理解迭代器对于编写高效的 Python 代码绝对必要。我暂时保留了 data,但您可以重写以在使用 data 的任何地方使用迭代器,它是一个列表。

关于python新手问题: converting code to classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354593/

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