Python基础(二十六):模块和包简单介绍

模块和包简单介绍

一、模块

Python模块(Module),是⼀个 Python文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。

1、导入模块

1.1、导入模块的方式

  • import 模块名
  • from 模块名 import 功能名
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

1.2、导入方式详解

import

  • 语法
# 1. 导⼊模块
import 模块名
import 模块名1, 模块名2...
# 2. 调⽤功能
模块名.功能名()

  • 体验
import math
print(math.sqrt(9)) # 3.0

from..import..

  • 语法
from 模块名 import 功能1, 功能2, 功能3...
  • 体验
from math import sqrt
print(sqrt(9))

from .. import *

  • 语法
from 模块名 import *
  • 体验
from math import *
print(sqrt(9))

as定义别名

  • 语法
# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名
  • 体验
# 模块别名
import time as tt
tt.sleep(2)
print('hello')
# 功能别名
from time import sleep as sl
sl(2)
print('hello')

2、制作模块

在Python中,每个Python文件都可以作为⼀个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。

2.1、定义模块

新建⼀个Python文件,命名为 my_module1.py ,并定义 testA 函数。

def testA(a, b):
    print(a + b)

2.2、测试模块

在实际开中,当⼀个开发人员编写完⼀个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加⼀些测试信息.,例如,在 my_module1.py ⽂件中添加测试代码。

def testA(a, b):
    print(a + b)
testA(1, 1)

此时,无论是当前⽂件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行testA函数的调用。

解决办法如下:

def testA(a, b):
    print(a + b)
# 只在当前⽂件中调⽤该函数,其他导⼊的⽂件内不符合该条件,则不执⾏testA函数调⽤
if __name__ == '__main__':
    testA(1, 1)

2.3、调用模块

import my_module1
my_module1.testA(1, 1)

2.4、注意事项

如果使用from .. import .. 或 from .. import * 导入多个模块的时候,且模块内有同名功能。当调

用这个同名功能的时候,调用到的是后面导入的模块的功能。

  • 体验
# 模块1代码
def my_test(a, b):
    print(a + b)
# 模块2代码
def my_test(a, b):
    print(a - b)
 
# 导⼊模块和调⽤功能代码
from my_module1 import my_test
from my_module2 import my_test
# my_test函数是模块2中的函数
my_test(1, 1)

3、模块定位顺序

当导入⼀个模块,Python解析器对模块位置的搜索顺序是:

  1. 当前目录
  2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

注意

  • 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
  • 使用from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的功能。

4、__all__

如果⼀个模块文件中有 __all__ 变量,当使用 from xxx import * 导入时,只能导入这个列表中的元素。

  • my_module1模块代码
__all__ = ['testA']
def testA():
    print('testA')
def testB():
    print('testB')
  • 导入模块的文件代码
from my_module1 import *
testA()
testB()

二、包

包将有联系的模块组织在⼀起,即放到同⼀个文件夹下,并且在这个文件夹创建⼀个名字为 __init__.py 文件,那么这个文件夹就称之为包。

1、制作包

