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 ...
随机推荐
- SNI 路由和多协议端口的 TCP
文章转载自:https://mp.weixin.qq.com/s/nMMN7hAJK6SFn1V1YyxvHA 下面是一个简单的示例配置 - 使用最新支持的 YAML 文件格式,将请求路由到一个数据库 ...
- linux软链接的创建、修改和删除
创建 ln -s [源文件或目录] [目标文件或目录] 修改 ln –snf [新的源文件或目录] [目标文件或目录] 删除 rm –rf 软链接名称 注意,上面这种形式可能会让人产生担忧,害怕删除的 ...
- 修改Windows10 命令终端cmd的编码为UTF-8 && IDEA控制台输出中文乱码
临时修改 进入cmd窗口后,直接执行 chcp 65001 永久修改 在运行中输入regedit,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Pro ...
- SecureCRT使用之自动记录日志功能
自动记录日志功能: 选择"选项"--"全局选项",打开全局选项,在常规设置中找到"默认会话"设置项,点击右侧的"编辑默认设置&qu ...
- MongoDB分片集群-Sharded Cluster
分片概念 分片(sharding)是一种跨多台机器分布数据的方法, MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署. 换句话说:分片(sharding)是指将数据拆分,将其分散存在 ...
- 【前端必会】Prettier,有了ESlint,还要Prettier
介绍 已经安装了ESLint为什么还要Prettier,主要是让ESLint专注于语法相关的验证,检查潜在问题.而代码格式化则有Prettier来接管 对比参考: https://baijiahao. ...
- 云原生虚拟网络 tun/tap & veth-pair
云原生虚拟网络 tun/tap & veth-pair 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/684 ...
- 对循环神经网络参数的理解|LSTM RNN Input_size Batch Sequence
在很多博客和知乎中我看到了许多对于pytorch框架中RNN接口的一些解析,但都较为浅显甚至出现一些不准确的理解,在这里我想阐述下我对于pytorch中RNN接口的参数的理解. 我们经常看到的RNN网 ...
- PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程
摘要:Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合.这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的 ...
- PTA2022 520钻石争霸赛题解
7-1 520表白 不用说 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int max ...