首先需要将import内容建立一个大概如下层级的包:

以黑色框为第一级,蓝色框为第二级,棕色框为第三级,红色框为第四级

一.import 引入初识

首先在module.py写入代码如下:

xboy = "hsz"
xgirl = "zero" def dog():
print("小狗喜欢啃骨头") def cat():
print("这个小猫的名字叫做小花") class MyStu():
name = "Python" print("hello python")
print(__name__) if __name__ == "__main__":
#如果是间接的被导入,下面的代码不执行
print("test")

然后在main.py写入代码并逐个运行:

1.import 引入

import module
#请记住:当导入模块的时候,只需要一次即可,终身受益.不会出现重复导入的情况
#模块.属性(变量)
res = module.xboy
print(res) #模块.函数(方法)
module.dog() #模块.类
print(module.MyStu().name) #使用别名调用模块当中的成员
import module as m
print(m.xboy)
m.cat() import sys
print(sys.path)
"""
#自定义模块,进行导包
'''
在导包的时候,系统默认先从sys.path 这个路径开始寻找,如果找不到,直接报错,
如果想要找到,把相应的路径插入到sys.path这个列表,系统自动寻找对应模块.
'''
import sys
"""
sys.path.append(r"F:/hsz/zero/ceshi_module/") #
import abcd
print(abcd.ceshi001)

然后对上面的mian.py里的内容进行注释,往后添加如下代码进行一步步运行:

 2.from...import 从哪里..引入...方法


#引入一个
from module import dog
dog() #引入多个
from module import cat,xgirl
cat()
print(xgirl) #引入所有 * 代表所有
from module import *
print(xboy) #可以在引入的同事,起一个别名
from module import cat as c,xboy as ww
print(ww)
c() print(__name__,type(__name__)) #__main__
"""
#返回模块名字的魔术属性 __name__
如果当前文件是直接执行的,就是主文件(主进程),返回__main__
如果当前文件是间接执行的,就是子文件(子进程),返回当前文件名(模块名)
""" if __name__ == "__main__" : #if "main" == "__main__" 条件不成立 , 下面的代码不执行,不导入
# __name__ == __main__ 用来做测试用的, 在被间接导入的时候,下面的代码不需要导入
print("test code")

3.学习导入包

先对a.py 写入代码:

ceshia = 10011
ceshia2 =10012
ceshia3 = 10013

对mypath.py写入代码:

def join():
print("自定义join") ceshimypath = "mypath2345678"

还有package1下的__init__.py

ceshi101 = 10111111

# __init__ 不是用来直接运行的,而是伴随包的初始化的.

# 方法三调用时,打开进行测试.
# from package1 import a
# from package1 import mypath

然后对main2.py写入代码,一个方法一个方法进行运行

#文件就是一个模块,文件就是一个包
#文件夹里面可以有很多文件,就相当于包中有很多的模块
#如果想把包当成模块用,在创建一个__init__.py中进行定义
#当引入一个包的时候,当前包下的__init__文件自动执行
import package1
print(package1.ceshi101) #方法一
import package1.a
print(package1.a.ceshia) #方法二 (起别名)
import package1.a as pa
print(pa.ceshia2) #方法三
# print("======方法三=========")
# print(package1.a.ceshia)
# package1.mypath.join() # 类比os.path.join的用法

注意:方法三只有在用的时候才将注释去掉运行测试,为了不影响接下来的运行,运行完方法3后对其进行注释

4.from ..import 语法

然后对main2.py接下来的运行做好准备,需要在个个包下的文件添加内容如:

/package2/pkgone/pkgone2.py 内容为:

ceshippone2 = "ceshione2"
ceshippone22 = "ceshione22"

/package2/pkg_module1.py内容为:

ceshim1 = "m1"

/package2/pkgtwo/pkgtwo1.py内容为:

ceshi222 =222
ceshi2222 = 222222

接下来是main2.py添加如下代码:

#引入package1包下 a模块中的ceshia2 属性
from package1.a import ceshia2
print(ceshia2) #引入的同事,起别名
from package1.mypath import ceshimypath as cm,join as j
print(cm)
j()
## 引入 package2 包下的 pkgone 包下的 pkgone1 模块 ,顺便起别名ppp1
import package2.pkgone.pkgone1 as ppp1
print(ppp1.ceshippp)

对此代码块进行一 一测试

5.单入口模块(重要)

分模块不能单独进行调用,统一由主文件main进行调用
模块之间的互相嵌套导入使用相对路径实现
单入口文件必须和包在同一层级,包里面可以含有各种包和模块


