我正在学习Python并尝试上课。我试图刮掉一些经常使用不同字符串的网站来识别我需要的信息。挑战在于我遇到了可以寻找数十种可能字符串之一的情况。那时我是否继续嵌套if语句或创建新类等。
例如:在下面的类中,我在html中查找字符串x,y或z。如果我找到X,我需要执行一个函数。在if语句下面构建该函数是最有效的,还是我可以创建一个新函数并在这个类中调用它(即我创建一个名为x_Found()
的新函数)来解析我需要的数据。 / p>
class Link:
def __init__(self, url):
self.url = url
x = 'abc'
y = 'zyx'
z = '123'
def get_html(self):
import urllib2
html = urllib2.urlopen(self.url()).read()
return html
def find_text(self):
html = self.get_html()
if x in html:
run a function called x_found()
elif y in html:
run a different function called y_found()
elif z in html:
run an even different function called z_found()
答案 0 :(得分:1)
Lambda和/或方法指针的字典。
method_map = {'x' : self.x_found, 'y': self.y_found, 'z':self.z_found}
strings_to_search = ['x', 'y', 'z']
for string in strings_to_search:
if string in html:
method_map[string]()
答案 1 :(得分:1)
在这种情况下,您根本不应该使用if语句。创建一个将字符串映射到函数然后在其中调用适当函数的字典将会有更好的风格。
尝试这样的事情:
def string1_found():
print "Found a string 1"
foo = {}
foo['string1'] = string1_found
然后你可以通过
调用一个myfunc = foo['string1']
myfunc()