python—模块-

之前我们解决问题的时候,遇到复杂的问题,可能会导入python 的工具箱,这就是python里面自带的内置模块,其实python工具箱有好几百个,可以通过help('moudles')查看,得到的是python自带的和再第三方工具箱下载的,但是比如另一个人编写的模块我拿过来也能用,但是help('moudles')就不会显示出来。补充:查看的时候不用管下划线的部分,

使用模块有什么好处?

  1. 最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
  2. 可重用。
  3. 使用模块还可以避免函数名和变量名冲突。每个模块有独立的命名空间,因此相同名字的函数和变量完全可以分别存在不同的模块中,所以,我们自己在编写模块时,不必考虑名字会与其他模块冲突

模块分类

模块分为三种:

  • 内置标准模块(又称标准库,安装好python的时候自带的一个模块)执行help('modules')查看所有python自带模块列表
  • 第三方开源模块,可通过pip install 模块名 联网安装
  • 自定义模块

不管上面那种模块,调用都用import

模块调用

import module

from module import xx

from module.xx.xx import xx as rename  

from module.xx.xx import *
#不推荐使用,带*意思是全部

  

例子:

import random

from os import rmdir
#可以理解成,os是工具箱里的一个小工具箱,rmdir是os里的一个更小的工具箱,可以导入一个,也可以导入多个
#from os import rmdir, rename

from django.core import handles
#解释为,django是创建的一个目录,core是django下的子目录,handles是core下的子目录,而handles里的文件才是py文件
import multiprocessing #这个模块名较长,可以用as rename
import multiprocessing as mul #直接调用mul就行,和上面的效果是一样的

  

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

自定义模块

首先创建一个文件夹,并创建一个py文件,即模块

 再交互器下导入模块

模块查找路径

 并没有找到这个模块,这是因为路径的问题,python要找模块的时候,有一个范围,就是sys.path, 交互器上输入命令就会出现一个包括他范围的列表

 

其中,第一个 ' ' 是当前目录,回默认从当前目录找,如果有就不找了,如果没有就继续往后走,找完都没有就会报错,

第二个zip一行是python安装包的内容,第三个lib一行是python下放c语言库的东西,其实前几个我们几乎用不到,都是python自带的,因为python使用c写的,他们互相之间有一些调用关系。

而最后一行,site-packages是所有的标准库,包括第三方的和内置的都会放在这个文件

上面这些都是python默认的,自己也可以往进加东西,

也可以删除刚才加进去的,但是已经导入成功了,就不会重新导入,还是刚才的那个

 

要注意的是,加进去的只是再当前程序内的运行过程中有效,如果退出了,还是会没有

开源模块

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

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

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

编译源码    python setup.py build
安装源码    python setup.py install
  1. 直接通过pip安装
pip3 install paramiko #paramiko 是模块名

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

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

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

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

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

使用

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

#coding:utf-8

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.1.108', 22, 'alex', '123')

stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
ssh.close();

执行命令 - 通过用户名和密码连接服务器

  

包(Package)

当你的模块文件越来越多,就需要对模块文件进行划分,比如微信,假如有500个文件,就需要划分开,哪些是负责朋友圈的,哪些是支付功能的,再比如把负责跟数据库交互的都放一个文件夹,把与页面交互相关的放一个文件夹,

└── my_proj
    ├── crm #代码目录
    │   ├── admin.py
    │   ├── apps.py
    │   ├── models.py
    │   ├── tests.py
    │   └── views.py
    ├── manage.py
    └── my_proj #配置文件目录
        ├── settings.py
        ├── urls.py
        └── wsgi.py

  

像上面这样,一个文件夹管理多个模块文件,这个文件夹就被称为包

那不同包之间的模块互相导入呢?

crm/views.py内容

def sayhi():
    print('hello world!')

  

通过manage.py调用

from crm import views

views.sayhi()

  

包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。

原文地址:https://www.cnblogs.com/xiaobai-yemao/p/8806519.html