python package_python之package定义

一.简单说明

python是通过module组织代码的,每一个module就是一个python文件,但是modules是通过package来组织的。我们平时在简单测试的时候

一般就是几个Python文件存放在同级的目录下,但是当我们开始尝试开发更为复杂的项目时,package这个概念的使用就有助于我们写的一个

个modules。

二.python package

package的定义很简单,在当前目录下有__init__.py文件的目录即为一个package。

这里也会分为两种情况,一种是空的__init__.py文件,另外一种是包含代码的__init__.py文件。

无论空与非空,这个目录都会被认为是一个package。

三.package的初始化

一个package被导入,无论什么时候,init.py的代码都只会执行一次。

注意:由于package被导入时,init.py中的可执行代码会被执行,所以小心在package中放置你的代码,比如把代码尽可能封装成函数或类。

3.1 init.py内部的导入顺序

当尝试导入某个包时,如下:

from package import something

import语句会首先检查something是不是__init__.py的变量。然后检查是不是subpackage,再检查是不是module,最后抛出ImportError。

顺序如下:

1.init.py文件内变量

2.是不是package内的subpackage

3.是不是package内module

举例说明:

这里我们创建一个yuhaohao的package,目录下有sulli1.py sulli2.py init.py文件

文件内容内下:

sulli1.py

#!/usr/bin/python3

def tl():

print("Hello, function 'tl' from module 'sulli1' calling")

sulli2.py

#!/usr/bin/python3

def ol():

print("Hello, function 'ol' from module 'sulli2' calling")

init.py文件内容为空。

[root@centos8 pipeline]# python3

Python 3.6.8 (default, May 21 2019, 23:51:36)

[GCC 8.2.1 20180905 (Red Hat 8.2.1-3)] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import yuhaohao

>>> yuhaohao

>>> yuhaohao.sulli1

Traceback (most recent call last):

File "", line 1, in

AttributeError: module 'yuhaohao' has no attribute 'sulli1'

>>> yuhaohao.sulli2

Traceback (most recent call last):

File "", line 1, in

AttributeError: module 'yuhaohao' has no attribute 'sulli2'

可以看出yuhaohao的路径被包含在python的sys.path的环境变量中。但是sulli1.py和sulli2.py并没有被导入。

如果想要在import yuhaohao后自动加载sulli1和sulli2模块,这里可以在__init__.py文件中增加如下内容:

import sulli1

import sulli2

第二种方案就是手动导入,当想使用模块sulli1中的tl()函数时,需要手动导入

>>> import yuhaohao.sulli1 as yu

>>> yu.tl()

下面是一个更复杂的例子,下载的URL为:https://www.python-course.eu/sound1.tar.bz2

解压后,文件结构如下:

sound

|-- effects

| |-- echo.py

| |-- __init__.py

| |-- reverse.py

| `-- surround.py

|-- filters

| |-- equalizer.py

| |-- __init__.py

| |-- karaoke.py

| `-- vocoder.py

|-- formats

| |-- aiffread.py

| |-- aiffwrite.py

| |-- auread.py

| |-- auwrite.py

| |-- __init__.py

| |-- wavread.py

| `-- wavwrite.py

`-- __init__.py

这里直接使用import sound来导入这个package时,我们可以导入package sound,但是sound的子package(effects,filters,formats)并不会被自动

导入,子package不会被自动导入的原因是因为在sound目录下的__init__.py文件并没有任何关于导入子package的代码。

导入sound:

>>> import sound

sound package is getting imported!

>>> sound.effects

Traceback (most recent call last):

File "", line 1, in

AttributeError: module 'sound' has no attribute 'effects'

如果你想使用子package的内容,但是在父package的__init__.py的文件内并没有导入,你需要手动导入

>>> import sound.effects

effects package is getting imported!

>>> sound.effects

如果你希望python帮你自动导入sound.effects你可以往sound目录下的__init__.py文件写入

"""An empty sound package

This is the sound package, providing hardly anything!"""

import sound.effects

print("sound package is getting imported!")

当然了,除了使用绝对路径你可以使用相对路径来导入sound.effects

"""An empty sound package

This is the sound package, providing hardly anything!"""

from . import effects

print("sound package is getting imported!")

这跟linux的命令行比较像,.代表当前目录,..代表上级目录。所以你可以在sound.effects的__init__.py文件内写入

from .. import formats

参考链接:https://www.jianshu.com/p/178c26789011

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

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

相关文章

html 手机端无法拖动地图,关于腾讯地图api的禁止地图拖动问题

禁用滚动和拖动*{margin:0px;padding:0px;}body, button, input, select, textarea {font: 12px/16px Verdana, Helvetica, Arial, sans-serif;}p{width:603px;padding-top:3px;overflow:hidden;}.btn{width:142px;}#container{min-width:600px;min-height:767px;}//初始化函数…

《一起》个人进展——Day07

昨天做了些什么:实现登录界面的美化 今天的计划:还是准备进行与其他界面的融合 遇到的困难:代码了解不够,融合起来会出现bug转载于:https://www.cnblogs.com/gxt-/p/6828131.html

epoll nio区别_【总结】两种 NIO 实现:Selector 与 Epoll

我想用这个话题小结下最近这一阶段的各种测试和开发。其实文章的内容主要还是想总结一下NIO Socket,以及两种不同操作系统实现NIO的方式,selector和epoll。问题应该从服务器端开始说起。我们都写过net包下的socket,用socket的accept方法来等待…

MapReduce的工作原理

一、MapReduce模型框架 MapReduce是一个用于大规模数据处理的分布式计算模型,最初由Google工程师设计并实现的,Google已经将完整的MapReduce论文公开发布了。其中的定义是,MapReduce是一个编程模型,是一个用于处理和生成大规模数据…

