python知识积累(五)——编写模块

【Python】`__init__.py` 文件详解 本文针对Python开发者, 详细描述了__init__.py文件在参与包、模块、命名空间导入/重命名/初始化时的使用方法,以及其中代码的执行机制。 本文使用边执行案例,边分析,边给结论的方法,描述了__init__.py文件的四大作用。 模块搜索标记 初始化命名空间, 空间名称即为目录名 设置__all__ 通配符导入目标 为同一目录的其他模块定义命名空间。 阅读详情
python中的Module是比较重要的概念。常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import。这样的做法,对于少数文件是可行的,但如果程序数目很 多,层级很复杂,就很吃力了。
有没有办法,像Java的Package一样,将多个.py文件组织起来,以便在外部统一调用,和在内部互相调用呢?答案是有的。
主要是用到python的包的概念,python __init__.py在包里起一个比较重要的作用
要弄明白这个问题,首先要知道,python在执行import语句时,到底进行了什么操作,按照python的文档,它执行了如下操作:
第1步,创建一个新的,空的module对象(它可能包含多个module);
第2步,把这个module对象插入sys.module中
第3步,装载module的代码(如果需要,首先必须编译)
第4步,执行新的module中对应的代码。

在执行第3步时,首先要找到module程序所在的位置,其原理为:
如 果需要导入的module的名字是m1,则解释器必须找到m1.py,它首先在当前目录查找,然后是在环境变量PYTHONPATH中查找。 PYTHONPATH可以视为系统的PATH变量一类的东西,其中包含若干个目录。如果PYTHONPATH没有设定,或者找不到m1.py,则继续搜索 与python的安装设置相关的默认路径,在Unix下,通常是/usr/local/lib/python。
事实上,搜索的顺序是:当前路径 (以及从当前目录指定的sys.path),然后是PYTHONPATH,然后是python的安装设置相关的默认路径。正因为存在这样的顺序,如果当前 路径或PYTHONPATH中存在与标准module同样的module,则会覆盖标准module。也就是说,如果当前目录下存在xml.py,那么执 行import xml时,导入的是当前目录下的module,而不是系统标准的xml。

了解了这些,我们就可以先构建一个package,以普通module的方式导入,就可以直接访问此package中的各个module了。

Python中的package定义很简单,其层次结构与程序所在目录的层次结构相同,这一点与Java类似,唯一不同的地方在于,python中的package必须包含一个__init__.py的文件。
例如,我们可以这样组织一个package:

package1/
    __init__.py
    subPack1/
        __init__.py
        module_11.py
        module_12.py
        module_13.py
    subPack2/
        __init__.py
        module_21.py
        module_22.py
    ……


__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py中也可以设置相应的内容,下文详细介绍。

好了,现在我们在module_11.py中定义一个函数:

def funA():
    print "funcA in module_11"
    return

在顶层目录(也就是package1所在的目录,当然也参考上面的介绍,将package1放在解释器能够搜索到的地方)运行python:

>>>from package1.subPack1.module_11 import funcA
>>>funcA()
funcA in module_11

这样,我们就按照package的层次关系,正确调用了module_11中的函数。

细心的用户会发现,有时在import语句中会出现通配符*,导入某个module中的所有元素,这是怎么实现的呢?
答案就在__init__.py中。我们在subPack1的__init__.py文件中写

__all__ = ['module_13', 'module_12']

然后进入python

>>>from package1.subPack1 import *
>>>module_11.funcA()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named module_11

也就是说,以*导入时,package内的module是受__init__.py限制的。

好了,最后来看看,如何在package内部互相调用。
如果希望调用同一个package中的module,则直接import即可。也就是说,在module_12.py中,可以直接使用

import module_11

如果不在同一个package中,例如我们希望在module_21.py中调用module_11.py中的FuncA,则应该这样:

from module_11包名.module_11 import funcA


reference:

http://www.cnpythoner.com/post/2.html

 


If you have any questions or ideas ,please feel free to contact me : )

thx.^^


QQ: 1623213673


知识积累对意识管理的影响 知识积累对意识管理的影响 1. 背景介绍 1.1 问题的由来 在当今信息爆炸的时代,我们每天都面临着海量的信息输入,这些信息不断地冲击着我们的意识,塑造着我们的认知。然而,我们如何有效地管理这些信息,如何将知识转化为智慧,并最终提升我们的意识水平,成为 阅读详情

相关推荐

计算投入时间:即使是失败的项目也能积累专业知识

计算投入时间,专业知识积累,失败项目,学习经验,技术成长,项目管理,软件开发,人工智能 1. 背景介绍 在瞬息万变的科技领域,持续学习和提升专业技能至关重要。然而,并非所有项目都能够取得成功,失败的项目也蕴藏着宝贵的经验和教训。本文将探讨如何从失败的项目中汲取知识,将其转化为专业技能

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1138

