name = main 为什么没有优先运行
import requests #pip install requestsimport 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为什么没有第一部运行
这不好说 本帖最后由 aushy 于 2022-12-6 10:25 编辑
因为程序一般是从上到下一句一句执行的。if __name__ == '__main__':只是一个普通的 if 语句而已,并没有优先执行的权限。 本帖最后由 cflying 于 2022-12-6 10:31 编辑
先把调用顺序搞清楚
save在正在执行get_novel_url前面 aushy 发表于 2022-12-6 10:23
因为程序一般是从上到下一句一句执行的。if __name__ == '__main__':只是一个普通的 if 语句而已,并没有 ...
get_response为什么又没有执行呢 本帖最后由 cflying 于 2022-12-6 10:37 编辑
wanpojie 发表于 2022-12-6 10:34
get_response为什么又没有执行呢
你老把print('正在执行get_response')放到return response前面再看看?
至于为什么,百度一哈return意义就明白了 aushy 发表于 2022-12-6 10:23
因为程序一般是从上到下一句一句执行的。if __name__ == '__main__':只是一个普通的 if 语句而已,并没有 ...
你这解释怕是误导人家哦,这可不是一句普通if语句哦,这是有作用的哦 本帖最后由 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始终执行")
aushy 发表于 2022-12-6 10:59
# Python program to execute
# main directly
print ("始终执行")
对,这个例子很形象,这语句在导入包的时候,会和包里__name__进行匹配验证,所以是有作用的,在单文件里看不出作用,但是在导入时就有用了