什么是模块?

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

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python里,一个 .py 文件就被称之为一个模块(Module)。

使用模块有什么好处?

1.最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。带一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

2.使用模块还可以避免函数名和变量名冲突。每个模块有独立的命名空间,因此相同名字的函数和变量完全可以分别存在不同的模块中,所以,我们自己在编写模块时,不必考虑名字会与其他模块冲突。

模块分类

模块分为三类:

  • 内置标准模块(又称标准库)执行 help('models') 查看所有 python 自带模块列表
>>> help('modules')

Please wait a moment while I gather a list of all available modules...

__future__          _tkinter            gettext             sched
_abc _tracemalloc glob secrets
_ast _warnings gzip select
_asyncio _weakref hashlib selectors
_bisect _weakrefset heapq setuptools
_blake2 _winapi hmac shelve
_bootlocale abc html shlex
_bz2 aifc http shutil
_codecs antigravity idlelib signal
_codecs_cn argparse imaplib site
_codecs_hk array imghdr smtpd
_codecs_iso2022 ast imp smtplib
_codecs_jp asynchat importlib sndhdr
_codecs_kr asyncio inspect socket
_codecs_tw asyncore io socketserver
_collections atexit ipaddress sqlite3
_collections_abc audioop itertools sre_compile
_compat_pickle base64 json sre_constants
_compression bdb keyword sre_parse
_contextvars binascii lib2to3 ssl
_csv binhex linecache stat
_ctypes bisect locale statistics
_ctypes_test builtins logging string
_datetime bz2 lzma stringprep
_decimal cProfile macpath struct
_distutils_findvs calendar mailbox subprocess
_dummy_thread cgi mailcap sunau
_elementtree cgitb marshal symbol
_functools chunk math symtable
_hashlib cmath mimetypes sys
_heapq cmd mmap sysconfig
_imp code modulefinder tabnanny
_io codecs msilib tarfile
_json codeop msvcrt telnetlib
_locale collections multiprocessing tempfile
_lsprof colorsys netrc test
_lzma compileall nntplib textwrap
_markupbase concurrent nt this
_md5 configparser ntpath threading
_msi contextlib nturl2path time
_multibytecodec contextvars numbers timeit
_multiprocessing copy opcode tkinter
_opcode copyreg operator token
_operator crypt optparse tokenize
_osx_support csv os trace
_overlapped ctypes parser traceback
_pickle curses pathlib tracemalloc
_py_abc dataclasses pdb tty
_pydecimal datetime pickle turtle
_pyio dbm pickletools turtledemo
_queue decimal pip types
_random difflib pipes typing
_sha1 dis pkg_resources unicodedata
_sha256 distutils pkgutil unittest
_sha3 doctest platform urllib
_sha512 dummy_threading plistlib uu
_signal easy_install poplib uuid
_sitebuiltins email posixpath venv
_socket encodings pprint warnings
_sqlite3 ensurepip profile wave
_sre enum pstats weakref
_ssl errno pty webbrowser
_stat faulthandler py_compile winreg
_string filecmp pyclbr winsound
_strptime fileinput pydoc wsgiref
_struct fnmatch pydoc_data xdrlib
_symtable formatter pyexpat xml
_testbuffer fractions queue xmlrpc
_testcapi ftplib quopri xxsubtype
_testconsole functools random zipapp
_testimportmultiple gc re zipfile
_testmultiphase genericpath reprlib zipimport
_thread getopt rlcompleter zlib
_threading_local getpass runpy Enter any module name to get more help. Or, type "modules spam" to search
for modules whose name or summary contain the string "spam".
  • 第三方开源模块,可通过 pip install 模块名 联网安装
  • 自定义模块

模块调用

import module
from module import xx
from module.xx.xx import xx as rename #有的模块名太长,就重新命名一下,用起来方便
from module.xx.xx import * #将module.xx.xx里的所有模块全部引入,但不推荐,变量名易重复出问题

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

自定义模块

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

模块查找路径

发现,自己写的模块只能在当前路径下的程序里才能导入,换一个目录再导入自己的模块就报错说找不到了,这是为什么?

这与导入路经有关

>>> import sys
>>> sys.path #cmd里面打开python,引入模块的搜索路径
['', 'D:\\Software\\Python\\python37.zip', 'D:\\Software\\Python\\DLLs', 'D:\\Software\\Python\\lib', 'D:\\Software\\Python', 'D:\\Software\\Python\\lib\\site-packages'] #最后一个 site-pages 表示所有的第三方的内置库和自己下载的库都在这里

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

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