[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。

注意:新建包后,包内部会自动创建 __init__.py 文件,这个文件控制着包的导入行为。

1.1、快速体验

  1. 新建包 mypackage
  2. 新建包内模块: my_module1 和 my_module2
  3. 模块内代码如下
# my_module1
print(1)
def info_print1():
    print('my_module1')

# my_module2
print(2)
def info_print2():
    print('my_module2')

2、导入包

2.1、方法一

import 包名.模块名
包名.模块名.⽬标

体验

import my_package.my_module1
my_package.my_module1.info_print1()

2.2、方法二

注意:必须在 __init__.py 文件中添加 __all__ = [] ,控制允许导入的模块列表。

from 包名 import *
模块名.⽬标

体验

from my_package import *
my_module1.info_print1()

三、总结

1、导入模块方法

import 模块名
from 模块名 import ⽬标
from 模块名 import *

2、导入包

import 包名.模块名
from 包名 import *

3、__all__ = [] :允许导入的模块或功能列表

本文转载于网络 如有侵权请联系删除

相关文章

  • css3中的grid布局

    1.今天仔细看了一下grid布局,这个妖孽属性,类似栅格布局。是flex布局的升级版本。 display:flex;本身就已经可以在移动端横行了。但是grid会让移动端布局更加灵活好用。第一个需要掌握的就是display:grid;display:gird直接添加一个这样的属性会出现什么效果?答案是没啥效果。 更普通布局一样。<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width,initial-scale=1.0"> <title>css-grid</title> <style> .grid{display:grid;} </style> </head> <body> <divclass="grid&

  • 想给妹子表白但是不知如何开口?

    来都来了点个关注呗今天为大家介绍一款贼牛的软件,我把它称之为表白神器,七夕节的时候我就用这个软件和视频剪辑软件还有PS给女朋友做了一个短视频,她看了之后真的是开心到飞起。我会把软件安装包和我用的图片库放到公众号里,大家可以回复【我要表白】获取安装包首先我们打开软件,其中我们需要操作的有三个区域,分别是功能区,添加镶元区,放置原图区,功能区用来调整参数,添加镶元区用来添加图片库,就是马赛克图片中的马赛克点,放置原图区放置原图 然后我们添加原图到预览区,我们可以根据预览效果进行调整参数,做出效果最好的照片。点击右上角添加镶元区的小海豚来添加图片库然后我们进行添加图片,这里是先点击添加文件夹,然后选择图片库(放置图片的那个文件夹)最后点击保存列表,这里我们也可以选择从视频中提取镶元,这个比较方便,不需要整理图片库,做这个马赛克图片最费时间的应该是收集图片部分了,大家如果想用来表白的话,可以用女生最喜欢的电影,自拍照等做成女生的照片,然后打印出来,肯定能给她带来惊喜的然后我们点击确定就好啦,点击确定后我们会返回软件主页,然后按回车键即可。这时会出现以下效果,主页面下方会出现制作进度条,等达到百

  • org determination log

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文(CreativeCommons)CreatedbyWang,JerryonFeb29,2016GotostartofmetadataCRM_ORGMAN_DETERMINE_SET *&---------------------------------------------------------------------* *&ReportZTEST_LOG_HIST *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORTztest_log_hist. CHECKsy-uname='C5161442'. DATA:lr_entityTYPEREFTOcl_c

  • 设计模式概念总结

    这为我的学习笔记,原文为https://www.cnblogs.com/zhili/p/DesignPatternSummery.html1.单例模式(Singleton)  确保一个类只有一个实例,并提供一个全局访问点2.简单工厂优点:简单工厂模式解决了客户端直接依赖于具体对象的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。简单工厂模式实现了对责任的分割简单工厂模式也起到了代码复用的作用缺点:工厂类集中了所有产品创建逻辑,一旦没办法正常工作,整个系统都会受到影响系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,这样会造成工厂逻辑过于复杂   3.工厂方法模式4.工厂方法模式(factorymethod)  定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟其子类5.抽象工厂模式(AbstractFactory)   提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体类。 优点:  抽象工厂模式将具体产品的创建延迟到具体工厂的子类中,这样将对象的创建封装起来,可以减少客户端与具体产品类之间的依赖,从而使系统耦合低。这样更有利于后期

  • 电商小程序,订阅制成新一代“黑马”

    最近,江南布衣推出了一款名为“不止盒子”的小程序,深受消费者欢迎,这款“不止盒子”的亮点在哪呢,就在于消费形式的创新,率先推出“先试后买”的消费形式。小程序的出现使得传统电商从网页,APP逐渐转战小程序的战场,各类电商都以小程序的形式进行竞争,势必要在小程序领域进行创新。“不止盒子”就起了一个好头,它的执行程序是为用户提供“先试后买”的订阅服务——199元年费,6次专属搭配。你可以从每次收到的搭配中买下心仪的款式,并在5天内将剩余衣物寄回。目前的电商大多数都是以图片的形式展示商品,或者增加小视频,让模特来展示商品,但是这种形式已经无法满足现在的消费者了,商品描述与现实不符,商品材质差强人意,商品尺寸有偏差等等的情况出现。作为消费者,我们无法从图片或者小视频中做出决定的时候,就会借助商品评价作为参考,从已经购买过该商品的消费者中获得参考。商家当然会让自己的评论很精彩具有吸引力,“刷单”这个词就出现在大众视野,通过熟人或者雇人刷单,来增加好评率,这让商品的真实性更加大打折扣,所以有些消费者宁愿去价格较高的实体店购买商品,原因只有一个,可以试穿,现场知道这些商品的所有情况,不存在虚假的风险。

  • 跟我扯分布式事务之Try-Confirm-Cancel

    事情还得从事务说起。我说事情总是喜欢从字面意义说起。那事务究竟是什么意思呢?得从它的英文说起:Transaction。事务这是我找到的transaction的释义。其中有一个解释叫:accomplish,还有一个说:cometoasettlement。而且transaction可以拆分成两块,一个是trans,一个是action。trans有跨越之意,action由词根ag-而来,有行动,做事之意。那Transaction的大致意思就是:完成一件事情。这个事情也许是由多个部分组成,你得把每个部分都完成了,才算这件事情做成了。现在再回到软件领域中,我们最早接触的事务是数据库事务(也算是“本地事务”),后来又有了分布式事务。但他们的核心都是去完成一个事情。这个事情可以是一个本地就可以完成的,也可以是需要由多个服务共同来完成的。总之,他们都是为了要完成一件事情。也就是要完成一个business,业务。事务的进一步细化事务最开始出现在数据库中,而且还规定了ACID一致性模型。ACIDAtomicity原子性Consistency一致性Isolation隔离性Durability持久性BASE再

  • 测试 Linux 的可靠性

    本文记录了Linux内核和其他核心OS组件的测试结果与分析,从库和设备驱动程序到文件系统和网络,测试范围无所不含,所有的测试都是在相当不利的条件下进行,并且经历了很长的时间。IBMLinuxTechnologyCenter刚刚结束了这次长达三个多月的全面测试,并将他们的LTP(LinuxTestProject)测试结果与developerWorks的读者共享。IBMLinuxTechnologyCenter(LTC)成立于1999年8月,想让Linux成功的共同梦想使其与Linux开发团体直接合作。它的200多名员工使之成为开放源代码开发者的较大团队组织之一。他们提供的代码范围包括,从补丁到结构化的内核改变,从文件系统和国际化工作到GPL'd驱动程序。他们还致力于追踪IBM内部进行的Linux相关开发。LTC尤其感兴趣的领域是Linux可扩展性、适用性、可靠性和系统管理——所有的目的都是为了使Linux更适用于企业。他们为Linux团体所做出了诸多贡献,包括使Linux可以工作于S/390主机,将JFS日志文件系统移植到Linux,等等。LTC的另一项核心任务是,以测试商业项

  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附代码数据

    全文下载链接:http://tecdat.cn/?p=22617 本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器 %matplotlib inline import numpy as np import pandas as pd import statsmodels.api as sm from pandas_datareader.data import DataReader from datetime import datetime  DataReader(start=datetime(1947, 1, 1), end=datetime(2013, 4, 1)) 复制 相关视频 ** 拓端 ,赞11 ** 拓端 ,赞8 ** 拓

  • applicationContext.xml 配置文件的存放位置

    eb.xml中classpath:和classpath*:  有什么区别?  classpath:只会到你的class路径中查找找文件;  classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.   存放位置: 1:src下面需要在web.xml中定义如下: <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> < /context-param> 2:WEB-INF下面需要在web.xml中定义如下: <context-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/applicat

  • 1-idea使用tomcat9日志乱码

    idea使用Apache-tomcat9.x,控制台日志乱码 找到logging.properties编码改为GBK java.util.logging.ConsoleHandler.encoding=GBK 复制 作者:林宇风 出处:https://www.cnblogs.com/linyufeng/ 版权所有,侵权必究!标明出处,欢迎转载。

  • idea打包java可执行jar包

    1,在项目上鼠标右键-->OpenModuleSettings 2,Artifacts-->+-->JAR-->Frommoduleswithdependencies... 3,MainClass是你这个项目(脚本)的主方法,就是要运行的类,选一个 4,如下图,设置META-INF/MANIFEST.MF !!!!!切记,不能用默认的(起码我用默认的是不成功的)!!!!! 6,选中你这个项目的根目录,一定要放在根目录下 7,设置完是这样子的,关于JARfilesfromlibraries的两个选项: 选中第一个的话,打完包后是一个jar包 选中第二个的话,打完包后是一个jar包,外带你项目所用的jar包,个人推荐第二个 8,设置完后就可以点OK了 9,这个页面,Buildonmake打上勾,其他的不一样也没事 10,最后一步,BuildArtifacts...-->XXX.jar-->Build 11,复制这里的路径去找jar包就行   转自:http://www.cnblogs.com/blog5277/p/59205

  • 修改AutoCAD-Net-Wizards 支持VS2019

    修改AutoCAD-Net-Wizards支持VS2019    原因 官方提供的https://github.com/ADN-DevTech/AutoCAD-Net-Wizards/blob/ForAutoCAD2020/AutoCADNetWizardsInstaller/AutoCAD_2020_dotnet_wizards.zip支持的是.netframework4.7和VS2017。 目的 支持.netframework4.7.2和VS2010 步骤 下载代码https://github.com/ADN-DevTech/AutoCAD-Net-Wizards.git 切换到分支ForAutoCAD2020 下载并安装https://marketplace.visualstudio.com/items?itemName=WixToolset.WixToolsetVisualStudio2019Extension 下载并安装https://www.7-zip.org/download.html,在环境变量Path里面加上一条7z的安装

  • node中require加载规则

     

  • 封装

    封装 概念 封装(Encapsulation) 尽可能隐藏对象的内部实现细节,控制用户对对象的修改和访问权限,保障内部属性的安全。 1.1生活中的封装 1.2不安全的代码示例 publicclassCard{ publicStringnumber; publicStringpassword; publicdoublebanlance; publicstaticvoidmain(String[]args){ Cardcard=newCard(); //给属性赋值 card.number="2323234234234"; card.password="123456"; card.banlance=-1200000.00; //访问属性 System.out.println(card.number); System.out.println(card.password); System.out.println(card.banlance); } } 复制 存在问题: 1.直接通过对象访问属性,无法对属性所赋的值进行合法性判断。 2.数据不安全

  • 关于pycharm anaconda环境plt.show窗口无响应

    Python控制台 BackendQtAggisinteractivebackend.Turninginteractivemodeon. 解决办法, 在.py文件的运行配置处编辑运行配置。 去除勾选:使用Python控制台运行。

  • xcode7.1 安装不了Alcatraz怎么办.看这里

    按照github上面的安装的方法,但是发现并没有成功.这是为什么呢? 解决的方法是什么呢?   看下面:        这个时候新的问题来了,要怎么获取7.1的UUIDs呢?看下面:     打开你的终端,输入下面的代码就可以了:     defaultsread/Applications/Xcode.app/Contents/InfoDVTPlugInCompatibilityUUID   然后就可以看到这个界面,红色的框中的就是我们要获取的UUIDs         既然已经获取到了当前的xcode的UUIDs的信息,那么这个时候按照上面的步骤添加进去就可以了!

  • Linux 笔记 - 第十九章 配置 Squid 正向代理和反向代理服务

    一、简介 Squid是一个高性能的代理缓存服务器,对应中文的乌贼,鱿鱼的意思。Squid支持FTP,gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的,非模块化的,I/O驱动的进程来处理所有的客户端请求。 Squid将数据元缓存在内存和硬盘中,同时也缓存DNS查询的结果。Squid支持SSL,支持访问控制。由于使用了ICP(轻量Internet缓存协议),Squid能够实现层叠的代理阵列,从而最大限度的节约带宽。 SquidCache(简称Squid)是一个流行的代理服务器和Web缓存服务器软件。Squid可以做正向代理,也可以做反向代理。官方网站地址为:http://www.squid-cache.org/ 1.1正向代理 当Squid做正向代理时,Squid后面是客户端,客户端想访问外部网络资源,必须经过Squid。正向代理按其客户端配置方式不同,又可以分为标准(普通)代理模式和透明代理模式。 标准(普通)代理模式,是代理内部网络用户访问internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求

  • 加密和SSH认证

    *)高项里有和这块相关的,日常也偶有接触。 关键字有:加密、解密、秘钥、加密秘钥Ke、解密秘钥Kd、密文、明文、对称加密(DES、AES)、非对称加密(RSA)。 加密算法可以提供认证、数字签名等功能。 *)偶用到的认证 使用git和GitHub的时候,廖雪峰的教程里有这样的配置:    就顺便了解下SSH认证和加密。 #) 1$ssh-keygen-trsa-C"youremail@example.com"复制 这行命令:    网上说:SSH具有客户端/服务器(C/S)结构。在git和GitHub的例子中,就是这样,在本机电脑git和GitHub这种客户端/服务器之间,做加密认证。  

  • spring data jpa 详解

    本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现。如果需要了解该框架的入门,百度一下,很多入门的介绍。在这篇文章的接下来一篇,会有一个系列来讲解mybatis,这个系列从mybatis的入门开始,到基本使用,和spring整合,和第三方插件整合,缓存,插件,最后会持续到mybatis的架构,源码解释,重点会介绍几个重要的设计模式,这样一个体系。基本上讲完之后,mybatis在你面前就没有了秘密,你能解决mybatis的几乎所有问题,并且在开发过程中相当的方便,驾轻就熟。 这篇文章由于介绍的类容很全,因此很长,如果你需要,那么可以耐心的看完,本人经历了很长时间的学识,使用,研究的心血浓缩成为这么短短的一篇博客。 大致整理一个提纲:   1、Spring-data-jpa的基本介绍;   2、和Spring整合;   3、基本的使用方式;   4、复杂查询,包括多表关联,分页,排序等; 现在开始:   1、Spring-da

  • 序列

    1.内置序列类型概览 容器序列:list、tuple和collections.deque  序列:有序的排列,dict和set是容器但非序列(因为它们无序) 容器序列存放的是它们所包含的任意类型的对象的引用,能存放不同类型的数据(可嵌套使用)   扁平序列:str、bytes、bytearray(字节数组)、array.array 扁平序列存放的是值而不是引用,只能容纳一种类型,其实是一段连续的内存空间(不能嵌套使用)   可变序列:list、bytearray、array.array、collections.deque 不可变序列:tuple、str和bytes   2.列表推导和生成器表达式 Python会忽略代码里[]、{}和()中的换行,因此如果有多行的列表、列表推导、生成器表达式、字典这一类的,可以忽略不太好看的续行符\ 列表推导是你推导多少给多少,一下子计算全部出来;生成器是你需要时再计算,需要多少给多少 生成器表达式背后遵守了迭代器协议,可以逐个地产出元素,语法跟列表推导差不多,只不过把方括号换成圆括号而已。   3.元组不仅仅是不

  • Mysql 使用cmd运行sql脚本

    执行sql脚本文件 方法一 使用cmd命令执行(windows下,unix或linux在的其控制台下) 【Mysql的bin目录】\mysql–u用户名–p密码–D数据库<【sql脚本文件路径全名】,示例: D:\mysql\bin\mysql–uroot–p123456-Dtest<d:\test\ss.sql 注意: A、如果在sql脚本文件中使用了use数据库,则-D数据库选项可以忽略 B、如果【Mysql的bin目录】中包含空格,则需要使用“”包含,如:“C:\ProgramFiles\mysql\bin\mysql”–u用户名–p密码–D数据库<【sql脚本文件路径全名】 方法二 进入mysql的控制台后,使用source命令执行 Mysql>source【sql脚本文件的路径全名】或 Mysql>\.【sql脚本文件的路径全名】,示例: sourced:\test\ss.sql或者\.d:\test\ss.sql

相关推荐

推荐阅读