#单入口模式主要是对子文件的内容进行测试,在/package2/pkgone/pkgone1.py文件下添加如下代码:
ceshippp = "测试pppone"
ceshippp1 = "测试pppone1" #子文件,如果是单入口模块,不能直接执行,因为在这里都用的的相对路径
#1. from . import pkgone2
print(pkgone2.ceshippone22)
#2.
from.pkgone2 import ceshippone2
print(ceshippone2)
#3.
from .. import pkg_module1
print(pkg_module1.ceshim1)
#4.
from .. pkgtwo import pkgtwo1
print(pkgtwo1.ceshi222)
#5.
from ..pkgtwo.pkgtwo1 import ceshi2222
print(ceshi2222) """
. 当前路径
.. 上一级路径
... 上一级的上一级
.... 上一级的上一级的上一级
..... (这里的点是无限的)
from .......................................... import 模块
"""

最后是在main2.py进行测试,将pkgone1.py文件一行行注释后,然后分5次将注释打开进行测试,并查看结果,理解单入口模式的使用方法

Python 基础之import导包的更多相关文章

  1. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  2. 【python3】 解:import导包机制

    模块和包 模块:我们定义的.py结尾的文件就是一个模块,模块中通常定义了类.方法.变量等一系列功能: 包:存放模块的文件夹,含有init.py文件,定义path属性. import语句的作用 impo ...

  3. python中常用的导包的方法和常用的库

    python中常用的导包的方法               导入包和包名的方法:1.import package.module 2.from package.module import  * 例一: ...

  4. python基础之打/解包及运算符与控制流程

    python基础之打/解包及运算符与控制流程 python中的解压缩(即序列类型的打包和解包) python提供了两个设计元祖和其他序列类型的处理的便利,也就是自动打包与自动解包功能,比如: data ...

  5. python基础之import模块导入和包的调用

    模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. ...

  6. Go基础系列:import导包和初始化阶段

    import导入包 搜索路径 import用于导入包: import ( "fmt" "net/http" "mypkg" ) 编译器会根据 ...

  7. python 设置默认的导包路径

    在python中 可以通过 sys 模块添加导包时的搜寻路径, sys.path 返回的是所有默认导包路径的列表(搜索次序从下标为零开始,直到寻找到需要导入的包结束) sys.path.insert( ...

  8. import 导包三种方法

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #导包三种方法 #(常用)完整的导入,也是最基本的方法 import re #自己定义别名,一般情况下尽量少用 ...

  9. Python基础知识思维导图|自学Python指南

    微信公众号[软件测试大本营]回复"python",获取50本python精华电子书. 测试/开发知识干货,互联网职场,程序员成长崛起,终身学习. 现在最火的编程语言是什么?答案就是 ...

随机推荐

  1. C:数组基础

    数组 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来--称为数组. 数组就是在内存中连续的相同类型的变量空间.同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的 ...

  2. Bug搬运工-CSCvf74866:Webauth scaling improvements - fix problem with GUI going unresponsive with HTTPS redirect

    Webauth scaling improvements - fix problem with GUI going unresponsive with HTTPS redirect CSCvf7486 ...

  3. json 字符串 <----> json 对象

    一,字符串 -->JSON对象 1,转换函数 JSON.parse(json_str): 2,$.parseJSON(json_str):  用的是 jquery 的插件  所以需要引入 jq. ...

  4. 【PAT甲级】1088 Rational Arithmetic (20 分)

    题意: 输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式.小数需要用"("和")"括起来,分母为0的话输出"Inf&qu ...

  5. $.extend({},旧的,新的);合并对象,后面的覆盖前面的

    $.extend({},旧的,新的):合并对象,后面的覆盖前面的: <script> $(function(){ int={ a:1, b:function(){console.log(' ...

  6. Django中 from django.utils import timezone 和import datetime的区别

    在现实环境中,存在多个时区,用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统,所以如果网站面向的是多个时区用户,只以当前时间为标准开发,便会在时间上产生错误. 为解决这个此类问 ...

  7. ASP.NET Core搭建多层网站架构【8.1-使用ViewModel注解验证】

    2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[8.1-使用ViewModel注解验证] 使用V ...

  8. Elasticsearch系列---初识mapping

    概要 本篇简单介绍一下field数据类型mapping的相关知识. mapping是什么? 前面几篇的实战案例,我们向Elasticsearch索引数据时,只是简单地把JSON文本放在请求体里,至于J ...

  9. 【代码总结】PHP面向对象之常见的关键字和魔术方法

    一.关键字的使用 1.final关键字 只能用来修饰类 和 成员方法  不能修饰成员属性 被final修饰的类不能被继承 用final修饰的成员方法 不能被子类覆盖(重写) <?php // f ...

  10. js HTML 年月日星期 时间的

    效果格式:2019 年 04 月 13 日 星期六 13 : 24 : 49上面的类名有多余的 因为这是之前项目中的 方便以后使用 <!DOCTYPE html> <html> ...