react实现多行文本超出加省略号

http://www.css88.com/archives/5206 overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; 根据该文章方法,放在react项目中发现并不能实现,仔细观察发现原来react解析出来的css样…

Google Guava MultiMaps

番石榴 这是系列文章中的第一篇,我将尝试解释和探索Google很棒的Guava java库 。 我在搜索Apache Commons Collections的通用版本时遇到了番石榴(Guava)–我需要一个Bimap并且厌倦了必须使用强制类型转换来填充我的代码–但是我发现要好得多…

qq群 html,我的群组-普通群组.html

我的群组-普通群组$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resou…

查看PLC IP 端口_西门子828D数控系统X130接口通讯怪异现象(X130手动设置的 IP)...

西门子828D数控系统,调试PLC过程中遇到网络通信怪异问题(不能直连非要加个路由器),笔记本电脑的以太网网络直接连接显示网络电缆被拔出,如下图所示:奇怪,怎么出现这种情况了呢,因为我用这台电脑调试过别的P…

基于嵌入式系统的gnash最小库依赖关系

已经对gnash的依赖库作了详细的分析,下边是必须依赖的库:GIF Required libungif-devlibxml2 Required libxml2-devPNG Requir…

git 创建webpack项目_一次create-react-app创建项目升级webpack的流水账

不再赘述为什么要升级webpack4,有兴趣的小伙伴可以看一下 知乎:如何评价webpack4下面撸起袖子开干:克隆项目,新建分支git checkout -b feature_webpack_upgrade# 相当于以下两句的简写git branch feature_webpack_upgradegit chec…

bzoj1263

贪心 n%31 分出一个4&#xff0c;其余用3&#xff0c;n%32&#xff0c;分出一个2&#xff0c;其余用3&#xff0c;然后高精度就行了 #include<bits/stdc.h> using namespace std; const int N 5005; struct BigInt {int len;int a[N];BigInt() { memset(a, 0, sizeof(a)…

c语言volatile_[技术]为什么单片机C语言编程时某一变量有时乱码

最近一个项目里面&#xff0c;在KEIL中用C语言在单片机里面定义了一个状态机全局变量&#xff0c;这个变量随时会改变&#xff0c;用于切换触摸屏的界面&#xff0c;可是程序运行中出现了一个问题&#xff0c;这个状态机号总是出现了被莫名奇妙改变的问题&#xff0c;导致触屏不…

沙箱Java代码

在上一篇文章中&#xff0c;我们研究了如何保护移动Java代码 。 这样做的一种选择是在笼子或沙箱中运行代码。 这篇文章探讨了如何为Java应用程序设置这样的沙箱。 安全经理 Java中支持沙箱的安全性设施是java.lang.SecurityManager 。 默认情况下&#xff0c;Java在没有Se…

微型计算机2017年9月上,2017年9月计算机一级考试WPS Office冲刺题

2017年9月计算机一级考试WPS Office冲刺题2017年下半年计算机一级考试将在9月份进行&#xff0c;为了方便考生备考计算机一级考试。下面是小编为大家带来的计算机一级考试WPS Office冲刺题&#xff0c;欢迎阅读。冲刺题一&#xff1a;1、PowerPoint 演示文稿和模板的扩展名是【…

七. 多线程编程5.创建多线程

到目前为止&#xff0c;我们仅用到两个线程&#xff1a;主线程和一个子线程。然而&#xff0c;你的程序可以创建所需的更多线程。例如&#xff0c;下面的程序创建了三个子线程&#xff1a;// Create multiple threads.class NewThread implements Runnable { String name; /…

11尺寸长宽 iphone_弱电工程LED显示屏尺寸规格及计算方法

前言&#xff1a;led屏幕在生活中&#xff0c;随处可见&#xff0c;显示屏、广播屏等等&#xff0c;但是led尺寸怎么计算的&#xff0c;你知道吗&#xff1f;今天我们一起了解一下led屏幕尺寸的计算方法。正文&#xff1a;一、点间距的计算1、各单元板常见型号及尺寸LED屏普遍是…

marquee标签的使用

<!DOCTYPE html> <html> <head><meta charset"utf-8" /><title>演示marquee</title><style type"text/css">*{padding: 0px;margin: 0px;}marquee{border: 1px solid purple;}img{width: 360px;height: auto;}&…

32位数据源中没有mysql_[SpringBoot实战]快速配置多数据源(整合MyBatis)

前言由于业务需求&#xff0c;需要同时在SpringBoot中配置两套数据源&#xff08;连接两个数据库&#xff09;&#xff0c;要求能做到service层在调用各数据库表的mapper时能够自动切换数据源&#xff0c;也就是mapper自动访问正确的数据库。本文内容&#xff1a;在SpringbootM…

考研计算机冷门学校,考研5个冷门的985院校 别随大流,这些几所也是很不错的...

导语&#xff1a;想必大家考研的目的有很多&#xff0c;最主要的就是想去更好的学校提升自己&#xff0c;大部分会肯定是会更倾向于985这类的院校&#xff0c;每年其实除了那些被“挤破头”的985院校&#xff0c;其实还有不少“低调”的985院校是非常值得报考的&#xff0c;下面…

名为 cursor_jinserted 的游标不存在_质量工程师必须了解的测量常识,你不知道怎么行...

01测量器具的分类测量器具是一种具有固定形态、用以复现或提供一个或多个已知量值的器具。按用途的不同量具可分为以下几类&#xff1a;1. 单值量具只能体现一个单一量值的量具。可用来校对和调整其它测量器具或作为标准量与被测量直接进行比较&#xff0c;如量块、角度量块等。…