吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1313|回复: 21
收起左侧

[讨论] name = main 为什么没有优先运行

[复制链接]
wanpojie 发表于 2022-12-6 10:17
[Python] 纯文本查看 复制代码
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语句哦,这是有作用的哦

[Asm] 纯文本查看 复制代码
# 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
[mw_shl_code=asm,true]# Python program to execute
# main directly
print ("始终执行")

对,这个例子很形象,这语句在导入包的时候,会和包里__name__进行匹配验证,所以是有作用的,在单文件里看不出作用,但是在导入时就有用了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表