python基础name&direction

简介: some problem in python1. __main__ & __name__有人一句话概括了这段代码的意义: ”Make a script both importable and executable“ 意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。

some problem in python


1. __main__ & __name__


有人一句话概括了这段代码的意义:
”Make a script both importable and executable“
意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。

demo

# -*- coding: utf-8 -*-
# module
def main():
    print('we are in %s'%__name__)
if __name__ == '__main__':
    main()

执行后的结果为we are in __main__

# -*- coding: utf-8 -*-
# anothermodule
from python.module import main

main()

执行后的结果为we are in module
这说明了什么呢????
但是没有显示”we are in __main__“,也就是说模块__name__ = ‘__main__’ 下面的函数没有执行。
这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。

总结一下:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == ‘__main__’“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == ‘__main__’“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够work.

还可以参考https://www.crifan.com/python_detailed_explain_about___name___and___main__/

2. directory与python package


problem

LZ我在使用import一个子文件的中class的时候,发生了错误。发现了这个新手问题。

Directory
Directory在pycharm中就是一个文件夹,放置资源文件,对应于在进行JavaWeb开发时用于放置css/js文件的目录,或者说在进行物体识别时,用来存储背景图像的文件夹。该文件夹其中并不包含_ _ init.py_ _文件

Python package
对于Python package 文件夹而言,与Directory不同之处在于其会自动创建_ _ init.py_ _文件。
简单的说,python package就是一个目录,其中包括一组模块和一个_ _ init.py_ _文件。

该文件与Python的import机制有关,这关乎到你的哪些.py文件是对外可访问的。有些时候,如果一个包下有很多模块,在调用方import如此多模块是很费事,且不优雅的,此时可以通过修改_ _ init_ _.py来完成该任务。
在_ _ init_ .py中定义特殊变量_ all_ ,将要包含的模块复制给该变量,例如在Image/ _ init_ .py中定义 all _=[‘tiff’,’bmp’,’jpg’],这里的all 对应的就是 from …import * 中*代指的模块,此时在引用方使用如下语句:
其实_ _ init_ .py可以为空,当其为空时,from Image import * 将Image包下所有的模块都进行引用,如果想要控制引用的模块,则可以自行定义 all _

demo

from .batch import Batch
from .dataset import Dataset, TabularDataset, ZipDataset
from .example import Example
from .field import Field
from .iterator import (batch, BucketIterator, Iterator, BPTTIterator,
                       pool)
from .pipeline import Pipeline
from .utils import get_tokenizer, interleave_keys

__all__ = ["Batch",
           "Dataset", "TabularDataset", "ZipDataset",
           "Example",
           "Field",
           "batch", "BucketIterator", "Iterator", "BPTTIterator",
           "pool",
           "Pipeline",
           "get_tokenizer", "interleave_keys"]
相关文章
|
Python
python flask 后端报错 ImportError: cannot import name ‘cached_prope‘
问题python flask 后端报错 ImportError: cannot import name ‘cached_prope‘flask程序启动但抛出该错误,是因为werkzeug 版本过高,需要降低版本即可 解决:一般这种情况是需要注意第三方库版本的对应,werkzeug需要0.16.0 版本时 flask的版本应该时1.x.x 的版本,不能是2.x过高的版本。
189 0
|
5月前
|
Python
【Python】 已解决:NameError: name ‘python‘ is not defined
【Python】 已解决:NameError: name ‘python‘ is not defined
642 8
|
5月前
|
数据采集 机器学习/深度学习 Python
【Python】已完美解决:ImportError: cannot import name ‘Imputer‘ from ‘sklearn.preprocessing
【Python】已完美解决:ImportError: cannot import name ‘Imputer‘ from ‘sklearn.preprocessing
356 3
|
7月前
|
Python
python中if __name__ == '__main__'
python中if __name__ == '__main__'
51 3
|
4月前
|
API 开发工具 Python
【Azure Developer】Python 获取 Azure 中订阅(subscription)信息,包含ID, Name等
【Azure Developer】Python 获取 Azure 中订阅(subscription)信息,包含ID, Name等
|
6月前
|
Python
python中模块对象__name__
【6月更文挑战第12天】
111 7
|
7月前
|
Python
Python基础语法,解释一下Python中的if __name__ == "__main__"。
Python基础语法,解释一下Python中的if __name__ == "__main__"。
76 2
|
5月前
|
数据采集 前端开发 测试技术
【Python】已解决:(最新版selenium框架元素定位报错)NameError: name ‘By’ is not defined
【Python】已解决:(最新版selenium框架元素定位报错)NameError: name ‘By’ is not defined
131 0
|
5月前
|
Python
【Python】已解决:(pandas读取DataFrame列报错)raise KeyError(key) from err KeyError: (‘name‘, ‘age‘)
【Python】已解决:(pandas读取DataFrame列报错)raise KeyError(key) from err KeyError: (‘name‘, ‘age‘)
330 0
|
5月前
|
开发者 Python
【Python】已解决:NameError: name ‘reload’ is not defined
【Python】已解决:NameError: name ‘reload’ is not defined
241 0