Python:复制并粘贴相同的行或调用一个函数?

时间:2018-08-13 16:16:44

标签: python

我不知道该怎么办。

我正在编写一个刮板,我需要刮一些数据,并且由于我在“ 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)

2 个答案:

答案 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)

这样,就没有重复,也没有嵌套函数,恕我直言,代码在做什么很清楚。