wanpojie 发表于 2022-12-6 10:17

name = main 为什么没有优先运行

import requests   #pip install requests
import parsel       #pip install parsel
import time

headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}

def get_response(html_url):
    response = requests.get(url=html_url, headers=headers)
    response.encoding = response.apparent_encoding
    return response
    print('正在执行get_response')

def save(name, content):
    with open(name +'.txt', mode='a', encoding='utf-8') as f:
      f.write(content)
      f.write('\n')
      time.sleep(10)
    print('正在执行save')

def get_novel_url(html_url):
    response = get_response(html_url)
    selector = parsel.Selector(response.text)
    name = 'ceshiname'
    content_list = selector.css('#cke_1_contents > div > p:nth-child(12)::text').getall()
    content = "".join(content_list)
    save(name,content)
    print('正在执行get_novel_url')

if __name__ == '__main__':
    url ="https://www.dulifei.com/standard/detail/102"
    get_novel_url(url)
    print('正在执行主程序')


运行以后的顺序是:
正在执行save
正在执行get_novel_url
正在执行__name__
很奇怪get_novel_url为什么没有第一部运行

ssjjtt 发表于 2022-12-6 10:22

这不好说

aushy 发表于 2022-12-6 10:23

本帖最后由 aushy 于 2022-12-6 10:25 编辑

因为程序一般是从上到下一句一句执行的。if __name__ == '__main__':只是一个普通的 if 语句而已,并没有优先执行的权限。

cflying 发表于 2022-12-6 10:29

本帖最后由 cflying 于 2022-12-6 10:31 编辑

先把调用顺序搞清楚
save在正在执行get_novel_url前面

wanpojie 发表于 2022-12-6 10:34

aushy 发表于 2022-12-6 10:23
因为程序一般是从上到下一句一句执行的。if __name__ == '__main__':只是一个普通的 if 语句而已,并没有 ...

get_response为什么又没有执行呢

cflying 发表于 2022-12-6 10:36

本帖最后由 cflying 于 2022-12-6 10:37 编辑

wanpojie 发表于 2022-12-6 10:34
get_response为什么又没有执行呢
你老把print('正在执行get_response')放到return response前面再看看?
至于为什么,百度一哈return意义就明白了

cflying 发表于 2022-12-6 10:39

aushy 发表于 2022-12-6 10:23
因为程序一般是从上到下一句一句执行的。if __name__ == '__main__':只是一个普通的 if 语句而已,并没有 ...
你这解释怕是误导人家哦,这可不是一句普通if语句哦,这是有作用的哦

aushy 发表于 2022-12-6 10:59

本帖最后由 aushy 于 2022-12-6 11:05 编辑

cflying 发表于 2022-12-6 10:39
你这解释怕是误导人家哦,这可不是一句普通if语句哦,这是有作用的哦
# Python program to execute
# main directly
print ("0始终执行")

if __name__ == "__main__":
      print ("1直接调用时执行")
else:
      print ("1导入时执行")

print ("2始终执行")

saszznz 发表于 2022-12-6 11:02

cflying 发表于 2022-12-6 11:05

aushy 发表于 2022-12-6 10:59
# Python program to execute
# main directly
print ("始终执行")


对,这个例子很形象,这语句在导入包的时候,会和包里__name__进行匹配验证,所以是有作用的,在单文件里看不出作用,但是在导入时就有用了
页: [1] 2 3
查看完整版本: name = main 为什么没有优先运行