Python:当XX是自己创建的文件或者XX是python库文件时"from XX import * "的区别(比如pytorch)

Pyhon: the difference of "from XX import * " when XX is file created by myself or XX is python library file(like pytorch)

当我使用 pytorch 时,我想知道为什么我不能使用“from torchvision.models.vgg import *”

从 torchvision.models.vgg 导入部分函数或变量

像这样:

from torchvision.models.vgg import *

if __name__=="__main__":
    print(cfgs["A"])

from torchvision.models.vgg import *

from typing import Union, List, Dict, Any, cast
cfgs: Dict[str, List[Union[str, int]]] = {
    'A': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
    'B': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],
    'D': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],
    'E': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}

if __name__=="__main__":
    print(make_layers(cfgs["A"]))

找不到变量“cfgs”和函数“make_layers”

但我可以使用像“vgg16_bn()”这样的函数,它与“make_layers”在同一个文件中

from torchvision.models.vgg import *


if __name__=="__main__":
    print(vgg16_bn())

我需要这样导入:

from torchvision.models.vgg import cfgs,make_layers


if __name__=="__main__":
    print(make_layers(cfgs["A"]))

但是如果我导入的文件是这样自己创建的:

b.py:

url="http"

def a ():
    return True

main.py 可以找到变量“url”和函数“a()”

from b import *


if __name__=="__main__":
    print(url)
    print(a())

我不知道为什么会这样,谁能解释一下it.Thanks!

torchvision/models/vgg.pythis particular __all__ 指示其导出的符号:

__all__ = [
    "VGG",
    "vgg11",
    "vgg11_bn",
    "vgg13",
    "vgg13_bn",
    "vgg16",
    "vgg16_bn",
    "vgg19_bn",
    "vgg19",
]

* 导入(虽然通常 不鼓励 )将默认公开 __all__ 中的名称(或者如果 __all__ 丢失,任何不以 _)

开头的名称