模块简介,导入模块的句式,模块查找顺序

今日内容概要

  • 迭代取值与索引取值的差异
  • 模块简介
  • 导入模块的两种语法句式
  • 导入模块句式的其他用法
  • 循环导入问题
  • 模块查找顺序问题

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

各自的优缺点

索引取值:
	优势:可以重复取值
	缺点:无法对无序容器取值,eg:字典,集合
迭代取值:
	优势:对任何数据类型都可以用的取值方式
	缺点:无法做到重复取值,只能按照开始的方向挨个取下去

模块的简介

思考

如何理解模块?

模块就是程序。模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。

每个扩展名为.py的Python程序都是一个独立的模块。

  • 模块的分类

    1.内置模块
    		解释器自带的,使用者直接可以使用的模块
    2.自定义模块
    		需要我们自己写的模块
    3.第三方模块
    		别开发者写的模块,放在网上,如果要是有需要下载
    
  • 模块的表现形式

    1.py文件
    2.含有多个py文件的文件夹
    3.已被编译为共享库或DLL的c或C++扩展
    4.使用c编写并链接到python解释器的内置模块

导入模块的两种句式

注意:在以后的工作中,模块文件名,我们要用英文
py文件在当作模块导入的时候不需要考虑后缀

  • 导入模块的句式1

    import 模块名

eg:

执行文件

在这里插入图片描述

被执行文件

在这里插入图片描述

运行结果

D:\python.3.6.4\python36.exe D:/pythonProject/day22/Module1.py
jason

Process finished with exit code 0

在这里插入图片描述

当我们开始运行执行文件的时候,import会先产生一个名称空间;然后被执行文件将自己执行会产生的名称都存储在名称空间中;Module1是指向被执行文件Module2中的名称;当我们使用Module1点加名称的时候,其实在在被执行文件中去找相关名称的数据值。

补充:如果一个程序中重复导入相同的模块的时候,导入模块语句只会执行一次

当执行文件中也出现了和被执行文件中相同的变量名的时候:

eg:
在这里插入图片描述
当执行文件中也有name的时候,是在执行文件名称空间中产生了一个name的名称,然后第二个print是找的自己名称空间的值

在这里插入图片描述

  • 导入模块的句式2

    from 模块名 import 模块名称空间里的名称

    指名道姓的导入,而不是整个导入

eg:
在这里插入图片描述
在这里插入图片描述
代码底部执行顺序

先在执行文件中创建一个名称空间,然后在被执行文件中创建一个名称空间,当我们执行被执行文件中的代码,将执行过程中产生的名字存储在名称空间,然后执行文件中得到想要的执行空间中的名字

两种导入句式的优缺点

导入句式1(import 模块名)
		优点:通过模块名加点的方式可以使用到模块里所有的名字,而且不会冲突
		缺点:全都可以点出来,但是有时候我们不想用到的一些名字也能被使用
导入句式2(from 模块名 import 使用的名字)
		优点:可以指名道姓的,根据我们需求使用模块里的名字,而且不用加前缀
		缺点:名字很容易产生冲突(绑定关系会被修改)

在这里插入图片描述
先是绑定被执行文件中的money,但是后来执行文件中出现了同样的money名称,就会与之前的1000断开绑定

补充知识

  • 起别名

    情况一(与别人的模块名重名了)

    eg:

    from Module2 import money as m  
    print(m)  # 也能正常的使用模块
    

    情况二(原来的模块名太复杂)

    eg:

    import Module2 as M
    print(M.name)
    
  • 导入多个模块

    一共有两种方式

    方式一

    eg:

    import time, sys, os
    

    方式二

    eg:

    import time
    import sys
    import os
    

    如果你想要的模块功能相似建议用方法一,不相似建议用方式二

  • 全导入

    需求:需要使用模块名称空间中很多名字 并且只能使用from…import句式
    from md import * # 星号表示所有
    ps:针对星号的导入还可以控制名字的数量
    在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字

循环导入问题

思考

如何理解循环导入问题

循环导入就是两个模块相互导入

举例说明

在这里插入图片描述
解释:
在这里插入图片描述

解决方法

在这里插入图片描述
让Module2中在导入Module1之前就先产生一个名称