Python 模块下 __init__.py 文件

综上所述,文件在 Python 包中具有初始化包、控制包的导入行为和提供包级别功能的作用。我们可以根据需要在文件中编写代码来满足这些需求,并更好地组织和管理你的包。

Python栈 1万+

Python模块包中__init__.py文件功能分析

主要介绍了Python模块包中__init__.py文件功能,简单分析了__init__.py在调入模块和包的过程中的作用,需要的朋友可以参考下

Python中__init__.py文件的作用详解

init.py 文件 init.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。 通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。 # package # __init__.py import re import urllib import sys imp

wu_zhiyuan的博客 1万+

51单片机AHT20-21源代码

传感器输出经过 标定的数字信号,标准 I 2 C 格式。AHT20 配有一个全新设计的 ASIC专用芯片、一 个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其 性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器, 经过改进使其在恶劣环境下的性能更稳定。但是现在网上的大多数原码都是针对stm32等的这种多位单片机,而我们都知道51单片机是8位单片机,无法对浮点数进行运算,对32位的整数计算有时候也不是很准确,所以我对网上stm32的例程进行了修改。...

wd0710的博客 4545

信道估计之MMSE算法

信道估计之MMSE算法前言MMSE估计的原理总结 前言        前篇分析了LS信道估计算法,也说明了由于没有考虑SNR的影响,所以LS算法不适合在低信噪比的情况下使用。本篇来学习信道估计的另外一种常用的算法–MMSE。        为什么说LS没有考虑噪声大小的情况呢,因为LS算法使用的是实际观测量与估计观测量的误差,这并不能精确的代表估计量的真值与估计值的误

大白的博客 2万+

Python __init__.py

Python __init__.py 作用详解尼古拉苏关注12018.06.10 12:57:34字数 745阅读 45,278转载于:https://www.cnblogs.com/tp1226/p/8453854.html __init__.py该文件的作用就是相当于把自身整个文件夹当作一个包来管理,每当有外部import的时候,就会自动执行里面的函数。 1. 标识该目录是一个python的模块包(module package) 如果你是使用python的相关IDE来进行开发,那么如果目录中存在该文件,

qq_15821487的博客 6196

GAN模型中的常见变体有哪些,如DCGAN、WGAN和CGAN等?

生成对抗网络(GAN)是一种强大的深度学习模型,它由生成器和判别器两个网络组成,通过对抗训练的方式实现生成数据的能力。随着研究的发展,出现了许多GAN的变体,每个变体都有其独特的改进和特点。

huidhsu的博客 2260

python 知识点积累《1-6》

print(sorted_by_value) # 输出: {'pear': 1, 'orange': 2, 'banana': 3, 'apple': 4}3)在定义字符串时,如果字符串中包含大量文本或者包含很多需要转义的字符,使用三引号('''或"")也是一个不错的选择,可以避免使用过多的转义字符。1)必须是不可变的,可以是整数、浮点数、字符串、元组,但是列表、字典、集合不能作为键,因为它们是可变的。print(list_from_s) # 输出: ['h', 'e', 'l', 'l', 'o']

qq_21433199的博客 1461

IAR9.X半主模式异常解析:为何硬件复位后仍陷调试状态?

本文深入解析了IAR 9.X半主模式异常问题,探讨了硬件复位后MCU仍陷调试状态的原因及解决方案。通过分析半主模式工作机制,提供了禁用半主功能、重写低级IO函数等具体方法,并给出了版本兼容性处理和调试与量产配置分离的优化建议,帮助开发者有效解决复位异常问题。

oo7890的博客 604

SAP 小结

关于SAP 开发的实习就要告一段落了,从刚开始接触,到现在已经6个月了,想要很简要的把自己对SAP的理解写出来,便于以后查阅(不定期更新)。 1. 什么是SAP? 广义的SAP,可以指代SAP公司以及SAP的各种产品,它的意义要在特定语境下才能确定。一般我们所说的SAP特指SAP ERP。 SAP ERP(enterprise resource planning)是一个企业信息系统。通过这个系

Remy的博客 1951

Python 模块 积累

1. import random 随机数 # -*- coding: UTF-8 -*- import random print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数 print( random.random() ) # 产生 0 到 1 之间的随机浮点数 print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数 prin

sdgpcc2000的博客 492

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 382

python知识积累

一、range()函数 python range() 函数可创建一个整数列表,一般用在 for 循环中   range(start,stop[,step])   start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);   stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1...

baiwang9518的博客 168

最新Python爬虫实战(入门爬虫篇)——案例18:某气象局全国天气预报数据采集(详细爬虫思路截图 + 抓包动图演示+完整爬虫代码+详细注释)

