咸糖记录编程的地方

Do what you love and the money will follow.

目录
为什么我们要在程序中添加`__name__=='__main__'`
/  

为什么我们要在程序中添加`__name__=='__main__'`

为什么我们要在程序中添加__name__=='__main__'

其实这个问体困扰了我很久,只知道测试一个函数的需要写上这句话
但是今天我试着输出了一下这个__name__的值的时候终于懂得是什么个意思了

在一个模块中间 我加入了一句print('__name__')
然后我们运行这个模块


from urllib.request import Request, urlopen
import json

import hashlib
def md5(str):#生成md5
    m = hashlib.md5()
    m.update(str)
    return m.hexdigest()
print(__name__)
def en_to_zh(src):#英译中
    ApiKey = "20180720000187239"
    pwd = "XPmRVhPPoaCv6A6ARpId"
    salt = "1435660288"
    all = ApiKey + src + salt + pwd
    sign = md5(all.encode("utf-8"))
    src=src.replace(' ','+')#生成sign前不能替换
    url = "http://api.fanyi.baidu.com/api/trans/vip/translate?q="\
          + src + "&from=en&to=zh&appid=" + ApiKey + \
          "&salt=" + salt + "&sign=" + sign
    try:
        req = Request(url)
        con = urlopen(req).read().decode('utf-8','ignore')

        res = json.loads(con)
        if 'error_code' in res:
            print ('error:', res['error_code'])
            return res['error_msg']
        else:
            dst = res['trans_result'][0]['dst']
            return dst
    except Exception as e:
        print(e)
        return "出错了"

他输出的是

/usr/bin/python3.5 /home/didi/excel_crawl/boisdejasmin/boisdejasmin/en_to_ch.py
__main__

Process finished with exit code 0

这也就是为什么我们要写

if __name__ == '__main__':
    pass

的原因
那要是这个模块导入到其他模块中调用会怎么样呢?

from boisdejasmin.boisdejasmin.en_to_ch import en_to_zh
#boisdejasmin.boisdejasmin.en_to_ch
#
#Process finished with exit code 0

他会输出这个包的路径
那一切就明了了
如果你想测试你的模块 但是又不想让你的这段代码执行
那么加上一句__name__=='__main__'是个不错的选择


标题:为什么我们要在程序中添加`__name__=='__main__'`
作者:xiantang
地址:http://xiantang.info/articles/2019/06/03/1559551091104.html

评论