Python 基础 (模块)

统一说明:非常遗憾,图片无法上传,请移步到CSDN博客(Mark学编程)或者微信公众号(Mark学编程)或者QQ加群(Mark学编程)参考。没有办法,只能这样给人一广告之嫌了。

模块

你已经看到,你如何通过定义函数,在程序中重复使用代码,如果你需要重复使用,来自你自己写的其他程序中的若干函数,怎么办?你可能猜到了,答案是模块。
有若干撰写模块的方法,简单的方法就是创建一个扩展名为 .py的文件。文件中有函数和有变量。
另一个方法则是,用Python源语言写代码,比如,你可以用C程序语言来写模块,当编译时,他们可以被用于Python代码,当你使用标准Python编译器时。
一个模块可以被另一个程序导入(import),使用其功能。这也是我们使用Python标准库的方法。首先,我们看看如何使用标准库模块。
例子:

在这里插入图片描述

自行测试运行,这里故意不显示结果

代码运行原理
首先,我们使用import语句导入sys模块。基本上,这表示我们告诉Python我们要使用这个模块。sys模块包含的功能与Python的编译器和环境有关,比如系统。
当Python执行import sys语句时,它寻找sys模块,在这个例子中,它是内置模块,所以Python知道到那里找。
(其中一段,译者跳过翻译,感觉对初学者muddy the water)
代码里argv变量是sys模块中的,这里用了点记号来访问,sys.argv; 清楚的表明这个名字是sys的一部分。另一个好处是这样名字就不会和程序中其他argv相碰撞。
sys.argv变量是字符串列表(列表会在今后的章节详细解释)。具体的,它包含命令行实际参数列表。也就是说,用命令行传递给程序的实际参数。
(其他略,作者这此写了好多,感觉暂时无用,请参考原版)
Byte-compiled.pyc 文件

From…import 语句
如果你想直接导入argv变量到你的程序中(防止每次写下sys.),那么你可以用 from sys import argv 语句。
(这个有利有弊,作者建议不要使用from…import, 因为容易碰车,并且使用带点的代码更清晰。)
举例:
from math import sqrt
print(“Square rootof 16 is”, sqrt(16))

模块的 name
每个模块都有自己的名字,模块中的语句能够发现他们模块的名称。这个特别是分方便,用于发现此模块是自己单独运行还是被导入的。正像以前提及的,当一个模块被初次导入后,它的代码被执行。根据模块是单独自己运行还是被导入另一个模块,我们可以利用这一点使模块的有不同的行为。这个可以利用模块的name属性达成。
举例:
if name == ‘main’: # 注意都是下双划线
print(‘This program is being run by itself’)
else:
print(‘I am being imported from another module’)

代码运行原理
每一个Python的模块都有定义的name。 如果这是’main’, 那就暗示模块是自己单独运行的,我们可以采取恰当行动。

制作自己的模块
创建自己的模块简单,你一直在这么做。这是因为每个Python程序也是一个模块。你仅仅需要确保文件有.py扩展名。下列例子应当使之清晰。
以下代码另存为 mymodule.py
Def sayHi():
Print(‘Hi, this is mymodule speaking.’)
version = ‘0.1’
上面是模块例子。你可以看到,和Python程序相比,模块并没有什么特别的东西。我们将在下面看到如何在Python的其他程序里使用这个模块。
记住,模块应当要么放在与导入模块策程序相同的目录下,要么放在sys.path列出的目录下。
例子
Import mymodule
Mymodule.sayHi()
print(‘Version’, mymodule.version)

代码运行原理
请注意,我们使用点连接符来访问模块的成员。Python很好的重复使用了同样的符号来让你感到呢Pythonic,我们也不需要不断学习新的东西。
请看下面的例子:
from mymodule import sayHi, version
sayHI()
print(‘Version, version’)
(还有一小段译者选择略去)
你可以这样:
From mymodule import *
这将导入所有公开的比如像sayHi这样的名字。但并不能导入带双下划线的,因为他们是带双下划线的(作者循环证明了,不管怎样,双下划线的不能通过上面的代码达到直接使用的目的。)
Python之禅
Python其中一个原则是:明确好过暗示,使用import this学习Python的规矩吧。
dir 函数
内置dir()返回对象定义的名称列表。如果对象是模块,这个列表包含函数,类和变量,这些都是在模块中定义。没有翻译完,译者吃不准到底如何翻译。

例子


在这里插入图片描述

请学着上面的代码练习一番。

代码工作原理
起初,我们看到dir 在导入 sys 模块上的用法。我们可以看到包括大量的属性列表。
接下来,我们使用dir函数但并没有给它传参,默认的,它返回了当前的模块列表。请留意,导入的模块也是他列表的一部分。
为了观察dir 的运作,我们定义了一个新的变量a, 给它赋值然后检查dir,我们注意到有个额外的值在那个列表了。我们使用del将变量/属性删掉,变化马上在dir函数的输出上有翻译。
对于del的一个注意,这个语句用于删除变量/名字, 然后语句运行, 在这个例子中del a, 你就不能访问变量a了。就像是它从来没有存在一样。
请注意,dir()函数在任何对象上都适用,举例运行 dir(str) 得到string类的属性。
还有一个vars()函数,它能给你属性和值,但并不对所以案例有效。


到此为止,你必定已经开始留意到有层次的组织你的程序了。变量一般在函数内,函数和全局变量一般在模块内。那么如何组织模块?那就是包入场的时候到了。
包就是一个模块们的文件夹,有一个特别的init.py文件,给Python标出这个文件夹是特别的,它包含Python模块。
让我们说,你需要创建一个叫做“world”的包,里面有子包名字为“asia”,”Africa”等的。这些子包包含像‘India’,‘Madagascar’等模块。
你应该像下面一样组织文件夹:

在这里插入图片描述

总结
就像函数是程序的部分重复使用,模块就是重复的程序使用。包则是另外一个等级式的组织模块(形式)。与Python一起的标准文库就是一个如此的一系列的包和模块。
我们已经学习了如何使用模块和创建自己的模块。
下一步,我们学习一些叫做数据结构的有趣的概念。

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

推荐阅读更多精彩内容

  • 模块和包 一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是...
    go以恒阅读 2,267评论 0 4
  • 一、模块 1、模块和导入 当程序代码量变得相当大、逻辑结构变得非常复杂的时候,我们最好把代码按照逻辑和功能划分成一...
    常大鹏阅读 2,982评论 0 9
  • 最近在朋友圈看到一个萌妹子求助。她目前正在准备2017年秋招,但是各种校招、内推、实习的信息铺天盖地,以至于她常常...
    有田札记阅读 521评论 1 5
  • 1. 小L是我的学生,一个大个子男孩,长的挺帅。 但是他今天彻底激怒了我。 事情缘起于上周五。上周我完成了必修四宋...
    柯一晨耶阅读 567评论 0 3
  • 今天其实仍然在读《人生总会有办法》第三章问题多是庸人自扰,在生活中,我们总是让自己很忙碌,总是放大问题,也一味的从...
    弈臻阅读 117评论 0 0