python入门级教程:详解Python模块、包、库


1.模块

python模块是一个包含Python定义和语句的文件(就是一个.py结尾的脚本文件); 文件名为模块名,文件后缀为 .py; 在一个模块内部,模块名可以通过 __name__方法获得。

定义模块

定义一个模块fibo,即创建一个fibo.py文件。#fibo.py

# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n

    a, b = 0, 1

    while a < n:

        print(a, end=' ')

        a, b = b, a+b

    print()

def fib2(n):   # return Fibonacci series up to n

    result = []

    a, b = 0, 1

    while a < n:

        result.append(a)

        a, b = b, a+b

    return result

导入模块

python习惯上把所有 import 语句放在脚本的开头,全局调用。

>>> import fibo#导入模块fibo

>>> fibo.__name__#__name__方法获得模块fibo的模块名

'fibo'

调用模块中函数

方法1 模块名.函数名

>>> import fibo

>>> fibo.fib2(100)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

方法2 from 模块名 import 函数名1.函数名2,..........

>>> from fibo import fib,fib2#多个函数名之间使用逗号隔开

>>> fib2(100)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

方法3 from 模块名 import *

*表示该模块中所有的函数,会导致代码可读性差(不建议使用)。

>>> from fibo import *

>>> fibo.fib2(100)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

给模块取个别名

import 模块名 as 别名

>>> import fibo as fb

>>> fb.fib2(100)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

给模块中函数取个别名

from 模块名 import 函数名 as 函数别名

>>> from fibo import fib2 as fb2

>>> fb2(100)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

以脚本的方式执行模块

#fibo.py

# Fibonacci numbers module

def fib(n):    # write Fibonacci series up to n

    a, b = 0, 1

    while a < n:

        print(a, end=' ')

        a, b = b, a+b

    print()

def fib2(n):   # return Fibonacci series up to n

    result = []

    a, b = 0, 1

    while a < n:

        result.append(a)

        a, b = b, a+b

    return result

if __name__ == "__main__":

        print("现在该模块被当做脚本执行啦!")

        print(("此时__name__ == %s"%(__name__)))#此时模块的__name__为__main__

        import sys

        result = fib2(int(sys.argv[1]))

        print(result)

python fibo.py 100#if name == "main":之后代码块执行了(常用于测试)

现在该模块被当做脚本执行啦! 此时__name__ == main [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

__name__怎么理解

__name__是个全局变量,存放模块的名字; 当该模块被其它模块调用时,name=模块名,对于fibo.py,name="fibo"; 当该模块被当做执行脚本时,name__为__main( A module’s name is set equal to 'main' when read from standard input, a script, or from an interactive prompt)。 对于fibo.py,如果终端执行 python fibo.py 100 ,if name == "main":后面代码会执行;如果在别的模块中执行import fibo,,if name == "main":后面代码不会执行。

import fibo#if name == "main":之后代码块没执行\

查看模块中的属性:dir函数

>>> import fibo

>>> dir(fibo)

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']

以__开头和结尾的属性为python的内置属性; 'fib', 'fib2'为自定义属性。

导入模块是sys.path怎么理解

sys.path收集python模块的所有搜索路径,可以自己添加搜索路径(sys.path.append('yourpath'))举个栗子:

#test.py

#!/usr/bin/python

import sys

sys.path.append('~/biosoft/')

print(sys.path)

> python test.py

['/home/pylearning', 

 '/home/software/anaconda3/lib/python37.zip',

 '/home/software/anaconda3/lib/python3.7', 

 '/home/.local/lib/python3.7/site-packages', 

'/home/software/anaconda3/lib/python3.7/site-packages',

'~/biosoft/'

]

任何一个python程序执行时,会搜索其导入模块的路径,先搜索内置模块路径; 然后搜索sys.path收集的路径,sys.path中路径依次为:

['/home/pylearning', #被执行程序test.py所在路径'/home/software/anaconda3/lib/python37.zip','/home/software/anaconda3/lib/python3.7', #环境变量PYTHONPATH中路径'/home/.local/lib/python3.7/site-packages', #标准库路径'/home/software/anaconda3/lib/python3.7/site-packages',#标准库路径'~/biosoft/'#自己添加路径]

2.包(库)

建立一个包

sound包包含formats,effects,filters三个子包。

sound/                          #Top-level package(顶层包sound)

      __init__.py              #该文件可以为空,只有该文件存在时sound才会被当做包而不是目录

      formats/                  #Subpackage(子包)

              __init__.py     #同上,该文件存在时,formats才会被当做包而不是目录

              wavread.py

              wavwrite.py

              aiffread.py

              aiffwrite.py

              auread.py

              auwrite.py

              haha.py

              ...

      effects/                  Subpackage for sound effects

              __init__.py

              echo.py

              surround.py

              reverse.py

             haha.py

              ...

      filters/                  Subpackage for filters

              __init__.py

              equalizer.py

              vocoder.py

              karaoke.py

              ...

包中__init__.py文件作用 只有目录中添加__init__.py文件时,目录才会被当做包而不是目录; init.py 可以为空; init.py中可以设置all变量,这个变量主要影响包的导入

对于上文的sound包,sound/filters/init.py中输入__all__ == ["equalizer", "vocoder"]时,from sound.filters import *时不会导入karaoke模块。

从包中导入单个模块

导入sound包中子包effects中的echo模块

方法1

import sound.effects.echo引用它时必须使用它的全名,sound.effects.echo(xxx)。

方法2

from sound.effects import echo引用方法,echo(xxx)

从包中导入所有模块

from sound.effects import *引用方法,echo(xx)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • 用 python 解释器来编程从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此...
    chen_000阅读 517评论 0 3
  • 在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义...
    Java丶python攻城狮阅读 292评论 0 0
  • 如果你从 Python 解释器退出然后再进入它,你所做的定义(函数和变量)都会消失。因此,如果你想写某些更长的程序...
    派派森森阅读 561评论 0 1
  • 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。...
    追逐AI奇点阅读 415评论 0 0
  • python支持模块化组织代码 1. 在一个文件当中进行定义,在解释器当中使用,这样的文件称为模块(module)...
    渭小粉阅读 1,159评论 0 3