编程入门03:Python模块与库

上一篇:编程入门02:Python基础语法

现在我们已经用过id()、input()、print()等多个函数,这些都是默认可用的对象。Python官方还提供了更多的可重用对象,它们分门别类地放在不同的“模块”(Module)之中,你可以在需要的时候“引入”(Import)特定的模块。引入模块之后,默认的主“名称空间”(Namespace)中就会增加指向模块对象的变量,可以使用“模块变量.成员变量”的形式对模块中的对象进行“引用”(Reference)——“.”称为引用运算符,可以读作“的”。

现在我们尝试引入数学模块math,以使用其中的数学工具:

>>> dir()  # dir函数查看主名称空间中的变量列表,默认已存在7个变量
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> import math  # 引入math模块,也可以同时引入多个模块(用逗号分隔)
>>> dir()  # 主名称空间中增加了math变量
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'math']
>>> math  # math变量指向math模块
<module 'math' (built-in)>
>>> math.sqrt(4)  # 平方根函数
2.0
>>> math.exp(2)  # 自然常数幂函数
7.38905609893065
>>> math.pi  # 圆周率常数
3.141592653589793
>>> math.e  # 自然常数
2.718281828459045
>>> dir(math)  # 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', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

每个模块都拥有自己的名称空间,这样变量名只需在本名称空间中不重复即可。用模块名称作为dir函数的参数,就可以查看模块名称空间中的变量列表。如果想要知道每个函数如何使用,则可以使用help函数:

>>> help(math.exp)
Help on built-in function exp in module math:

exp(...)
    exp(x)
    
    Return e raised to the power of x.

接下来尝试引入用于子进程管理的模块subprocess,这次增加了as关键字,可以指定变量名称而不使用默认名称:

>>> import subprocess as sp  # 引入subprocess模块,自定义变量名sp(模块名太长引用起来不方便)
>>> sp.call("cmd")  # call函数调用命令提示符程序cmd.exe(可以调用任何可执行程序)
03_sp.png

再来尝试用于生成随机数的模块random,这次再换一种写法——直接将其中的某个变量引入主名称空间(也可以同时引入用逗号分隔的多个变量):

>>> from random import randint  # 从random模块引入randint函数
>>> help(randint)  # 查看randint的说明:随机返回指定开区间内的整数
Help on method randint in module random:

randint(a, b) method of random.Random instance
    Return random integer in range [a, b], including both end points.

>>> randint(1,6)  # 随机生成1到6之间的整数,即模拟掷骰子
5
>>> randint(1,6)
2

这样引入的变量就能象input、print那样直接使用了,如果写成“from random import *”则会将模块中的所有成员引入主名称空间,不过实际编程中不建议这样做。

模块的集合被称为“库”(Library),Python官方提供的所有模块共同组成了庞大的“Python标准库”。在IDLE主菜单中点击 Help > Python Docs > The Python Standard Library 查看Python标准库的详细说明,官网也提供了在线版本 https://docs.python.org/3/library/index.html 你可以先通读该页面建立起对Python标准库的大致印象,今后有需要时就能知道可以引入什么模块,再用dir函数配合help函数查看具体用法。

你可能注意到了主名称空间默认存在的7个变量中有一个“__builtins__”,它指向一个名为builtins的模块,只要你dir一下就会找到input、print等等熟悉的名字——这些函数之所以默认可用,就是因为Python解释器自动引入了builtins这个模块:

>>> __builtins__
<module 'builtins' (built-in)>
>>> import builtins
>>> id(__builtins__)
2723238745656
>>> id(builtins)
2723238745656

——编程原来是这样……

编程小提示:Python之禅

Python标准库中有一个小彩蛋,只要你引入this这个模块,就能看到一段“Python之禅”,这是一位Python核心开发者对于程序设计的心得感悟,文笔饶有趣味,让我们在学习Python的过程中慢慢体会其中蕴含的丰富哲理吧……

>>> import this
The Zen of Python, by Tim Peters
蟒宗之禅语,提姆彼得斯(中文是我加的,参考了几种网上的译文)

Beautiful is better than ugly.
优美胜于丑陋
Explicit is better than implicit.
明白胜于晦暗
Simple is better than complex.
简洁胜于繁复
Complex is better than complicated.
繁复胜于艰深
Flat is better than nested.
扁平胜于嵌套
Sparse is better than dense.
松散胜于聚集
Readability counts.
代码确保易读
Special cases aren't special enough to break the rules.
规则拒绝特例
Although practicality beats purity.
实用不求纯净
Errors should never pass silently.
错误不可放过
Unless explicitly silenced.
除非明确理由
In the face of ambiguity, refuse the temptation to guess.
模棱两可之间,不要随意猜测
There should be one-- and preferably only one --obvious way to do it.
必有唯一选择,明显胜过其余
Although that way may not be obvious at first unless you're Dutch.
起初无法分辨,只因你非大神
Now is better than never.
尝试好过放弃
Although never is often better than *right* now.
但须谋定而动
If the implementation is hard to explain, it's a bad idea.
实现难以解释,定是糟糕方案
If the implementation is easy to explain, it may be a good idea.
实现易于解释,或为良好方案
Namespaces are one honking great idea -- let's do more of those!
名称空间极好,诸君多加使用!

Python之禅的原始出处 https://mail.python.org/pipermail/python-list/1999-June/001951.html

下一篇:编程入门04:Python第三方包

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

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,207评论 4 16
  • 1.元类 1.1.1类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这...
    TENG书阅读 1,247评论 0 3
  • 2017最热的词汇莫过于AI——人工智能。面对新科技,程序员能否及时适应,你是否适合学习人工智能的编程语言 Pyt...
    Python爬虫学习阅读 4,086评论 0 15
  • 在这个网络发达的今天,几乎所有的信息交流都是通过网络的电子方式,发电子邮件,发短信,发语音。而你有多久没有尝试过用...
    紫陌armanda阅读 221评论 1 1
  • 阴雨连绵的秋季。放假了,我们只愿待在家里。 作业、手工、游戏、读书、家务、电视……偶尔还要吵吵架。 ...
    夭夭泠泠阅读 132评论 0 0