当前位置: 首页 > article >正文

【python】包(package)与模块(module)、import、__name__与__main__

导入模块一般写在程序最前面,且顺序为:内置模块、第三方模块、自定义模块


一、模块(module)与包(package)

模块(module)可以理解为是一个.py文件,import 模块 相当于执行了 这个.py文件
包(package)可以理解为包含着__init__.py的文件夹,import 包 相当于执行了 对应的__init__.py文件
(一个包中可以包含多个模块/多个包)
以pycharm为例,包与普通文件夹的图片如下所示(如果把__init__.py文件删除,则图标变为普通文件夹的图标)

在这里插入图片描述

二、模块的import与from import

导入模块的语法:
# 导入模块
import 模块名 as 别名 # 执行模块名.py
# 导入模块中某个函数/类/变量
from 模块名 import 函数名/类名/变量 as 别名 # 也会执行模块名.py,但只能用所导入的函数名/类名/变量
查找模块的顺序:
import sys
print(sys.path)# 输出包含多个文件夹路径的列表

模块的查找顺序是根据sys.path列表中的路径顺序进行的,大致如下:

  1. 先找当前py文件的同级目录下是否有对应模块
  2. 找当前项目目录下是否有对应模块
  3. 找python解释器目录下是否有对应模块
导入模块的具体流程:

判断内存中是否已加载了对应模块,如已加载则直接返回内存地址,如没加载则开辟一块内存,执行所导入的模块中的所有python代码。

内置变量__name__:

每个python文件中都会有内置的__name__变量
直接运行该python文件的时候,__name__的值是__main__
当以模块的形式导入该python文件时,__name__的值是模块名(比如abc.py则值就是abc)

比如以下python文件命名为a.py,当直接运行该文件则会打印出"测试案例",在其他python文件中import a时则不会打印出"测试案例"

def func():
    print("a模块里的func被调用了")

class Student:
    def __init__(self,name):
        self.name = name
    def eat(self, food):
        print(f"{self.name}在吃{food}")

if __name__ == '__main__':
    print("测试案例")

三、包的import与from import

导入包中模块的语法:
# 导入包
import 包名 # 执行包名下的__init__.py
# 直接导入模块(不常用)
import 包名.(包名.)模块名
# 导入包里某个模块(常用)
from 包名(.包名) import 模块名
# 导入包里某个模块的具体类、方法(常用)
from 包名.(包名.)模块名 import (函数名/类名/变量) 

注意:from import语法中import后面不允许出现 "." !!!!!!!

示例:

在这里插入图片描述

# 导入policy模块
from glance.api import policy
# 导入policy中Student这个类
from glance.api.policy import Student

http://www.kler.cn/a/158888.html

相关文章:

  • Unity3D 完整直升机控制器(虚拟仿真级别)
  • Shell中的函数
  • mybatis的动态sql用法之排序
  • 联通大数据面试题及参考答案
  • STM32设计防丢防摔智能行李箱
  • 数据结构-哈夫曼树
  • DCGAN生成网络模型
  • MX6ULL学习笔记 (七) 中断实验
  • AIGC: 关于ChatGPT中对输出文本进行审核
  • Arrays类练习 - Java
  • flask web学习之flask与http(一)
  • 【数据结构与算法篇】八种排序 (C++实现)
  • 查看Linux服务器的CPU利用率常用的命令
  • 【每日一题】找出叠涂元素
  • 量化学习笔记——入门与基本概念
  • C/C++---------------LeetCode第350. 两个数组的交集 II
  • Spring Cloud Gateway常见问题
  • 1970-2022年中国省级国家级开发区数据集
  • 高低温交变湿热实验箱
  • css设置渐变色
  • CMake中的add_definitions 函数
  • 「C++」哈希表的实现(unordered系底层)
  • MyBatis动态sql语句
  • 手动创建spring bean并注入
  • 详解十大经典排序算法(五):归并排序(Merge Sort)
  • OSPF浅析