热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python_学习之模块和包

目录模块的导入方式一:import模块导入方式二:from模块当脚本使用获取模块中定义的属性名或方法名包模块Python中的一个py文件就是一个模块,文件名就是模块名模块的导入1.

目录

模块的导入方式一:import

模块导入方式二:from

模块当脚本使用

获取模块中定义的属性名或方法名

模块
Python中的一个py文件就是一个模块,文件名就是模块名

模块的导入


1. 模块的导入,只导入一次,放到sys.modules字典中
2. 模块导入的名称,可以通过全局函数查看globals()
3. 修改了模块内容,必须重启服务,python不支持自动更新模块
4. 模块导入建议遵循PEP8规则,先内置,再第三方,最后自定义的,每种类型间空一行

模块执行的顺序

内存中已经加载的模块---> 内置模块 ---> sys.path路径列表中包含的模块【从左至右查找】!!!
如果您导入模块或包时出现找不到该模块,记得回想下模块的导入顺序

test.py文件内容


def my_test():
print("from test.py:学习模块")
my_test()

模块的导入方式一:import

语法:import 模块名


import test
import test
"""
结果为:
from test.py:学习模块
"""
# 发现导入多次,仅仅执行一次,这是Python的优化,第一次导入就加载进了内存,后面再导入是对内存的模块增加一次引用

特点:


1. 每个模块拥有自己的独立空间,模块中定义的变量或方法,并不会与调用者自己定义的相同名字的变量或方法冲突,因为使用的时候是以
模块名.变量或方法名来调用的

为模块其别名:import 模块名 as 别名

一次导入多个模块

import os,sys,time

模块导入方式二:from

语法:from 模块名 import 需要的方法或属性名
特点:
1. 仅仅将需要导入的模块中的部分导入到当前模块的命名空间中,相对于import导入,调用是需要"模块名.属性名或方法",而from的方式导入,可以直接使用导入的名字
import test
test.my_test()
from test import my_test
my_test()
2. 如果从模块导入的方法名或属性名,与当前文件中的名称重合,则根据调用时的顺序看是否被当前环境对应的方法或属性名覆盖
如当前环境:
from test import my_test
my_test() ---> from test.py:学习模块
def my_test():
print(f"from {__name__}.py")
my_test() ---> from __main__.py
# 因此为了防止这种情况发生,我们一般为导入模块的方法名或属性名,再起个别名,这样就不会出现覆盖现象
from test import my_test as o_test
o_test() ---> from test.py:学习模块

一次导入多个:from 模块名 import (属性名1,属性名2)

模糊导入:【不建议使用】from 模块名 import *

1. 这种是将模块中的所有【非下划线(_xxx)开头定义的属性或方法名】都导入到当前空间,但你要知道原模块中有哪些方法名或属性名,才能使用,且这种情况很容易与当前环境中相同名称的属性或方法发生覆盖现象
2. 在原模块中增加一行下面的代码,则from xx import * 的方式只会导入列表中的名称,模块中定义的其他的名字,没写进去,是没法导入的,这种在很多第三方包中可以看到
__all__=["my_test",……]

模块当脚本使用
python通过全局变量name 来查看模块的名字,python规定如下:

name=="main"时,表示直接执行当前脚本,相当于控制台输入python 模块名.py

name==模块名 时,表示被别的模块引用

# test.py
def test():
print("from test.py")
if __name__ == '__main__':
print(__name__)
test()
# 故以上代码,如果当脚本直接执行,就会执行if下的语句,如果当模
```块引用,if下的语句就不会被执行
当我们不知道模块的路径时,可以通过python -m 模块名 当脚本执行,我们在安装离线包时就用到了这种方法,它会搜索sys.path查找含对应模块名或包,并将其当脚本来执行

查看python的官方文档,下面命令就会启动一个http server,在浏览器中打开,http://localhost:9000

python -m pydoc -p 9000


启动一个http Server,可查看执行目录下的所有文件,支持浏览器下载

python -m http.server 8000


获取模块中定义的属性名或方法名

dir(模块名)

import sys
import builtins
import test_model

print(dir(builtins)) # 获取内置模块的属性名或方法名
print(dir(test_model)) # 获取指定模块中定义的属性名或方法名
print(sys.path) # 获取当前模块的搜索路径列表
print(sys.modules) # 获取当前解析器环境中导入的模块,包含内置模块


**包**
Python中的包是通过使用.模块名,来组织Python模块名称空间的方式。
本质:文件夹中含有__init__文件的目录,就是包
导入方式:import 包名 或from 包名.模块名 import 方法或属性名
导入包的本质:就是导入__init__,所以你能看到很多第三方包,都把实现能力的方法或变量导入到该文件下,我们就不用关心包里面的目录结构,只需包名.属性或方法名即可使用,非常方便
绝对导入:以项目根目录为起始
相对导入:以.或..的方式为起始(相对当前文件的位置,只能在一个包中使用,不能用于不同目录内)
小结:如果您担心您的包或模块导入报错,就将其加入当前解析器环境中吧,sys.path.app(根目录),始终记住导包时,是以当前目录下找对应的模块的,没有就去sys.path中找,还没有,就报找不到该模块的异常

推荐阅读
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
author-avatar
乱舞仙魔神啊_414
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有