python-模块分类与导入

摘要:
python模块的分类和导入1。什么是模块:在计算机程序的打开过程中,随着程序代码的编写越来越多,文件中的代码将变得越来越长,更容易维护。2.导入多处理模块别名3。import模块fromdjango.coreimporthhhandlers的单一方法将指定的部分从对象导入到当前命名空间,而不会导入整个对象。
       python-模块的分类与导入

1,什么是模块:

  在计算机程序的开放过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

  为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少了,很多编程语言都采用这种组织代码的方式。

  在Python中,一个.py文件就称之为一个模块(Module)。

2,使用模块的好处:

  • 提高可维护性
  • 可重用
  • 避免函数名和变量名冲突

3,模块的分类

  • 内置标准模块(又称标准库)执行help(‘Modules’)查看所有Python所有自带模块列表。
  • 第三方开开源块,可通过pip install 模块名 联网安装, djiango
  • 自定义模块


                                              python-模块分类与导入第1张

4,模块调用

1 import module
2 
3 from module import xx
4 
5 from module .xx.xx import xx as rename
6 
7 from module .xx.xx import * #不推荐

    注意:模块一旦被调用,即相当于执行了另外一个py文件里的代码

1,import random 导入模块的所有方法

    这会将对象(这里的对象指的是包、模块、类或者函数,下同)中的所有内容导入。如果该对象是个模块,那么调用对象内的类、函数或变量时,需要以module.xxx的方式。

                                     python-模块分类与导入第2张

   2,import multiprocessing as mul 模块别名

                                         python-模块分类与导入第3张

  3,from django.core import handlers  导入模块的单个方法

    从某个对象内导入某个指定的部分到当前命名空间中,不会将整个对象导入。这种方式可以节省写长串导入路径的代码,但要小心名字冲突。

                                          python-模块分类与导入第4张

                                           python-模块分类与导入第5张

                                            python-模块分类与导入第6张

 4,from socket import *  导入模块的所有方法  不推荐

    将对象内的所有内容全部导入。非常容易发生命名冲突,请慎用!

                                                python-模块分类与导入第7张

                                                 python-模块分类与导入第8张

5,自定义模块

  这个最简单, 创建一个.py文件,就可以称之为模块,就可以在另外一个程序里导入

                                                            python-模块分类与导入第9张

                                                            python-模块分类与导入第10张

                                                             python-模块分类与导入第11张

6,模块查找顺序

                                                             python-模块分类与导入第12张

  python解释器会按照列表顺序去依次到每个目录下去匹配你要导入的模块名,只要在一个目录下匹配到了该模块名,就立刻导入,不再继续往后找。

注意列表第一个元素为空,即代表当前目录,所以你自己定义的模块在当前目录会被优先导入。

  默认情况下,模块的搜索顺序是这样的:

  1. 当前执行脚本所在目录
  2. Python的安装目录
  3.  Python安装目录里的site-packages目录

  其实就是“自定义”——>“内置”——>“第三方”模块的查找顺序。任何一步查找到了,就会忽略后面的路径,所以模块的放置位置是有区别的。

                                              python-模块分类与导入第13张

                                                          python-模块分类与导入第14张

7,开源模块学习的安装方式

  http://pypi.python.org/pypi   是python的开源模块库,是python的开源模块库,截止2018年8月 ,已经收录了147,422个来自全世界python开发者贡献的模块,几乎涵盖了你想用python做的任何事情。 

  1.直接在上面这个页面上点download,下载后,解压并进入目录,执行以下命令完成安装

1 编译源码    python setup.py build
2 安装源码    python setup.py install

  2.直接通过pip安装

1 pip3 install paramiko # parmiko 是模块名

  pip命令会自动下载模块包并完成安装。

    软件一般会被自动安装你python安装目录的这个子目录里

1 /your_python_install_path/3.6/lib/python3.6/site-packages

p  ip命令默认会连接在国外的python官方服务器下载,速度比较慢,你还可以使用国内的豆瓣源,数据会定期同步国外官网,速度快好多

sudo pip install -i http://pypi.douban.com/simple/ alex_sayhi --trusted-host pypi.douban.com   #alex_sayhi是模块名

  使用

    下载后,直接导入使用就可以,跟自带的模块调用方法无差,演示一个连接linux执行命令的模块

 1 #coding:utf-8
 2  
 3 import paramiko
 4  
 5 ssh = paramiko.SSHClient()
 6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 7 ssh.connect('192.168.1.108', 22, 'alex', '123')
 8  
 9 stdin, stdout, stderr = ssh.exec_command('df')
10 print(stdout.read())
11 ssh.close();
12  
13 执行命令 - 通过用户名和密码连接服务器

8,包(Package)

  当你的模块文件越来越多,就需要对模块文件进行划分,比如把负责跟数据库交互的都放一个文件夹,把与页面交互相关的放一个文件夹,

  为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package),包是模块的集合,比模块又高一级的封装。通俗来说,在里面一个文件夹可以管理多个模块文件,这个文件夹就被称为包

                                                                      python-模块分类与导入第15张

  没有比包更高级别的封装,但是包可以嵌套包,就像文件目录一样:如下图

                                python-模块分类与导入第16张

  最顶层的Django包封装了contrib子包,contrib包又封装了auth等子包,auth又有自己的子包和一系列模块。通过包的层层嵌套,我们能够划分出一个又一个的命名空间。

  包名通常为全部小写,避免使用下划线。