开源模块安装、使用

https://pypi.python.org/pypi 是 python 的开源模块库,截至2017年9月3日,已经收录了118170个来自全世界python开发者贡献的模块,几乎涵盖了你想用python做的任何事情。事实上每个python开发者,只要注册一个账号就可以往这个平台上传你自己的模块,这样全世界的开发者都可以容易的下载并使用你的模块。

那如何从这个平台上下载代码呢?

  1. 直接在上面这个页面上点 download ,下载后,解压并进入目录,执行以下命令完成安装
编译源码    python  setup.py  build
安装源码 python setup.py install

2.直接通过 pip 安装

pip3  install  paramiko  #parmiko 是模块名

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

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

/your_python_install_path/3.7/lib/python3.7/site-packages

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

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

使用

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

#coding:gbk

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.108',22,'alex','') stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
ssh.close() 执行命令 - 通过用户名和密码连接服务器

Python全栈之路----常用模块学习----模块的种类和导入方法的更多相关文章

  1. Python全栈之路----常用模块----hashlib加密模块

    加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...

  2. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  3. Python全栈之路----常用模块----软件开发目录规范

    目录基本内容 log  #日志目录 conf  #配置目录 core/luffycity  #程序核心代码目录  #luffycity 是项目名,建议用小写 libs/modules  #内置模块 d ...

  4. Python全栈之路----常用模块----re 模块

    正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是 re. re的匹配语法有以下几种 re.match 从头开始匹配 re.search 匹配包含 re.fin ...

  5. Python全栈之路----常用模块----logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  6. Python全栈之路----常用模块----subprocess模块

    我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...

  7. Python全栈之路----常用模块----shutil模块

    高级的 文件.文件包.压缩包 处理模块   参考Python之路[第四篇]:模块     #src是原文件名,fdst是新文件名 shutil.copyfileobj(fsrc, fdst[, len ...

  8. Python全栈之路----常用模块----datetime模块详解

    相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...

  9. Python全栈之路----常用模块----xml处理模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...

随机推荐

  1. springboot日志配置

    默认情况下,spring boot使用的是LogBack日志系统.在spring-boot-starter-web和spring-boot-starter中都已经默认依赖了logging的工具包. 如 ...

  2. 【HBase调优】Hbase万亿级存储性能优化总结

    背景:HBase主集群在生产环境已稳定运行有1年半时间,最大的单表region数已达7200多个,每天新增入库量就有百亿条,对HBase的认识经历了懵懂到熟的过程.为了应对业务数据的压力,HBase入 ...

  3. 【问题解决:信息提示】SpringBoot启动时提示The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

    问题描述 springboot程序在启动时提示信息 [2018-10-24 21:59:05.214] - 440 信息 [restartedMain] --- org.apache.catalina ...

  4. 容器工厂(原型&单例)

    上一篇讲的是容器工厂的原型. 我们可以不必通过new关键之创建实例,可以直接取容器里面的实例. 我们可以发现,在对比他们的地址值的时候,他们是相同的为true. 如果我们需要的是不一样的呢.也就是有一 ...

  5. ssm+redis整合(通过cache方式)

    这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1.pom.xml < ...

  6. dropna(thresh=n) 的用法

    thresh=n,保留至少有 n 个非 NA 数的行

  7. Windows 用bat脚本带配置启动redis,并用vb脚本使其在后台运行。

    最近,在Windows上用开发PHP程序,需要用到Redis,每天要打开一个运行redis-server.exe的窗口这样比较烦,因为窗口就一直打开着,不能关闭. 所以就想着通过写脚本的方式,让他在后 ...

  8. 从github上下载java项目导入到eclipse中

    转载地址:https://blog.csdn.net/chyo098/article/details/79268136

  9. 数独_erlang解题代码

    前几天LP玩数独,玩到大师级各种被虐,我看了看说,分分钟帮你做出来, 结果当然没有做出来. 于是上网搜了下数独的解题代码,看了下C的代码,大多是递归之类的(如http://blog.sina.com. ...

  10. python实现以application/json格式为请求体的http post请求

    接口传递数据格式类型为json格式,如下图抓包查看 Python实现脚本请求接口并以中文打印接口返回的数据 import json import requests url = "https: ...