python模块使用相对路径还是绝对路径、哪种更好_python学习的第十八天模块之包、相对搜索路径和绝对搜索路径...

一、包

1、什么是包

包是一种通过使用‘.模块名’来组织python模块名称空间的方式。具体就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来

PS:(1)在pyhton3中没有__init__不会报错,但在python2会报错

(2)创建包的目的就是为了导入模块而不是运行,包的本质是个模块也是个文件夹

2、为什么用包

虽然功能越来越多被导入的模块越多,我们需要把这些模块统一组织起来方便我们管理,以提高程序的结构性和稳定性

ps:(1)无论portfrom..import导入都要求点的左边是个包

(2)form...import后面必须是一个明确的名字,不包含点

3、怎么用包

(1)包之import的使用

#在与glance同级的test.py中

import glance

glance.cmd.manage.main()'''执行结果:

AttributeError: module'glance' has no attribute 'cmd'

'''

(2)包之from...import的使用

1 fromglance.db import models2 models.register_models('mysql')

二、绝对路径和相对路径(最好用form...import)

ps:包以及包所包含的模块都是用来被导入的,而不是被直接执行的。而环境变量都是以执行文件为准的

绝对导入与相对导入

# 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入

# 优点: 执行文件与被导入的模块中都可以使用

# 缺点: 所有导入都是以sys.path为起始点,导入麻烦

# 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入

# 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹

# 优点: 导入更加简单

# 缺点: 只能在导入包中的模块时才能使用

#注意:1. 相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内2. attempted relative import beyond top-level package # 试图在顶级包之外使用相对导入是错误的,言外之意,必须在顶级包内使用相对导入,

每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包

总的来说:(1)包和执行文件在同一个目录下,在执行文件导入包用import更简单,用from ...import 需要手动添加环境变量

(2)在模块间互相导入,用from...import的相对导入简单,import需要注意sys环境变量

(3)相对导入和绝对导入只能from...import

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564257.shtml

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

相关文章

python的pygame库使用方法_[宜配屋]听图阁

使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截失败的一方输掉游戏,规则类似于简化版的乒乓球。因为是第一次用pygame写python小游戏并且只用了两三个小时&…

MySQL 删除用户权限

MySQL 数据库中可以使用 REVOKE 语句删除一个用户的权限&#xff0c;此用户不会被删除。 语法格式有两种形式&#xff0c;如下所示&#xff1a; 1 第一种&#xff1a; REVOKE <权限类型> [ ( <列名> ) ] [ , <权限类型> [ ( <列名> ) ] ]… ON <对…

java jdbc 多数据源_Jdbctemplate多数据源配置方法详解

1.数据源配置spring:# jdbctemplate 连接多数据源配置db1:datasource:jdbcurl: jdbc:mysql://127.0.0.1:3306/cloud-main1?useUnicodetrue&characterEncodingutf8&useSSLfalse&allowMultiQueriestrueusername: rootpassword: 123456driver-class-name: com.mysql.…

java 语法 泛型_java-解密泛型语法

我正在阅读一个问题,下面给出了方法的签名public static List super E> doIt(List nums)我无法解码语法.我对仿制药很陌生,无法理解这部分.第一部分< E扩展了CharSequence>都告诉E应该是什么作为参数和返回类型.但我确实看到列表了吗&#xff1f;超级E&gt ;,这定义…

MySQL 数据库恢复

数据库恢复是指以备份为基础&#xff0c;与备份相对应的系统维护和管理操作。 系统进行恢复操作时&#xff0c;先执行一些系统安全性的检查&#xff0c;包括检查所要恢复的数据库是否存在、数据库是否变化及数据库文件是否兼容等&#xff0c;然后根据所采用的数据库备份类型采…

java位逻辑运算符_详述:Java逻辑运算符与位运算

Java中逻辑运算符总共有分为三种“ ”&#xff0c;“ll”&#xff0c;“!”运算符、此为逻辑运算符&#xff0c;只有当给定的两个条件都为真时&#xff0c;返回结果为true&#xff0c;否则都为false&#xff01;、此为逻辑非运算符&#xff0c;用来反转操作的true或者false&…

C++ 三种继承方式

C继承的一般语法为&#xff1a; class 派生类名:&#xff3b;继承方式&#xff3d; 基类名{派生类新增加的成员 };继承方式限定了基类成员在派生类中的访问权限&#xff0c;包括 public&#xff08;公有的&#xff09;、private&#xff08;私有的&#xff09;和 protected&am…

mapdb java_MapDB使用入门

背景MapDB官网&#xff1a;http://www.mapdb.org官方翻译之后的话&#xff1a;MapDB基于堆外存储、磁盘存储提供了Java的Maps、Sets、Lists、Queues等功能。它混合了Java集合框架和数据库引擎。它是基于Apache许可的免费的、开源的。个人觉得&#xff1a;MapDB是一个轻量级的本…