1 __int__.py用于标识当前文件夹是一个包。
2  
3 python2,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。
4  
5 在python3里,即使目录下没__int__.py文件也能创建成功,猜应该是解释器优化所致,但创建包还是要记得加上这个文件吧。

  

                                                                                                    python-模块分类与导入第17张

 9,跨模块导入

os.path.abspath(__file__)   # 返回绝对路径
print(__file__)  # 打印改文件的相对路径
os.path.dirname(__file__)  # 打印该文件父目录 相对路径

  

1 如何实现在crm/views.py里导入proj/settings.py模块?


                                                                                   python-模块分类与导入第18张

                                                              python-模块分类与导入第19张

import sys, os

 
print(dir())
print(__file__)  # 打印改文件的相对路径
BASE_DIR3 = os.path.abspath(__file__)   # 返回绝对路径
print(BASE_DIR3)
 
BASE_DIR1 = os.path.dirname(__file__)  # 打印该文件父目录 相对路径
BASE_DIR2 = os.path.dirname(os.path.dirname(__file__)) # 打印该文件父目录,父目录  相对路径
 
print(BASE_DIR1)
print(BASE_DIR2)
 
# 两个模块的父目录加入到path路径中,
# 然后就可以跨模块导入了
BASE_DIR = os.path.dirname((os.path.dirname((os.path.abspath(__file__)))))
print(BASE_DIR)
sys.path.append(BASE_DIR)  # 'C:\PycharmProjects\Luffy_project\21天入门\crm']
print(sys.path)
 
from proj import settings
settings.say_hi()

0,相对导入,绝对导入

   文件夹被python解释器视作package需要满足两个条件:

     1.文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。

    2.不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

   注:虽然python支持相对导入,但对模块间的路径关系要求比较严格,处理不当就容易出错,so并不建议在项目里经常使用。

                                                python-模块分类与导入第20张

                                              python-模块分类与导入第21张

  所以这个问题的解决办法就是,既然你在views.py里执行了相对导入,那就不要把views.py当作入口程序,可以通过上一级的manage.py调用views.py

                                          python-模块分类与导入第22张

11,_all_变量

  如果包定义文件__init__.py中存在一个叫做__all__的列表变量,那么在使用from package import *的时候就把这个列表中的所有名字作为要导入的模块名。

  例如在example/p1/__init__.py中包含如下代码:

1 __all__ = ["x"]
  • 这表示当你使用from example.p1 import *这种用法时,你只会导入包里面的x子模块。
  • import sendmsg #通过这个方式不受影响
 1 # say_hi文件
 2  
 3 __all__ = ["test1","num"]    # 只能让调用test1,num1
 4  
 5 def test1():
 6     print("----test1")
 7  
 8 def test2():
 9     print("----test2")
10  
11 num = 1
1 # import调用模块
2 import say_hi
3 say_hi.test1()
4 say_hi.test2()
----test1
----test2
 1 # from 调用模块
 2 from say_hi import *
 3 test1()
 4 test2()
 5  
 6  
 7 # error
 8 ----test1
 9 Traceback (most recent call last):
10   File "C:/PycharmProjects/Luffy_project/21天入门/3模块/1test.py", line 3, in <module>
11     test2()
12 NameError: name 'test2' is not defined

免责声明:文章转载自《python-模块分类与导入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zz《C++并发编程实战》的读书笔记深入分析解决Deepin 15环境变量修改问题,完成JAVA环境搭建下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux 简介

 linux 介绍(1)Linux根据市场需求不同,基本分为两个方向: 1)图形化界面版:注重用户体验,类似window操作系统,但目前成熟度不够 2)服务器版:没有好看的界面,是以在控制台窗口中输入命令操作系统的,类似于DOS,是我们假设服务器的最佳选择 (2)Linux根据原生程度,又分为两种: 1)内核版本:在Linus领导下的内核小组开发维护的系统...

Python中的多线程编程,线程安全与锁(一)

1.多线程编程与线程安全相关重要概念 在我的上篇博文聊聊Python中的GIL中,我们熟悉了几个特别重要的概念:GIL,线程,进程,线程安全,原子操作。 以下是简单回顾,详细介绍请直接看聊聊Python中的GIL GIL:Global Interpreter Lock,全局解释器锁。为了解决多线程之间数据完整性和状态同步的问题,设计为在任意时刻只有一个...

java转python代码

今天发现一个好玩的工具:可以直接将java转成python 1. 安装工具(windows 环境下面) 先下载antlr: http://www.antlr3.org/download/antlr-3.1.3.tar.gz 链接:http://pan.baidu.com/s/1gdgXUM3 密码:2qrx 解压后,进入antlr-3.1.3 untime...

python 下载安装setuptools及pip应用

1、首先下载python安装程序,下载地址:https://www.python.org/download/releases/2.7.8/   如下图:     因为我的机器是32位的就选择了Windows x86 MSI Installer (2.7.8)   安装成功后 2、下载安装setuptools   具体办法:   进入页面:https://...

Python读取文件内容与存储

Python读取与存储文件内容一、.csv文件 读取: import pandas as pd souce_data = pd.read_csv(File_Path)   其中File_path是文件的路径 储存: import pandas as pd souce_data.to_csv(file_path) 其中,souce_data格式应该为seri...

apache安装时的一些术语

apache源码安装时,需要的哪些必须依赖模块? 主要需要apr, apr-util, pcre模块其中 apr模块时必须的. 如何卸载 源码安装的软件? 在源码 的 解压目录下, 使用 make uninstall/ make clean, make distclean 直接将 安装在--prefix目录下的文件全部都删除掉即可! 使用 --prefi...