lsc顺 发表于 2020-7-1 22:10:11

魔术方法又有点不懂了

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()最后这个方法怎么理解呀?

Twilight6 发表于 2020-7-1 22:13:54

本帖最后由 Twilight6 于 2020-7-1 22:15 编辑




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

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

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

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

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


LYF511 发表于 2020-7-1 22:14:06

emmmmm

main()
是你定义的方法啊:

def main():
这不属于魔法方法

还有,是魔法方法,不是魔术方法
{:10_282:}

lsc顺 发表于 2020-7-1 22:23:38

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

当这个脚本当作 ...

这个__name__属于什么?这种带下划线的看着脑壳疼。。

Twilight6 发表于 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__": 下面的代码块
页: [1]
查看完整版本: 魔术方法又有点不懂了