本次案例针对某气象局天气预报网的静态HTML页面,实现了全国各地区天气数据的全自动化爬取,和之前案例17的动态接口爬虫不同,本次案例聚焦于静态页面的爬虫实现,覆盖了从抓包分析、请求模拟、数据解析到数据存储的完整爬虫流程,非常适合入门学习者巩固基础,核心知识点和实现要点总结如下:首先是页面分析的核心逻辑,静态HTML页面的数据爬取,核心在于通过浏览器开发者工具,完成完整的抓包分析和标签结构定位。

努力让自己发光,对的人才能迎着光而来 27万+

YOLOv8-Pose NCNN Android部署优化实践

本文探讨了在Android设备上高效部署YOLOv8-Pose姿态检测模型的优化实践。通过修改Pose头部导出逻辑,分离后处理到C++端实现,并替换SiLU激活函数为ReLU,显著提升了计算效率。具体步骤包括模型结构优化、ONNX导出、NCNN转换与算子融合,最终在Android端实现了30FPS的稳定推理性能。项目提供了完整的优化思路和实现方案,对移动端AI应用开发具有参考价值。

FJN110的博客 323

Python入门:Python3 模块全面学习教程

Python入门:Python3 模块全面学习教程,本文详细介绍Python3模块相关知识,包括模块定义、作用,如代码复用、管理命名空间和组织代码。讲解了模块多种导入方式,如import语句、from…import语句等,以及模块搜索路径和避免冲突的方法。还介绍了__name__属性、dir()函数的作用,常用标准模块,以及包的结构和导入方式。掌握这些能提升代码可维护性与复用性,是编写大型项目的基础,建议合理划分模块练习使用。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 12万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

总结一下Python的模块加载解析

正式的Python专栏第16篇,同学站住,别错过这个从0开始的文章! 学委之前分享了很多代码,也发布了几个库。 新手可以从两篇基础文章入手学习,积累了一些代码,可以考虑做成一个个模块,包装代码有利调用和传播! 何为模块 小雷拿了一个短棍,一个铁方块,接着把铁块跟短棍焊接一起,就是我们看到的雷神之锤了!(如下,一把简陋的锤子) 为什么说这个锤子? 模块就是一组python功能集合,比如sys, 或者requests这个就是一个模块,或者学委开发的pypiseed也是一个模块,简单理解就是,把基础py.

持续学习持续开发,我是雷学委! 2312

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python小知识积累

python小知识积累 1、如何理解一切皆对象的python变量类似C语言的指针引用? id() 函数返回对象的唯一标识符,标识符是一个整数。 CPython 中 id() 函数用于获取对象的内存地址。 Python为了高效利用内存而采取的一种机制,a和b都是对一个内存中对象的引用,赋值(=)实际上是创建一个对象,将地址给引用变量。a is b 相当于 a和b不仅内容相同,地址也相同,可能这也是必须写 if x is None 的原因。 在Python中,一切都是对象,所有变量都是对某个对象的应用(

mystudyblog0507的专栏 317

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python模块 积累学习

python模块积累学习 chinesecalendar math datetime os numpy

waow的进阶之路 296

python积累

一些常使用的工具、操作积累,方便日后查找使用。

zg的博客 246

python 知识积累

1. pd.read_csv()函数用法 假设数据文件名:dl_data.csv文件: 数据 行索引为:[-20......19];列索引为:[-25......25] 语句分析: 1、q_table6 = pd.read_csv(‘dl_data.csv’,encoding = “utf-8”,header = 0,names = range(0,50)) 功能:将原来的列索引[-25…25...

RR___的博客 283

python小知识点积累

shutil.rmtree()表示递归删除文件夹下的所有子文件夹和子文件 from unittest import mock python3.4后内置mock库 python单例模式: """ 装饰器(decorator)可以动态地修改一个类或函数的功能。也可以使用装饰器来装饰某个类,使其只能生成一个实例 """ from functools import wraps # 定...

qq_34620701的博客 217

趁着课余时间学点Python(十五)有趣的小模块

视频转gif,链接生成自定义二维码,时间,随机数,词云模块

布小禅的博客 7158

**实践编程:通过编写小程序和参与开源项目积累Python编程经验**

2. **参与开源项目的维护与贡献**:除了参与开源项目的开发,还可以积极参与项目的维护,为项目贡献代码、文档、测试用例等。2. **寻找合适的工作机会与发展平台**:通过实践编程和积累经验,可以更好地了解自己的兴趣和能力所在,从而找到合适的工作机会和发展平台。4. **与社区成员交流**:开源项目的社区是一个宝贵的资源,可以通过与社区成员交流,学习他们的编程经验、解决问题的方法和最佳实践。3. **参与代码编写和测试**:根据项目的需求和自己的技能,参与代码的编写和测试。五、**职业规划与发展**

博客域名:borter.blog.youkuaiyun.com 409
上一篇: python知识积累(四)——文件操作
下一篇: wordpress的搭建和配置
codingkid
博客等级 码龄16年 81粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值