Python学习10——模块与包(含第三方包的下载)

模块

随着我们对Python学习的深入,我们的代码量也会渐渐增多。有时我们为了让书写的代码结构更清晰,我们会将一些代码整理到不同的.py文件中,并跨文件的使用它们。这些可以被其他文件调用的文件,我们就称其为模块。
模块的创建很简单,创建一个.py文件,文件里面可以是变量、函数、类。例如,我们可以将我们在类中学习的代码封装成一个animal模块。
我们先创建一个animal.py文件,在文件中写入我们上次所写的几个类与一个hello函数。

"""Animal.py"""

class Animal():
    def __init__(self, name):
        self.name = name
    def greet(self):
        print(f'Hello, I am {self.name}.')

class Dog(Animal):
    def greet(self):
        print(f'WangWang.., I am {self.name}.')

class Cat(Animal):
    def greet(self):
        print(f'MiaoMiao.., I am {self.name}')

def hello(animal):
    animal.greet()

这样, 我们就创建了一个属于Animal模块。

模块使用

创建好模块后,我们要怎么在其他的.py文件中使用它呢?使用方法如下:
在新的.py文件中,这里是新建了一个main.py文件。使用import importname将所需要的模块调入。若要使用其中的类或函数,则采用importname.classnameimportname.functionname的方式调用。

"""main.py"""

import animal

#使用animal模块中的类
dog = animal.Dog('dog')
animal.hello(dog)       #WangWang.., I am dog.
cat = animal.Cat('cat')
animal.hello(cat)       #MiaoMiao.., I am cat

有时候,为书写方便,或为避免同名产生歧义。我们可以在引入包的时候给我们引入的包一个别名。

"""main.py"""
#给引入的animal包一个别名ani
import animal as ani

#用别名调用模块中的类
dog = ani.Dog('dog')    
ani.hello(dog)       #WangWang.., I am dog.
cat = ani.Cat('cat')   
ani.hello(cat)       #MiaoMiao.., I am cat

有时我们需要的只是模块中的某个类或函数。此时,我们也可单独导入所需的类或函数,而无需导入整个模块。

"""main.py"""
#只引入所需要的函数或类
from animal import Dog,Cat,hello


#使用animal模块中的类
dog = Dog('dog')
hello(dog)       #WangWang.., I am dog.
cat = Cat('cat')
hello(cat)       #MiaoMiao.., I am cat

对应的,你也能给引入的类或函数一个别名。

"""main.py"""
#为导入的方法或类取个别名
from animal import Dog as D,Cat as C,hello


#使用animal模块中的类
dog = D('dog')
hello(dog)       #WangWang.., I am dog.
cat = C('cat')
hello(cat)       #MiaoMiao.., I am cat

最后,还有一种最省力的方法,直接导入包中所有的类与函数。直接from importname import *
但不推荐这样使用,因为这样会导致代码的可读性很差,而且还可能会覆盖一些你已经定义过的东西。

"""main.py"""
from animal import *

#使用animal模块中的类
dog = Dog('dog')
hello(dog)       #WangWang.., I am dog.
cat = Cat('cat')
hello(cat)       #MiaoMiao.., I am cat

包的使用

包是一种通过用“带点号的模块名”来构造 Python 模块命名空间的方法。 例如,模块名 A.B 表示 A 包中名为 B 的子模块。
假设你想为声音文件和声音数据的统一处理,设计一个模块集合(一个“包”)。由于存在很多不同的声音文件格式(通常由它们的扩展名来识别,例如:.wav, .aiff, .au),因此为了不同文件格式间的转换,你可能需要创建和维护一个不断增长的模块集合。 你可能还想对声音数据还做很多不同的处理(例如,混声,添加回声,使用均衡器功能,创造人工立体声效果), 因此为了实现这些处理,你将另外写一个无穷尽的模块流。这是你的包的可能结构(以分层文件系统的形式表示):

sound/                          Top-level package
      __init__.py               Initialize the sound package
      formats/                  Subpackage for file format conversions
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  Subpackage for sound effects
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  Subpackage for filters
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

当导入这个包时,Python搜索 sys.path 里的目录,查找包的子目录。
包的用户可以从包中导入单个模块,例如:

import sound.effects.echo

sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

导入子模块的另一种方法是:

from sound.effects import echo

echo.echofilter(input, output, delay=0.7, atten=4)

另一种形式是直接导入所需的函数或变量:

from sound.effects.echo import echofilter

echofilter(input, output, delay=0.7, atten=4)

使用第三方的包

pyhon中有很多不错的第三方的包,例如numpy、Pillow等等,在此不展开介绍。这里就简单的介绍一下这些包的获取方法。
在python终端中输入:

pip install packagename

packagename根据你所要下载的包进行替换,然后点击回车运行。

例如,我们想要下载一个pillow包,则可输入

pip install pillow

不过,由于墙的存在,直接下载会比较慢甚至下载失败。因此,我们也可以转到国内镜像进行下载。

pip  install pillow -i https://pypi.douban.com/simple --trusted-host pypi.douban.com

下载后的结果如图所示:
在这里插入图片描述
然后我们就可以使用PIL的模块,对图片进行一些操作:

from PIL import Image, ImageFilter

# Open an image
im = Image.open('test.jpg')
im.show()
# Use contour filter
im2 = im.filter(ImageFilter.CONTOUR)
im2.show()
im2.save('new.jpg', 'jpeg')

在这里插入图片描述

国内镜像
http://pypi.douban.com/simple/ 豆瓣
http://mirrors.aliyun.com/pypi/simple/ 阿里
http://pypi.hustunique.com/simple/ 华中理工大学
http://pypi.sdutlinux.org/simple/ 山东理工大学
http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
https://pypi.tuna.tsinghua.edu.cn/simple 清华

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值