模块让我们能够有逻辑地组织Python代码段。把相关的代码分配到一个 模块里能让我们的代码更好用,更易懂。

导入模块

Python使用import语句导入模块。语法:

# 形式一:导入模块
import module1[, module2[,... moduleN]
## 示例
import sys # 形式二:从模块中导入一个指定的部分到当前命名空间中
from modname import name1[, name2[, ... nameN]]
## 示例
from fib import fibonacci # 形式三:把一个模块的所有内容全都导入到当前的命名空间,不建议使用
from modname import *

示例:

#!/usr/bin/env python3
# -*- coding: utf-8 -*- ' a test module ' __author__ = 'Michael Liao' import sys def test():
args = sys.argv
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!') if __name__=='__main__':
test()

第1行和第2行:标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;

第4行是模块注释;

第6行是模块作者;

以上是模块标准模板,当然也可以全部删掉不写,但是建议按标准编写。

第8行导入sys模块;导入模块后,就可以使用该模块的所有功能了。

第11行sys.argv表示命令行参数,第一个参数永远是该.py文件的名称。

第19行需要注意:在命令行里打开啊py文件,Python解释器会把特殊变量__name__置为__main__,而在其他地方导入py文件,则判断不会成立。

定位模块

当我们导入一个模块,Python解析器对模块位置的搜索顺序是:

1. 当前目录
2. 如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

模块搜索路径存储在system模块的sys.path变量中。

如果我们要添加自己的搜索目录,有两种方法:

一是直接修改sys.path,添加要搜索的目录:

>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')

这种方法是在运行时修改,运行结束后失效。

第二种方法是设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。

查看模块

通过dir()函数可以查看指定模块的所有功能:

import math

print(dir(math))

输出:

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块的导入文件名。

作用域

在一个模块中,我们可能会定义很多函数和变量,但有的函数和变量我们希望给别人使用,有的函数和变量我们希望仅仅在模块内部使用。在Python中,是通过_前缀来实现的。

正常的模块都是公开的,可以直接使用,我们称之为public;而以_x或者__x开头的是非公开的,称为private,不应该被直接访问。其中类似__xxx__这样的变量是特殊变量,有着特殊意义,例如__author____name__

但是Python不会强制我们不能使用private变量,直接访问是可以的,因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。

def _fun1():
pass def _fun2():
pass def myfunc(type):
if(type == 1):
return _fun1()
else:
return _fun2()

作用域总结:外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

编写自己的模块

Python的模块有一定的目录结构,只要按照约定的格式编写,很容易编写自己的模块。

python模块组成:

mymodule
|-- __init__.py
|-- x.py
|-- y.py
|-- submodule
|--__init__.py
|-- x.py
|-- y.py

Python模块下必须有__init__.py文件,表明这是一个模块;如果有子模块,那么子模块也必须有__init__.py文件。该文件可以为空。

如果mymodule/__init__.py里有add()方法,外部调用方法:

import mymodule
mymodule.add()

如果mymodule/x.py里有add()方法,外部调用方法:

from mymodule import x
x.add()

如果mymodule/submodule/__init__.py里有add()方法,外部调用方法:

import mymodule.submodule
mymodule.submodule.add()

如果mymodule/submodule/x.py里有add()方法,外部调用方法:

from mymodule.submodule import x
x.add()

第三方模块

Python社区有大量的第三方模块供我们使用。例如网站:https://pypi.python.org/pypi。

安装pip

我们一般是通过包管理工具pip安装第三方模块的。在安装Python后,系统一般会带有该工具。安装windows版本的时候注意:如果Windows提示未找到命令,可以重新运行安装程序添加pip。

下面是Linux版本安装方法

(1)ubuntu:

sudo apt-get install python-pip

(2)Fedora、centos:

yum install python-pip

(3)Linux, Mac OSX, Windows 下都可用 get-pip.py 来安装 pip:https://pip.pypa.io/en/latest/installing.html

或者直接下载:get-pip.py ,然后运行在终端运行 python get-pip.py 就可以安装 pip。

Note: 也可以下载 pip 源码包,运行 python setup.py install 进行安装。

安装好后设置环境变量。windows下是:

PATH=%PATH%;D:\Python34;D:\Python34\Scripts;

分别是Python和Scripts的所在目录。

如果提示pip版本过低,通过下面命令更新:

pip install --upgrade pip

示例

一般来说,第三方库都会在Python官方的http://pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称,可以在官网或者pypi上搜索,比如Pillow的名称叫Pillow,因此,安装Pillow的命令就是:

$ pip install Pillow

Collecting Pillow
Downloading Pillow-4.0.0-cp34-cp34m-win32.whl (1.2MB)
Successfully installed Pillow-4.0.0

耐心等待下载并安装后,就可以使用Pillow了。

PIL:Python Imaging Library,Python平台图像处理库。PIL功能非常强大,但API却非常简单易用。

图像缩放:

# coding: utf-8
from PIL import Image
im = Image.open('test.jpg')
print(im.format, im.size, im.mode)
im.thumbnail((200, 100))
im.save('thumb.jpg', 'JPEG')

模糊效果:

# coding: utf-8
from PIL import Image,ImageFilter
im = Image.open('test.jpg')
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')

验证码:

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

# 随机字母:
def rndChar():
return chr(random.randint(65, 90)) # 随机颜色1:
def rndColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) # 随机颜色2:
def rndColor2():
return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) # 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
for y in range(height):
draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