循环导入将来尽量避免出现!!! 如果真的避免不了 就想办法让所有的名字在使用之前提前准备好

判断文件类型

在以后我们让我们代码运行起来的肯定不止一个文件

在所有的py文件中都会自带双下name的内置名

当py文件是执行文件的时候 name__的结果是__main
当py文件是被导入文件的时候 __name__的结果是模块名(文件名)

双下name主要用于开发模块的作者测试自己的代码使用

但是如果我们在使用模块的时候,被执行文件中有开发者自己的测试执行代码的时候,我们使用模块的时候,就会是测试结果;而我们使用模块是使用其功能去实现我们自己想要的结果

所以有个方法可以实现功能和测试分开

if name == ‘main’:

当文件是执行文件的时候才会执行if的子代码

因为pycharm知道这个是很常用的,所以搞了一个快捷方式直接编写main按tab键自动补全

模块查找顺序

内存>>>内置>>>sys.path(系统环境)

1.导入一个文件 然后在导入过程中删除该文件 发现还可以使用

import Module2
import time

time.sleep(15)
print(Module2.name)  # 还是可以打印出名字,因为内存还有;但是如果再次运行就会报错

2.创建一个跟内置模块名相同的文件名

在这里插入图片描述
输出结果

Traceback (most recent call last):
  File "D:/pythonProject/day22/Module1.py", line 2, in <module>
    print(time.name)
AttributeError: module 'time' has no attribute 'name'

这里的自定义模块和内置模块冲突了

创建模块文件的时候尽量不要与内置模块名冲突

3.导入模块的时候一定要知道谁是执行文件

所以的文件都是按照路径来的

如果内存和内置里都没有就会去sys.path中找

eg:

import sys
# sys.path.append(r'D:\pythonProject\day22\xxx')
print(sys.path)

'''
['D:\\pythonProject\\day22', 
'D:\\pythonProject\\day22', 
'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_display', 
'D:\\python.3.6.4\\python36.zip',
 'D:\\python.3.6.4\\DLLs', 
 'D:\\python.3.6.4\\lib', 
 'D:\\python.3.6.4', 
 'D:\\python.3.6.4\\lib\\site-packages', 
 'D:\\PyCharm 2021.1.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
'''

当在sys.path中查找的时候,只要第一个不是那后面肯定也不是。

我们在day22下新建一个xxx包,然后在包下创建一个py文件,由于md.py文件与Module1.py不是同一级,所以是找不到这个模块的,这个时候,我们可以通过sys.path列表加一个md.py的路径进去,这样就可以找到了

在这里插入图片描述

pycharm会自动将项目的根目录添加到sys.path中

通用的方式
	sys.path.append(目标文件所在的路径)

还有一种方法,通过from…import…

from 文件的相对路径 import 模块名

eg:

from xxx import md
print(md.name)  # 也是可以找到

如果py文件在很多包的下面,那可以通过级别依次点的形式找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Academic speaking句式指的是在学术演讲和论文写作中常用的句式和表达方式。这些句式通常被认为更加正式、准确和具有学术性。下面是一些常见的academic speaking 句式的例子: 1. In conclusion, it can be argued that... 总之,可以争论的是... 2. It is widely acknowledged that... 广泛认可的是... 3. It is worth noting that... 值得注意的是... 4. This phenomenon can be attributed to... 这一现象可以归因于... 5. It is imperative that we address this issue... 我们有必要解决这个问题... 6. This research sheds light on... 这项研究揭示了... 7. The findings suggest that... 研究结果表明... 8. The data/statistics/evidence reveals that... 数据/统计数据/证据显示... 9. Furthermore, it is important to consider... 此外,考虑...是重要的... 10. The implications of this study are significant... 这项研究的意义重大... 11. This study aims to explore... 本研究旨在探索... 12. The literature on this topic indicates that... 关于这个话题的文献表明... 13. This study provides insights into... 这项研究提供了关于...的洞察力... 14. The results of this study support the idea that... 这项研究的结果支持了...的观点... 15. It is crucial to take into account... 必须要考虑到... 通过使用这些academic speaking 句式,我们能够在学术讨论中更加清晰、准确地传达我们的观点和结果,使我们的讲话更具有学术性和权威性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值