C++继承时名字的遮蔽

如果派生类中的成员&#xff08;包括成员变量和成员函数&#xff09;和基类中的成员重名&#xff0c;那么就会遮蔽从基类继承过来的成员。所谓遮蔽&#xff0c;就是在派生类中使用该成员&#xff08;包括在定义派生类时使用&#xff0c;也包括通过派生类对象访问该成员&#xf…

java项目 异常如何解决_Java项目中常见的异常处理

发生异常的情况有很多&#xff0c;其中包括以下几大类&#xff1a;1. 空指针异常&#xff1b;2. 用户输入异常&#xff1b;3. 多层异常捕获&#xff1b;想要知道Java是如何处理异常的&#xff0c;就需要掌握以下这三种异常的处理&#xff1a;1.检查性异常&#xff1a;最具代表的…

C++ 基类和派生类的构造函数

在设计派生类时&#xff0c;对继承过来的成员变量的初始化工作也要由派生类的构造函数完成&#xff0c;但是大部分基类都有 private 属性的成员变量&#xff0c;它们在派生类中无法访问&#xff0c;更不能使用派生类的构造函数来初始化。 解决办法&#xff1a;在派生类的构造函…

java i/o 流详解_java I/O流详解

概况I/O流主要分为二大类别&#xff1a;字符流和字节流。字节流(基本流)1、字节输入流 类名&#xff1a;FileInputStream 特点&#xff1a;读(对文件进行读取操作) 父类&#xff1a;InputStream2、字节输出流 类名&#xff1a;FileOutputStream 特点&#xff1a;写…

C++ 基类和派生类的析构函数

和构造函数类似&#xff0c;析构函数也不能被继承。与构造函数不同的是&#xff0c;在派生类的析构函数中不用显式地调用基类的析构函数&#xff0c;因为每个类只有一个析构函数&#xff0c;编译器知道如何选择&#xff0c;无需程序员干涉。 另外析构函数的执行顺序和构造函数…

素描java字母_进行Java基本GUI设计需要用到的包是

【单选题】下列各类计算机程序语言中,不属于高级程序设计语言的是【填空题】以下程序从名为 filea.dat 的文本文件中逐个读入字符并显示在屏幕上。请填空。 #include main() { FILE *fp; char ch; fp fopen( 【3】 ); ch fgetc(fp); while (!feof(fp)) { putchar(ch); chfget…

C++ 多继承

派生类都只有一个基类&#xff0c;称为单继承&#xff08;Single Inheritance&#xff09;。除此之外&#xff0c;C也支持多继承&#xff08;Multiple Inheritance&#xff09;&#xff0c;即一个派生类可以有两个或多个基类。 多继承的语法也很简单&#xff0c;将多个基类用逗…

C++ 向上转型

在 C 中经常会发生数据类型的转换&#xff0c;例如将 int 类型的数据赋值给 float 类型的变量时&#xff0c;编译器会先把 int 类型的数据转换为 float 类型再赋值&#xff1b;反过来&#xff0c;float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换…

java拆分任意五位数_五位数拆分出各位 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...

5、输入一个五位数&#xff0c;输出一个反转的五位数输入-》12345 输出-》54321//这是五位数字拆分方法。System.out.println("请输入五位数的数字&#xff1a;"); // 比如&#xff1a;12345int g1num%10;int g2num/10%10;int g3num/100%10;int g4num/1000%10;int g…

C++ 纯虚函数和抽象类

C中&#xff0c;可以将虚函数声明为纯虚函数&#xff0c;语法格式为&#xff1a; virtual 返回值类型 函数名 (函数参数) 0;纯虚函数没有函数体&#xff0c;只有函数声明&#xff0c;在虚函数声明的结尾加上0&#xff0c;表明此函数为纯虚函数。 最后的0并不表示函数返回值为…

python中保留两位小数的编写程序_P081 保留两位小数

所属年份&#xff1a;2011.3;2011.9请编一个函数 float fun(double h)&#xff0c;该函数的功能是&#xff1a;使变量h中的值保留两位小数&#xff0c;并对第三位进行四舍五入(规定h中的值为正数)。例如&#xff0c;若h 值为1234.567&#xff0c;则函数返回1234.570000&#xf…

C++ 获取类型信息

typeid 运算符用来获取一个表达式的类型信息。类型信息对于编程语言非常重要&#xff0c;它描述了数据的各种属性&#xff1a; 对于基本类型&#xff08;int、float 等C内置类型&#xff09;的数据&#xff0c;类型信息所包含的内容比较简单&#xff0c;主要是指数据的类型。对…