我不知道该怎么办。
我正在编写一个刮板,我需要刮一些数据,并且由于我在“ for循环”中进行的复制粘贴操作,代码变得有点长,问题是我觉得代码慢很多当我做一个函数时,我用参数调用而不是调用相同的行。有人可以帮我解释一下是我还是背后的原因?另外,总体上最优选的是什么?
选项1(无功能,但复制并粘贴代码):
for i in soup.find("div", class_="bets betCols2"):
""" 0.5 """
if i.find('span', 'bet_type').text == 'Total Over 0.5':
odd = i.find('span', 'koeff').text
mylist.append(odd)
if i.find('span', 'bet_type').text == 'Total Under 0.5':
odd = i.find('span', 'koeff').text
mylist.append(odd)
选项2(具有功能):
def find_info(soup, betinfo, mylist):
for i in soup.find("div", class_="bets betCols2"):
if i.find('span', 'bet_type').text == betinfo:
odd = i.find('span', 'koeff').text
mylist.append(odd)
return mylist
find_info(soup, 'Total Over 0.5', mylist)
find_info(soup, 'Total Under 0.5', mylist)
答案 0 :(得分:0)
涉及理论和技能。您了解了理论部分:由于剪切和粘贴,您会看到程序有点长且难以维护。这是拆分功能的主要原因之一。通过使用函数,您应该以更少的代码结尾,并且将来应该更易于维护/更新。
然后是技巧:将程序分成 good 函数。这就是您的问题(至少在您的示例中)。您有很多重复的工作(我的全部任务是让计算机比程序员做更多的工作,但我们不要过度做。)@tobias_k在初始注释中有一些有用的建议。
答案 1 :(得分:-1)
请注意,您的两个代码不相等:第二个版本将调用soup.find
两次。相反,您可以仅将if
部分包装在函数中。您甚至可以在外循环中定义此函数,以便它需要较少的参数并且不会使其余代码混乱:
for i in soup.find("div", class_="bets betCols2"):
def find_info(what):
if i.find('span', 'bet_type').text == what:
odd = i.find('span', 'koeff').text
mylist.append(odd)
find_info('Total Over 0.5')
find_info('Total Under 0.5')
请注意,它仍然两次调用i.find
(或四次)。您可以将它们存储在临时变量中,但是还有另一种方法:由于if
的主体是相同的,并且您只是将i.find
的结果与不同的值进行比较:
for i in soup.find("div", class_="bets betCols2"):
if i.find('span', 'bet_type').text in ('Total Over 0.5', 'Total Under 0.5'):
odd = i.find('span', 'koeff').text
mylist.append(odd)
这样,就没有重复,也没有嵌套函数,恕我直言,代码在做什么很清楚。