注意示例里的字体文件必须是绝对路径。

Python学习--09 模块的更多相关文章

  1. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台

  2. Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...

  3. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  4. Python学习之模块进程函数详解

    今天在看<Beginning Linux Programming>中的进程相关部分,讲到Linux几个进程相关的系统函数: system , exec , fork ,wait . Pyt ...

  5. python学习——常用模块

    在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块. 一.什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文 ...

  6. Python学习之模块基础

    模块就是程序 编写以下简单代码 print('hello python') 并将py文件保存在c盘的python(假设新建)文件下,通过pycharm的Terminal 或者windom命令窗口调出p ...

  7. python学习之模块导入,操作邮件,redis

    python基础学习06 模块导入 导入模块的顺序 1.先从当前目录下找 2.当前目录下找不到,再从环境变量中找,如果在同时在当前目录和环境变量中建立相同的py文件,优先使用当前目录下的 导入模块的实 ...

  8. python学习笔记-模块和包

    模块导入方法 1.import 语句 import module1[,module2[,...moduleN]] 当我们使用import语句的时候,Python解释器是怎么找到对应对文件对呢?答案是解 ...

  9. Python学习——struct模块的pack、unpack示例

    he struct module includes functions for converting between strings of bytes and native Python data t ...

随机推荐

  1. SQL Server中生成测试数据

    原文:SQL Server中生成测试数据 简介      在实际的开发过程中.很多情况下我们都需要在数据库中插入大量测试数据来对程序的功能进行测试.而生成的测试数据往往需要符合特定规则.虽然可以自己写 ...

  2. Rails当你运行一个数据库回滚错误:ActiveRecord::IrreversibleMigration exception

    最近rails3.2在更改数据库表字段,然后要回滚取消,但在运行rake db:rollback命令,错误: rake aborted! An error has occurred, all late ...

  3. SQL远程备份

    原文:SQL远程备份 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go   -- ====================================== ...

  4. 【转】在PC上测试移动端网站和模拟手机浏览器的5大方法

    查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp. 一.Chrome*浏览器 chrome模 ...

  5. TodoList开发笔记 – Part Ⅲ

    本节开始对TodoList项目的客户端进行开发 一.初步了解JQuery 其实我在学校时有接触过一段时间的Web开发,虽然代码量不多也不复杂,但也已经感受到了各浏览器对Web各项标准的恶意,Web界对 ...

  6. {{angular.js 使用技巧}} - 基于验证框架的扩展(w5cValidator)

    开场白: angular.js 是谷歌出的前端js MV*框架,我也是今年做 worktile 的时候才开始接触的,起初技术选型的时候还准备使用 backbone(毕竟很多大公司在使用他,而且也是比较 ...

  7. DDD(领域驱动设计)理论结合实践

    DDD(领域驱动设计)理论结合实践   写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听 ...

  8. java加载配置文件的三种方式

    比如我们要加载db.properties文件 如图: 比如我们要加载source目录下的db.properties文件.就有以下几种方式 第一种是文件io流: public static void l ...

  9. SQLServer数据库误删数据找回

    记一次SQLServer数据库误删数据找回 昨天 同事在本机清理数据库表时,连接到了生产机,误删了二十几张表,幸好是晚上加班的时候删除的,生产机上当时是一天一备份,还原备份是最后的策略,最关键的还是要 ...

  10. Dynamics CRM 多个Form显示不同的Ribbon按钮

    昨天群里熊宸(Microfoft MVP)给大家分享了以“Dynamics CRM 客户端编程概况”为主题,在群里给大家做了一次精彩的分享. 一些朋友聊到了Ribbon按钮在Form上的显示问题,因为 ...