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

news2024/11/22 14:19:22

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


一、模块(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.coloradmin.cn/o/1288497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java--接口的其他细节

1.jdk8开始,接口新增了三种形式的方法 ①默认方法(实例方法):使用用default修饰,默认会被加上public修饰。注意:只能使用接口的实现类对象调用 ②私有方法:必须用private修饰(jdk9开始才支持) ③类方法(静态方法)&a…

EG网关串口连接施耐德M340PLC应用案例

EG网关串口连接施耐德M340PLC应用案例 前言:施耐德M340 PLC广泛应于工业控制领域,是一款性能高,运行稳定的控制器。此次我们要把施耐德M340 PLC通过Modbus-RTU协议使用EG网关连接到EMCP物联网云平台(简称EMCP)&#x…

制作古风纹理的滕王阁3D模型

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 滕王阁,位于江西省南昌市东湖区沿江路,地处赣…

香港优才计划申请获批后,才发现原来香港年薪100w并不难!

香港优才计划申请获批后,才发现原来香港年薪100w并不难! 在香港工作的话,给我个人的感觉就是工作和生活是分开的,无论是同事还是上司。比如员工在休假的时候从来不会突然来个电话让你忙个工作或者加个班,也不会八卦你的…

Linux下搭建私有的MQTT服务器实现多设备间实时图传

一、前言 在Linux(ubuntu 18.04)系统下使用EMQX搭建自己私有的MQTT服务器,实现多设备间实时图传效果。 测试了两种场景: 【1】图像采集端:采集电脑自己的摄像,通过MQTT协议上传到MQTT服务器,图像显示端订阅采集端的主题,获取实时图像显示。 【2】设备端:ESP32 + OV26…

java每日一记 —— 常见的Bean后置处理器

此代码在jdk11上测试通过,SpringBoot版本为2.7.14 1.上代码 1.测试方法 public class Dome04Application {public static void main(String[] args) {// 这是一个干净的容器GenericApplicationContext context new GenericApplicationContext();// 添加3哥Beanc…

LeetCode-470. 用 Rand7() 实现 Rand10()【数学 拒绝采样 概率与统计 随机化】

LeetCode-470. 用 Rand7 实现 Rand10【数学 拒绝采样 概率与统计 随机化】 题目描述:解题思路一:首先说一个结论就是(rand_X() - 1) Y rand_Y() > [1,X*Y],即可以等概率的生成[1, X * Y]范围的随机数,其实就像军训的时候报数…

DG领域常见算法:Domain Alignment

本文主要参考:Domain Generalization: A Survey Problem Definition 在DG的setting中,我们通常能拿到 K ( K ≥ 1 ) K(K\ge 1) K(K≥1)个source domain的数据,这几个source domain相似但并不相同,记为 S { S k { ( x ( k ) , …

Vue 实现基于 LogicFlow 自定义节点美化工作流

话不多说,先看效果: 动态效果: 完整设计界面: 右键菜单: 未完待续…

Java零基础——秒杀篇

1.【秒杀】 1.1. 技术选择型 Springboot Redis Rocketmq Mysql MybatisPlus 1.2. 架构图 1.3. 准备工作-数据库 SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS 0;-- ------------------------------ Table structure for goods-- ----------------------------DROP…

【labview报错,缺少GOOP Development Suite】

操作 当labview报此错误时,第一类情况为缺少包,第二类为所使用的GPU包已失效 以下为第一类缺包的解决方式 登录VIPM,如何安装VIPM查看此贴:VIPM安装 打开VIPM后,右上角输入goop,双击搜索出的安装包 勾选需要安装的包…

Java_ArrayList顺序表详解

目录 前言 顺序表 ​编辑 顺序表和数组 ArrayList简介 说明 ArrayList使用​编辑 ArrayList常见操作 ArrayList实现二维数组 ArrayList的遍历 ArrayList的扩容机制 总结 前言 一个高端的程序员,往往都是数据结构学的很好,判断一个程序的优劣也是看数据结构学的好与坏.…

Mysql-全外连接-Union和Union ALL的辨析及练习

mysql不支持FULL JOIN,但是可以用 (select 语句1) union (select 语句2)代替 🐶1. SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的 SELECT 语句…

使用git出现的问题

保证 首先保证自己的git已经下载 其次保证自己的gitee账号已经安装并且已经生成ssh公钥 保证自己要push的代码在要上传的文件夹内并且配置文件等都在父文件夹(也就是文件没有套着文件) 问题 1 $ git push origin master gitgitee.com: Permission de…

Vue混淆与还原

Vue混淆与还原 引言 Vue是一种流行的JavaScript框架,用于构建用户界面。它简单易用且功能强大,备受开发者喜爱。然而,在传输和存储过程中,我们需要保护Vue代码的安全性。混淆是一种有效的保护措施,可以加密和压缩代码…

简单构造好题

没啥思路,看到题解,先处理最大值,发现非常的nice // Problem: C. Polycarp Recovers the Permutation // Contest: Codeforces - Codeforces Round 756 (Div. 3) // URL: https://codeforces.com/problemset/problem/1611/C // Memory Limit:…

window下安装RocketMQ

本文以window11、JDK1.8、RocketMQ4.9.7版本为例 1.下载安装 1.1.官网 官网官网文档官网下载 1.2.下载 1.3.解压 2.配置 2.1.环境变量添加ROCKETMQ_HOME 2.2.环境变量添加JAVA_HOME 安装jdk1.8,并配置环境变量JAVA_HOME 3.启动 如果JAVA_HOME未指向jdk1.…

win10下maven安装与配置

1.下载安装 去官网下载最新版的安装包,然后解压到安装目录。 2.配置 右键桌面的计算机图标,属性–>高级系统设置–>环境变量,添加M2_HOME的环境变量,然后将该变量加入的PATH中。 如果想要修改maven的本地仓库位置&…

spring data Redis整合spring cache实战(附源码及源码分析)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 背景 最近在研究缓存框架,打算写一个多级缓存框架的sdk。所以想借鉴(抄袭)下spring的缓存框架的实现 spring cache reids spring cache对各种缓存进…

台灯哪个品牌更护眼推荐?学生党备考台灯推荐

近些年近视人数持续升高,我们越来越注意个人的健康问题,而对于视力健康,尤其是儿童青少年们,在3-14岁这个年龄段近视机率更高,儿童青少年近视率高达52.7%,随着开学季到来,应该怎么选护眼台灯呢&…