鱼C论坛

 找回密码
 立即注册
查看: 1151|回复: 4

[已解决]魔术方法又有点不懂了

[复制链接]
发表于 2020-7-1 22:10:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import urllib.request

import chardet



def main():

    url = input("请输入URL:")



    response = urllib.request.urlopen(url)

    html = response.read()



    # 识别网页编码

    encode = chardet.detect(html)['encoding']

    if encode == 'GB2312':

        encode = 'GBK'



    print("该网页使用的编码是:%s" % encode)

        

if __name__ == "__main__":

    main()
if __name__ == "__main__":

    main()最后这个方法怎么理解呀?
最佳答案
2020-7-1 22:32:15
本帖最后由 Twilight6 于 2020-7-1 22:34 编辑
lsc顺 发表于 2020-7-1 22:23
这个__name__属于什么?这种带下划线的看着脑壳疼。。



__name__就是可以识别当前脚本是作为模块运行的还是作为主程序运行的一个属性。所以这里有两种情况:

假如当前脚本就是主程序,那么此模块名字就是__main__,返回的值也为 __main__

通过if判断这样就可以执行 __mian__ 后面的主函数内容

假如此脚本是被导入的,则此__name__返回的是被导入时候的脚本文件名不加后缀,通过if判断是否等于 __main__ 这样就会跳过  if __name__ == "__main__": 下面的代码块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-1 22:13:54 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-1 22:15 编辑




当这个脚本作为主程序运行时候,会运行 if __name__ == "__main__": 下面的代码块

当这个脚本当作模块导入时候,将不调用 if __name__ == "__main__": 下面的代码块

这里的 main() 如果再正常情况下运行,而没有拿去导入模块,可以把这个代码的 if __name__ == "__main__": 去掉无妨

所以说 main() 这里是单纯的调用你前面定义的 main() 函数的意思

这和魔法方法无关,这个是自己定义函数,魔法方法是在类的定义里面所说的,带__双下划线,具有特殊作用的方法


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 22:14:06 | 显示全部楼层
emmmmm
main()
是你定义的方法啊:
def main():
这不属于魔法方法

还有,是魔法方法,不是魔术方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 22:23:38 | 显示全部楼层
Twilight6 发表于 2020-7-1 22:13
当这个脚本作为主程序运行时候,会运行 if __name__ == "__main__": 下面的代码块

当这个脚本当作 ...

这个__name__属于什么?这种带下划线的看着脑壳疼。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 22:32:15 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-7-1 22:34 编辑
lsc顺 发表于 2020-7-1 22:23
这个__name__属于什么?这种带下划线的看着脑壳疼。。



__name__就是可以识别当前脚本是作为模块运行的还是作为主程序运行的一个属性。所以这里有两种情况:

假如当前脚本就是主程序,那么此模块名字就是__main__,返回的值也为 __main__

通过if判断这样就可以执行 __mian__ 后面的主函数内容

假如此脚本是被导入的,则此__name__返回的是被导入时候的脚本文件名不加后缀,通过if判断是否等于 __main__ 这样就会跳过  if __name__ == "__main__": 下面的代码块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 03:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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