索引取值与迭代取值的差异

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模块/导入模块的更多相关文章

  1. python有三种导入模块的方法(转)

    原文:http://www.cnblogs.com/allenblogs/archive/2011/11/15/2055149.html python有三种导入模块的方法 其一, import mod ...

  2. python中导入模块的本质, 无法导入手写模块的解决办法

    最近身边一些朋友发生在项目当中编写自己模块,导入的时候无法导入的问题. 下面我来分享一下关于python中导入模块的一些基本知识. 1 导入模块时寻找路径 在每一个运行的python程序当中,都维护了 ...

  3. Python 动态导入模块

    动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │   └── aa.py ├── test1.py lib目录下 ...

  4. python 全栈开发,Day28(复习,os模块,导入模块import和from)

    一.复习 collections 增加了一些扩展数据类型 :namedtuple orderdict defaltdict队列和栈time 时间 三种格式 : 时间戳 结构化 字符串random 随机 ...

  5. Python关于导入模块的一些感想:

    写项目的时候,碰到这种情况 程序业务为core,里面有两个目录,core1 和core2  core1中有三个模块,business  main   main1 程序入口为bin目录下的project ...

  6. python动态导入模块——importlib

    当在写代码时,我们希望能够根据传入的选项设置,如args.model来确定要导入使用的是哪个model.py文件,而不是一股脑地导入 这种时候就需要用上python的动态导入模块 比如此时文件结构为: ...

  7. python基础--导入模块

    一,import的使用1, 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块中的功能一个模块就是包含了一组功能的python文件,例如demo.py 可以通过import来使用这个文件定义d ...

  8. python中导入模块的注意点

    1.import  和 from  import 的区别 import module导入模块:语句执行完后会创建一个新的命名空间,在该命名空间中执行相应的函数.执行时,需要的变量.函数和类名前需要加  ...

  9. python控制流-导入模块

    一.模块 1.含义 Python 程序可以调用一组基本的函数,这称为“内建函数”,包括你见到过的 print().input()和 len()函数.Python 也包括一组模块,称为“标准库”.每个模 ...

  10. python改变导入模块中的变量的问题

    Python中循环函数1调用函数2,函数2中import了一个模块,函数1: def run(): for a in b: runTest(a,patter) 函数2: def runTest(cas ...

随机推荐

  1. Linux服务器上MinIO生产部署的内核调优

    #!/bin/bash cat > sysctl.conf <<EOF # maximum number of open files/file descriptors fs.file ...

  2. ES重要配置解析

    path.data和path.logs 如果您使用.zip或.tar.gz存档,则data和logs 目录是子文件夹$ES_HOME.如果这些重要文件夹保留在其默认位置,则在将Elasticsearc ...

  3. Elasticsearch: Cerebro 用户界面介绍

  4. Java泛型的总结

    泛型可以用于接口.类.方法上.还有泛型通配符这个概念 泛型的好处:可以在编译时检查 1.用于方法中,指定该方法中的形参的类型. 语法:修饰符 <代表泛型的变量> 返回值类型 方法名(参数) ...

  5. HDU1423 Greatest Common Increasing Subsequence (DP优化)

    LIS和LCS的结合. 容易写出方程,复杂度是nm2,但我们可以去掉一层没有必要的枚举,用一个变量val记录前一阶段的最优解,这样优化成nm. 1<=k<j,j增加1,k的上界也增加1,就 ...

  6. 使用Java实现haskell-style的list

    作为一个haskell这门函数式编程语言的爱好者,我特别喜欢它的list操作和推导功能.与传统面向对象或者过程语言不同的是,函数式语言通常喜欢把它们分为head.tail或者init.last等两部分 ...

  7. WindivertDotnet快速发Ping

    1 前言 WindivertDotnet是面向对象的WinDivert的dotnet异步封装,其提供如下的发送数据方法: ValueTask<int> SendAsync( WinDive ...

  8. spring boot+vue前后端项目的分离(我的第一个前后端分离项目)

    文章目录 1.前端vue的搭建 2.后端项目的构建 pom文件中引入的jar包 yml文件用来配置连接数据库和端口的设置 application.property进行一些整合 controller层( ...

  9. 微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍

    微服务架构学习与思考(11):开源 API 网关02-以 Java 为基础的 API 网关详细介绍 上一篇关于网关的文章: 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Ngi ...

  10. python环境安装(pyhon和pycharm)

    一.python安装 在地址栏输入https://www.python.org/进入python官网, 点击windows后会出现各种可供下载的历史版本, 安装包下载后,双击运行 点击下一步 勾选下面 ...