首页 > 编程语言 >python模块/导入模块

python模块/导入模块

时间:2022-10-18 19:33:13浏览次数:53  
标签:__ 文件 name python 导入 模块 import

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

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
 	相对导入只能用于模块文件中 不能在执行文件中使用
'''
相对导入使用频率较低 一般用绝对导入即可 结构更加清晰
'''

标签:__,文件,name,python,导入,模块,import
From: https://www.cnblogs.com/moongodnnn/p/16803795.html

相关文章

  • 进入python的世界_day17_python基础——了解模块、如何使用和导入模块、包的原理
    一、模块介绍1.什么是模块​ 其实我们前一阵已经接触过了,importxxx、fromxximportxxx​ 能够有一定功能的集合体就是模块,比如有某些功能的py文件,包含这个文件的......
  • python中展示json数据不换行(手动换行)
    https://blog.csdn.net/chichu261/article/details/82784904Settings—>keymap—>在搜索框输入wraps—>选择UseSoftWraps—>之后设置快捷键就可以了。针对第......
  • Python基础17
    今日内容概要索引取值与迭代取值的差异模块简介模块分类导入模块的两种句式导入模块补充说明循环导入问题判断文件类型模块的查找顺序绝刀导入与相对导入包概述......
  • 模块与导包
    索引取值与迭代取值的差异索引索引可以重复取值,任意位置取值不支持无序类型的数据取值迭代取值迭代取值只能按照,迭代器内部顺序依次取值支持所有类型的数据取值两......
  • Python爬虫(学习笔记)
    Python爬虫(学习笔记)  常见的反爬机制及应对策略名称描述解决方案/反反爬措施1.Headers 从用户的headers进行反爬是最常见的反爬策略,Headers是......
  • 【Python】第3章-7 求最大值及其下标
    本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。输入格式:输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。输出格式......
  • Python 2 数据类型
    关键字规则变量定义使用#作者:咸瑜#代码时间:2022/10/1715:57name="咸瑜"print('值',name)print('id',id(name))print('类型',type(name))......
  • Python项目生成requirements.txt文件
    一、前言对于Python项目,生成和使用requirements.txt是十分必要的。通过requirements.txt可以一次性保存和安装项目所需要的所有库。尤其是在不同电脑操作时。allure......
  • python模块
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的局势补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对导入与相对......
  • 模块简介
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种语法句式模块循环导入问题解决策略判断文件类型模块查找顺序模块的绝对导入与相对导入1.索引取值......