帮助解释代码snipp

2024-04-25 23:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python和beauthoulsoup非常陌生。在

for语句中,incident是什么?它是类、类型、变量吗? 下一行。。完全迷路了。在

有人能给我解释一下这个密码吗?在

for incident in soup('td', width="90%"):
    where, linebreak, what = incident.contents[:3]
    print where.strip()
    print what.strip()
    break
print 'done'

Tags: in密码类型for语句wherewhattd
3条回答

首先,Python关心换行符和空格的位置,因此应该使用code标记来表示Python代码。因此,我必须猜测您的代码最初是如何格式化的。在

for incident in soup('td', width="90%"): 
    where, linebreak, what = incident.contents[:3] 
    print where.strip()
    print what.strip() 
    break 
print 'done'

“for x in y:”语句假定“y”是某种iterable(类似于列表的)事物—对象的有序集合。然后,对于列表中的每个元素,它将元素指定为名称“x”,并运行缩进块。在

在本例中,似乎有一个函数soup(),它返回事件列表。每个事件都是一个对象,它包含一个名为“contents”的属性,它本身就是一个列表;[:3]表示“列表的前三个元素”。所以这一行是把事件内容中的前三件事赋给它们“where”、“linebreak”和“what”。函数的作用是:删除字符串开头和结尾的空格。所以我们把“哪里”和“什么”打印出来break'退出for循环,因此在本例中它只运行一次,这有点奇怪。在

欢迎使用堆栈溢出!让我们看看发生了什么。我已经添加了进一步阅读的链接,在问进一步的问题之前一定要看一下。在

    for incident in soup('td', width="90%"): 

incident只是soup返回的iterable的任意局部变量。一般来说,^{} statement中的局部变量可能是一个列表,但也可能是元组,甚至是字符串。如果可以迭代某些东西,比如文件,那么Python可能会接受for来遍历这些项。在

在本例中,soup返回一个宽度为90%的tdHTML元素列表。我们可以看到这是因为下一行发生了什么:

^{pr2}$

wherelinebreak和{}都是任意的局部变量。它们都被分配在一个语句中。在Python中,这称为multiple assignment。这三个元素从何而来?incident.contents[:3]使用slice notation请求前三个元素。在

^{3}$

这两行将wherewhat打印到屏幕上。但是^{}在做什么呢?它正在清除空白。所以," some text "变成{}。在

        break

break在第一个循环之后刚刚打破了for循环。它不会破坏整个程序。相反,它将程序流返回到循环后的下一行。在

    print 'done'

这只是做它所说的,把“完成”这个词发送到屏幕上。如果您正在使用此程序,当您看到屏幕上出现“done”(不带引号)时,您就知道它已完成。在

¹更精确地说,它们将字节发送到标准输出(通常称为stdout)。在

第一条语句启动一个循环,该循环解析HTML文档,寻找宽度设置为90%的td元素。表示td元素的对象绑定到名称incident。在

第二行是多重赋值,可以重写如下:

where = incident.contents[0]
linebreak = incident.contents[1]
what = incident.contents[2]

td从每个单词中提取一个有意义的单词。在

循环中的最后一行在只检查第一个元素后导致循环中断。代码本可以重写为不使用循环,这样可以使代码更清晰。在

相关问题 更多 >