python模块/导入模块
索引取值与迭代取值的差异
l1 = [1,2,3,4,5]
1.索引取值
可以任意位置任意次数的取值
不支持无序类型的数据取值
print(l1[3])
print(l1[3])
#可以直接获取任意位置的数据,同一数据也可以无限次重复获取
2.迭代取值
只能从前往后依次取值,无法后退
支持所有类型的数据取值(无序,有序都可以)
l1 = l1.__iter__() # 使用.__iter__ 方法变身为迭代器
print(l1.__next__()) # 1
print(l1.__next__()) # 2
# 只可以依次取值,从前往后 无法退后
模块介绍
1,什么是模块?
内部具有一定功能的py文件,就是一个py文件里面有可运行的代码 就可以把这个文件理解为是一个模块
2.python模块的历史
起初python并不被看好,觉得太过简单不上档次,只是简单的调包侠。随着发展更多的人尝试python都爱上了模块调用,python中就是因为有很多强大的模块来兴起的
3.python模块的表现形式
1.py文件(也可以称之为模块文件)
2.含有多个py文件的文件夹(按照模块功能不同划分不同的文件夹储存)
3.被便衣为贡献库或Dll的c或C++扩展(可以理解为插件)
4.使用c语言编写并连接到了python解释器的内置模块(python解释器自带的内置模块)
模块的分类
1.自定义模块
也就是我们自己编写的py文件
2.内置模块
也就是python解释器中提供的内置模块
3.第三方模块
也就是其他人已经写好的出色的模块文件,我们可以下载使用
导入模块的两种句式
'''
前提: 1,在使用模块时,我们一定要清楚谁是执行文件,谁是被导入文件
2. 在开发项目时所有的py文件都应该使用纯英文的命名(尽量避免中文和空格)
3. 导入模块时只需要用文件名,不需要填写后缀名
'''
1.import 句式
import test
print(test.name) #正确 模块名.的方式调用模块内名称
print(name) # 错误,不可以直接调用模块内的名称
'''
当你在运行该句式时
1,首先在当前文件(执行文件)中产生了一个 模块名的名称空间
2. 被导入的模块里面的所有变量和名次 都会放到这个专属于它的名称空间内
3. 在当前文件中如果要使用模块内的名称,需要用 模块名.的方式使用
'''
2.from ... import ... 句式
以 from test import name
print(name) # 正确
'''
当你在运行该句式时
1.首先在当前文件产生了一个名称 test
2.然后把 test 文件里面的 name 名称 拿到了当前文件
3.然后在当前文件 就可以直接使用 name 该名称
'''
导入模块句式补充说明
1.import 和 from ... import ...两者的优点缺点
import句式
缺点:需要使用 模块名加.的方式才可以使用模块内变量名
优点:模块名加.的方式使用变量名可以避免模块名称与执行文件名称冲突
from ... import ...
缺点:容易造成变量名冲突,可能产生误导。使用时 我们要避免模块名称和执行文件名称重复问题
优点:可以直接使用模块内名称
2.重复导入模块
如果重复导入同一个模块,解释器只会导入一次,后面重复导入的模块代码不再次生效
3.模块名别名
加入我们遇到了一个很难记很长的模块名称时
import nikanwonanbunanjijiuwanshil
import nikanwonanbunanjijiuwanshil as nik
from test import nikanwonanbunanjijiuwanshil as nik
nikanwonanbunanjijiuwanshil.name #太麻烦了 这个名称太复杂了
nik.name # 这多舒服
我们可以使用 as 来给模块名备注 备注后就可以使用备注名来代替了
4,涉及导入多个模块
1.如果模块功能是同类的 可以使用 import 模块名,模块名
2.模块功能不同
import 模块1
import 模块2
建议使用第二种 不要怕麻烦 导就完事了
5.循环导入问题
两个文件之间彼此导入彼此并且相互使用各自名称空间中的名字 极容易报错
如何解决循环导入问题
1.确保名字在使用之前就已经准备完毕 #名称最好在导入模块代码执行前已经准备完毕
'''
name = 'moon'
import test2
'''
2.我们以后在编写代码的过程中应该尽可能避免出现循环导入
判断文件类型
所有的py文件都可以直接打印__name__对应的值
当py文件是直接文件 则 __name__ 对应的值是__main__
当py文件是被导入文件的时候(模块)时 __name__ 对应的值是 模块名
import test
print(__name__) # __main__ 因为这个在正在执行的文件中
test.py文件中
print(__name__) # test 因为这个是在被导入的文件中,被导入的模块中
当我们想在模块中或者某些文件中测试功能时
if __name__ == '__main__':
条件达成后运行的代码
这样就可以达到,当我们运行这个文件时这些代码才会生效,当别人调用这个文件时 if里面的子代码
不会生效。
上述脚本可以用来区分所在py文件内python代码的执行
使用场景:模块开发阶段自测 项目启动文件
*号的使用
from test import *
#此代码代码我们可以直接使用 test模块里面的所有名称
#*默认是将模块名称空间中所有的名字导入
#模块内有__all__ = ['名字1','名字2'] 这是设置目前可以被调用的名字
模块的查找顺序
模块名调用查找顺序:
1.内存
import test
import time
time.sleep(10) #假设在代码睡眠期间删除了 test文件
print(test.name) # 依然可以执行
内存优先级最高,当代码运行后文件数据已经被储存在内存中
2.内置
import time
print(time)
print(time.name) #报错
优先使用内置函数,为了避免出错,自定义模块时避免和内置模块名冲突
3.执行文件所在的sys.path(系统环境中)
一定是以当前执行的文件为准!!!
import sys
print(sys.path)
sys.path.append('/Users/moongod/Desktop/pythonProject/练习/ceshi/ceshi2')
#添加模块路径到当前可以查询到的路径列表中
import md
print(md.name)
我们也可以将模块所在的路径也添加到执行文件的sys.path
sys.path里面是一个列表,在这里列表里面才可以被当前执行文件直接获取到直接导入
所以如果模块不在同一个环境里面,就需要在环境里面添加
绝对导入和相对导入
1,首先当我们在导入文件时 一定要分清楚谁是正在被执行的文件
导入模块的路径都是已被执行文件所在路径为准
2. 绝对导入
from outer1.inner1.inner import module1
#根据当前执行文件所在地址 一层一层的找 执行文件跟outer1平级,然后找
#outer1文件夹>>>inner1文件夹>>>inner文件夹 然后在这个文件夹里面就可以找到模块 module1 成功导入
from outer1.inner1.inner.module1 import name
# 当然也可以一层一层的直接精确到变量名
3.相对导入
.在路径中表示当前目录
..在路径中表示上一层目录
..\..在路径中表示上上一层目录
不在依据执行文件所在的sys.path 而是以模块自身路径为准
from . import b
相对导入只能用于模块文件中 不能在执行文件中使用
'''
相对导入使用频率较低 一般用绝对导入即可 结构更加清晰
'''
python模块/导入模块的更多相关文章
- python有三种导入模块的方法(转)
原文:http://www.cnblogs.com/allenblogs/archive/2011/11/15/2055149.html python有三种导入模块的方法 其一, import mod ...
- python中导入模块的本质, 无法导入手写模块的解决办法
最近身边一些朋友发生在项目当中编写自己模块,导入的时候无法导入的问题. 下面我来分享一下关于python中导入模块的一些基本知识. 1 导入模块时寻找路径 在每一个运行的python程序当中,都维护了 ...
- Python 动态导入模块
动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │ └── aa.py ├── test1.py lib目录下 ...
- python 全栈开发,Day28(复习,os模块,导入模块import和from)
一.复习 collections 增加了一些扩展数据类型 :namedtuple orderdict defaltdict队列和栈time 时间 三种格式 : 时间戳 结构化 字符串random 随机 ...
- Python关于导入模块的一些感想:
写项目的时候,碰到这种情况 程序业务为core,里面有两个目录,core1 和core2 core1中有三个模块,business main main1 程序入口为bin目录下的project ...
- python动态导入模块——importlib
当在写代码时,我们希望能够根据传入的选项设置,如args.model来确定要导入使用的是哪个model.py文件,而不是一股脑地导入 这种时候就需要用上python的动态导入模块 比如此时文件结构为: ...
- python基础--导入模块
一,import的使用1, 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块中的功能一个模块就是包含了一组功能的python文件,例如demo.py 可以通过import来使用这个文件定义d ...
- python中导入模块的注意点
1.import 和 from import 的区别 import module导入模块:语句执行完后会创建一个新的命名空间,在该命名空间中执行相应的函数.执行时,需要的变量.函数和类名前需要加 ...
- python控制流-导入模块
一.模块 1.含义 Python 程序可以调用一组基本的函数,这称为“内建函数”,包括你见到过的 print().input()和 len()函数.Python 也包括一组模块,称为“标准库”.每个模 ...
- python改变导入模块中的变量的问题
Python中循环函数1调用函数2,函数2中import了一个模块,函数1: def run(): for a in b: runTest(a,patter) 函数2: def runTest(cas ...
随机推荐
- Beats processors
文章转载自:https://elasticstack.blog.csdn.net/article/details/111321105 我们通常的做法是使用 Elasticsearch 的 ingest ...
- 搞透 IOC,Spring IOC 看这篇就够了!
IOC与AOP属于Spring的核心内容,如果想掌握好Spring你肯定需要对IOC有足够的了解 @mikechen IOC的定义 IOC是Inversion of Control的缩写,多数书籍翻译 ...
- Docker安装MongoDB并使用Navicat连接
MongoDB简介: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库 ...
- 驱动开发:内核枚举Minifilter微过滤驱动
Minifilter 是一种文件过滤驱动,该驱动简称为微过滤驱动,相对于传统的sfilter文件过滤驱动来说,微过滤驱动编写时更简单,其不需要考虑底层RIP如何派发且无需要考虑兼容性问题,微过滤驱动使 ...
- 7.RabbitMQ系列之topic主题交换器
topic主题交换器它根据在队列绑定的路由键和路由模式通配符匹配将消息路由到队列. 生产者在消息头中添加路由键并将其发送到主题交换器. 收到消息后,exchange尝试将路由键与绑定到它的所有队列的绑 ...
- JUC(4)Callable和常用的辅助类
1.Callable 1.可以有返回值 2.可以抛出异常 3.方法不同.run()/call() future Task 细节: 1.有缓存 2.结果可能需要等待,会阻塞 2.常用的辅助类 2.1 C ...
- 齐博x1 直播神器聊天小插件
下载地址如下:https://down.php168.com/livemsg.rar 本插件由论坛网友笨熊提供 非常感谢他给大家提供那么一个非常好用的直播必备神器. 如下图所示,大家在直播的时候,这个 ...
- 齐博x1关于小程序个性源代码的说明
系统默认推荐商家小程序使用通用型的源码,即框架套壳iframe形式的.这个灵活性更高.但如果有特殊需求的话,也可以设置个性源码,比如配合uni-app使用,针对不同的小程序就使用不同的uni-app风 ...
- 【神经网络】丢弃法(dropout)
丢弃法是一种降低过拟合的方法,具体过程是在神经网络传播的过程中,随机"沉默"一些节点.这个行为让模型过度贴合训练集的难度更高. 添加丢弃层后,训练速度明显上升,在同样的轮数下测试集 ...
- 深度学习环境搭建常用网址、conda/pip命令行整理(pytorch、paddlepaddle等环境搭建)
前言:最近研究深度学习,安装了好多环境,记录一下,方便后续查阅. 1. Anaconda软件安装 1.1 Anaconda Anaconda是一个用于科学计算的Python发行版,支持Linux.Ma ...