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"]
相关文章
|
2月前
|
Python
python中if __name__ == '__main__'
python中if __name__ == '__main__'
17 3
|
5月前
|
Python
Python基础语法,解释一下Python中的if __name__ == "__main__"。
Python基础语法,解释一下Python中的if __name__ == "__main__"。
|
7月前
|
TensorFlow 算法框架/工具 Python
python报错:ImportError: cannot import name ‘_tf_stack‘ from ‘tenso
ImportError: cannot import name ‘_tf_stack’ from ‘tensorflow.python’本来keras和tensorflow用得好好的,忽然今天报错导入包得时候直接报错。在网上找了很多方法,但是用处都不大,尝试了很多遍都不行。于是尝试将tensorflow和keras卸载重装。(需要彻底卸载,pip命令后还需要删除文件夹中得几个文件夹,也就是...
70 1
|
4月前
|
索引 Python
完美解决丨#在python中,如果引用的变量未定义,则会报告NameError: name ‘变量名‘ is not defined。
完美解决丨#在python中,如果引用的变量未定义,则会报告NameError: name ‘变量名‘ is not defined。
|
5月前
|
前端开发 Python
Python 教程之变量(10)—— Python 中的 __name__ (一个特殊变量)
Python 教程之变量(10)—— Python 中的 __name__ (一个特殊变量)
39 0
|
9月前
|
存储 Python
python--导入,模块的引用,包,__name__
python--导入,模块的引用,包,__name__
|
10月前
|
算法 IDE 开发工具
【Python语法】类型提示(self, nums: List[int]) -> List[int],报错NameError: name ‘List‘ is not defined解决
【Python语法】类型提示(self, nums: List[int]) -> List[int],报错NameError: name ‘List‘ is not defined解决
|
11月前
|
测试技术 Python
Python|自动化测试与if __name__=="__main__":
Python|自动化测试与if __name__=="__main__":
74 0
|
12月前
|
机器学习/深度学习 人工智能 数据挖掘
Python 的 __name__ 变量及其应用
__name__ 是 Python 中的一个特殊变量,它代表当前模块的名字。 当一个 Python 文件被直接运行的时候,__name__ 的值会被设置为 __main__。 当代码被导入到其他模块中运行时,__name__ 的值会被设置为模块名称。