豆豆学Python第三集

刘小泽写于19.6.22
函数是程序中可重用的那个部分,而模块就是一个可重用的程序

关于模块

模块(Modules)的目的就是在其他函数中重新使用一些函数,它可以被其他的程序导入然后运行

首先了解标准库模块

# 结果保存为test.py
import sys

print('The commands are:')
for i in sys.argv:
    print(i)

print('\n\nThe PATH is:',sys.path,'\n')

以上代码的意思是:

  • 通过import导入sys模块,这个模块就是包含了内置的一些python解释器和环境相关的功能,可以理解为系统功能(system)。运行这个命令,python就会寻找这个模块,内置模块会最先被找到

  • 另外注意到存在sys.argvsys.path,点号左边是模块名,右边是模块中的变量名,其实这样的写法和R很相似,可以避免同一个变量名在多个模块中同时存在时发生冲突

    • sys.argv 返回一系列命令行参数的列表,并且这个列表是以0为第一位索引的,例如,我们输入python test.py i am robot ,结果会返回4个元素:test.pyiamrobot ,可以看到它也会将程序名作为返回结果,并且作为第一个元素。注意:Python是从0开始计数的
    • sys.path返回的是一系列目录名称,相当于环境变量,如果模块不在当前返回的环境中,那么就需要将模块先放进去,然后才能加载
  • 和R一样,当前目录是指程序启动的目录。可以利用import os; print(os.getcwd()) 查看

  • 每次都写命令的全称(如sys.path)还是比较麻烦的,其实可以直接将模块导入(就像R中先将R包加载进来),利用from sys import argv 。虽然这种办法可行,但还是为了避免后续发生名称的冲突,依然推荐使用import方式

编写自己的模块

每一个脚本都是一个module,只需要将后缀名设为.py,例如定义一个hi函数,将他保存为myscp.py

def hi():
  print('Hi, mymodule.')
__version__='0.1'

下面使用这个新建的模块,重新新建一个脚本:

# 导入我们之前建立的python脚本前缀,代表着模块名
import myscp

myscp.hi()
print('Version', myscp.__version__)
# Hi, mymodule.
# Version 0.1

结果返回的就是myscp.py的模块hi__version__

__name__是什么意思?

看到上面的代码有一个__version__,它的意思是一个内置变量,统称为__name__。例如:新建一个文件new_module.py

print('hello')

def main():
  print('nihao')
if __name__ == '__main__':
  main()
  print('Imported from another module')

好,接下来两种运行方式,注意看区别:

# 第一种:直接运行
python new_module.py
# 结果:
hello
nihao
Imported from another module
# 第二种:导入模块
>>> import new_module
# 结果:
hello

可以看到,直接运行是可以全部输出的,但是导入的方式只输出最开始的一行内容。这是因为:每个python脚本(也就是python模块)都包含了内置的变量__name__,如果是直接运行的话,__name__相当于文件名(包括了后缀);如果是导入的话,__name__相当于导入的模块名(不包含后缀)

__main__就是直接运行时模块的名称(就是脚本全称)

可以利用这个特性来让模块用不同的方式运行,因此上面代码的意思可以理解为:
当模块直接运行时,def后的代码会直接运行;模块是导入的话,def后的代码不会运行

dir函数

它能够返回对象包含的属性名称,当dir() 有参数且参数是模块名称时,函数返回指定模块对应的名称列表;如果没有指定参数,则返回当前模块的名称列表

import sys
dir(sys)
dir()
# 这两种返回的名称是不相同的
# 如果这时新建一个变量a
a=5
dir()#结果会比之前多了一个a
# 将a再删除后
del a 
dir()#又会发生变化

关于包

python的程序是有层次结构的:变量常位于函数内部,函数和全局变量常位于模块内部,而包就是一个包含模块和一个特殊的__int__.py 文件的文件夹,这个文件夹目的就是向python表明:我是特殊的,其中包含了python的模块

例如:我们创建一个world的包,然后下面可以有asiaafrica的子包,然后这两个子包中分别存在chinasouth_africa 的模块,它的布局就会是这样:

- <某个在sys.path中的路径>
    - world/
    - __init__.py
    - asia/
        - __init__.py
      - china/
        - __init__.py
        - test.py
     - africa/
        - __init__.py
      - south_africa/
        - __init__.py
        - foo.py

因此,包是一种能方便组织模块的管理方式


欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到jieandze1314@gmail.com

Welcome to our bioinfoplanet!

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

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,738评论 0 10
  • 模块和包 一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是...
    go以恒阅读 2,267评论 0 4
  • 一、模块 1、模块和导入 当程序代码量变得相当大、逻辑结构变得非常复杂的时候,我们最好把代码按照逻辑和功能划分成一...
    常大鹏阅读 2,982评论 0 9
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,566评论 1 118
  • 上次我们说到了构造方法,书接上文,这次我们来详细了解一下OC中@property中的内容.本文也是我自己寻找了相关...
    哈利_阅读 930评论 0 1