繁体   English   中英

== True 和 != None 有什么区别?

[英]What is the difference between == True and != None?

def get_next_target(page):

    start_link = page.find('<a href="')

    if start_link == -1:
        return None, 0

    end_link = page.find('">', start_link)
    url = page[start_link + 9 : end_link]
    return url, end_link

def print_all_links(page):

  url = True
  while url != None:
    url, endpos = get_next_target(page)
    if url:
        print url   #True
        page = page[endpos : ]
    else: 
        break

page = '<div id="top_bin"><div id="top_content" class="width960"><div class="udacity float-left"><a href="http://udacity.com"><a href="http://udacity.com"><a href="http://udacity.com"><a href="http://udacity.com">'

print print_all_links(page)

我的问题是,当我打印结果时,它会打印四个 URL,这是预期的结果,但是当我将 while 设置为while url == True:它只会打印一个 URL,那么原因是什么? 不是 != None 等于 ==True

请注意,首先返回这种哨兵并不是很好的设计。 get_next_target应该返回一个目标,没有别的( get_next_target忽略寻找下一个目标所需的状态)。 如果有错误,则引发异常。 在这种情况下,缺少另一个目标并不是真正的错误,但正如我们将看到的,它确实标志着迭代的结束。 已经有一个例外: StopIteration

def get_next_target(page):
    start_link = page.find('<a href="')

    if start_link == -1:
        raise StopIteration

    end_link = page.find('">', start_link)
    url = page[start_link + 9 : end_link]
    return url, end_link

def print_all_links(page):

    while True:
        try:
            url, endpos = get_next_target(page)
            print url
            page = page[endpos:]
        except StopIteration:
            break

不过,我们可以编写一个更好的迭代器来返回给定页面的链接,但它不会公开解析页面所需的状态。

def get_targets(page):
    while True:
        start_link = page.find('<a href="')
        if start_link == -1:
            break
        end_link = page.find('">', start_link)
        yield page[start_link + 9:end_link]

def print_all_links(page):
    for url in get_targets(page):
        print url

如果url == "http://stackoverflow.com"怎么办? 那么它不等于True ,所以 while 停止。 但它等于None ,因此,如果您检查,然后继续循环。

如果你改为说

if url:

或者

if bool(url) == True:

然后它会按预期工作。 url只有一次为 True,在第一次迭代后它是一个字符串和"anystring" != True ,但bool("anystring")其中 "anystring" 不是空字符串,是 True。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM