非程序员的编程之旅——Python基础篇(7)模块

作者:李禹锋,重庆芝诺大数据分析有限公司数据挖掘工程师。

        终于要结束python基础篇了,我的内心毫无波动,甚至还有点想笑。下一期开始系列名称将更名为数据分析师的编程之旅。在本节也终于要出新手村了,一朝入坑深似海,下一篇会讲一些常用的内置模块。除了前几篇不停强调的编程思想以外,对于模块的应用算是另一个评价编程能力的标准。甚至大部分程序员不需要了解编程思想,只要会使用模块,会调用API,程序运行得一样尚好,只是知其所以然总归比写个程序一脸懵逼的好。

本文导读:

01

安装第三方模块

        第一篇曾说过,使用anaconda最大的一个好处是模块的安装很方便。现介绍两种安装模块的方式。


1、anaconda里鼠标点击安装;

(1)打开Anaconda Navigator,进入Environments,看到如下界面。(可能你之前安装过包,这里都会依次进行展示,还包括一些依赖库)

(2)点击上图Installed里,找到Not installed,会弹出如下界面。

(3)打钩。

(4)点击右下角apply。

(5)等待系统检查依赖库,然后再次点击apply,然后就是漫长的等待。

2、pip安装

        这个方法其实是python原生安装包的方式,但是时常会因为依赖库不全,导致安装过程特复杂。但是注意一点是,anaconda里也仅仅是对部分python包进行了很好的封装,剩下的包在anaconda里不一定找得到,所以这种时候还是得回到python原生安装包的方式(还有一个easy_install,操作差不多)。


(1)在anaconda里打开命令行(cmd)。

命令行界面如下:

(2)输入指令:--->  pip install 模块名  <---

直接这样输入会从python官网上拉取相应的模块,对于网速有问题的同学,即使翻墙之后下载速度也会让你怀疑人生。故尽量加上-i参数来指定镜像,一般我使用豆瓣的镜像,网址不会变,指令如下:

pip install 模块名 –i https://pypi.douban.com/simple

        当然也可以使用阿里镜像、清华镜像等,镜像均对官网进行了快照,具体更新时间不明,但据说是几小时就会有一次快照(某种意义上其实就是爬虫)。


        或者也可以使用pip install 本地路径中模块的安装包,例如安装以whl为后缀的安装文件。


        还有一些在GitHub上直接下载的项目,一般下载下来后会是一个目录,其中包含了有setup.py文件,在命令行中使用cd命令进入项目目录,直接输入python setup.py install即可。

02

模块为何物

        前两篇介绍的函数和类,是对代码的一个打包,使得重复代码尽可能的少出现,类可以算是对函数的一个包装。那么模块是什么呢,其实本质就是别人写的python代码,只是那些程序员水平很高,写出来的函数、类功能很强大,于是将多个函数、类进行了包装,于是就成了模块。


        Python中的模块基本上比其他语言创建来得更简单,虽然也会存在一些弊端,弊端部分后面再说,现在先来扯好处。

        Ok,上面那个文件夹就是一个模块了,python就已经认识了。其实就是在一堆py文件里再加一个__init__.py文件即可,里面可以不用写任何东西(上一篇也说过__init__使用得非常多,特别是在看别人模块、框架源码的时候)。


        本篇接下来的介绍我将换成sublime来进行讲解(可以把层级目录很清晰的展现出来,理解即可,不用换编辑器),首先介绍模块和目录的关系。


        总的来说,python的模块就是文件目录,python在读取该文件夹里面的py文件时,首先会读取__init__.py这个文件,然后再依次读取各个py文件。如下图是我个人制作模块时比较喜欢的方式(仅可作为参考,不可作为标准)。

在sublime中显示如下:

        将代码分工分别放进不同的py文件中,可以使得整个程序逻辑更加清晰,在api.py中定义好运行的类,在config.py中设置好需要导入的包和全局变量(例如数据库URI、爬虫目标网站url等等),然后在__init__.py中定义主函数,相互之间调用即可。


        调用介绍两种方法(其实本质是一种),主要的关键字是import。


        例如我在api.py文件里定义一个hello函数,在config.py里定义一个字符串a。

然后在__init__.py里调用api.py文件和config文件。

注意一点,在调用时,.py不写,不需要写,更不能写。在使用其类、函数、参数时,通过打点的方式进行调用。如下图所示。

        看过其他python基础教程的朋友是否一下子就豁然开朗模块是怎么回事。


        另外一种调用的方式其实原理和上面那种一样,只是在调用一些较大的模块时,不希望模块调用得太多导致内存消耗太大。以及对于调用模块内容的时候,每次都要在前面加上模块名称会显得有些累赘(现在这个模块,在这个例子里是指的每个py文件,但整个文件夹是一个更大的模块),所以有另外一种调用的语法,是使用from和import两个关键词来进行定义的。

        效果一样,from 模块名 import 调用内容。

        接下来需要介绍多层级目录的模块,其实主要思想和上文一样。首先介绍层级目录。

        myPackage是父级目录,子级目录有p1和p2,myPackage里有__init__.py、api.py、config.py三个文件。在p1的model1.py里定义一个字符串b,在p2的model2.py里定义一个字符串c。api.py和config.py两个文件里东西不变。

        p1和p2文件夹中的__init__.py文件里什么东西都不写。在父级的__init__.py文件中调用方法如下图。

        文件层级目录同样也是通过打点来实现的。当然也可以直接import p1或者import p2,然后通过打点来调用。调用过的每个py文件都对应会生成一个pyc文件,那是将py文件中的代码自动编译成字节码(计算机理解起来更快,大概快个几百上千倍吧)。

03

内置与第三方模块

        按照第2个版块中所述的方法可以创建出自己的模块,但是只能够在这个文件目录里使用这个自己定义的模块,并不能在任意一个工作路径里进行调用。若想要在自己电脑上任意地方新建的python程序都调用,需要找到安装目录中的Lib文件夹,内置的、安装过的几乎所有模块都在这个地方,反正你把你定义的模块放在这里就行了。Anaconda中我是新建了一个名叫PY36的环境,对应着文件目录在

*:\ProgramData\Anaconda2

这个*号是指安装anaconda时指定的盘,默认是在C盘,若自定义了安装目录自行找到即可。使用anaconda3的同学最后的数字改成3。自己创建的python虚拟环境在envs文件夹下,打开后找到自己对应虚拟环境的文件夹,下面有Lib目录。

真实Python环境中的Lib打开安装目录就有了。


        调用的方法和第2个版块中所述一模一样。在更多的时候不需要自己写模块,调用内置模块和第三方模块即可,当有了一定python基础之后,在工作中可以把自己常用的一些功能自己进行一个封装,然后直接进行调用,可以节省很多写重复代码的时间。在下一个系列的后期,也会带着大家封装自己爬虫的模块(你要叫框架、包也可以)。


        插播一个小故事,前段时间老板让我带个实习生,实习生问我,我们爬虫用什么框架啊,scrapy吗?我压低声线、一本正经的告诉他,我们用自己写的框架。那一瞬间,顿时感觉自己逼格高了几个档次,然而估计实习生的心理活动是!@#¥%……&*()这样的。


        本文篇幅不多了,就不再多废话了,最后说明一下为什么前面初讲模块时说python模块、类、函数这些很方便,但同时也有弊端。因为藏不住,你提供一个API给别人就等于把底层源码提供给别人了,所以开源的很多,而且现在势头很大,其实一开始不是不想藏起来啊,那都是知识产权,但是藏不住啊,于是就开源了,还获得个美名(个人理解2333)。


        下一篇是基础部分的最后一篇,会讲解python几个常用内置模块的使用、对于系统的操作以及对于文件的操作,有时间有兴趣有耐心的同学就去Lib文件夹下面找到对应的文件或文件夹,看看底层代码的实现。看不懂无所谓,目前我们只学会上层调用即可。等到自己积累了一定编程能力之后,再来编写底层吧。

人生苦短,我选python。快出新手村了,可能各位看得还是一脸的懵逼,但是无所谓,目前的部分,更多是需要理解,有代码的部分最好能跟着一起操作一下,学习程序光看是学不会的,只有实际敲着代码才能学习。在接下来的各系列会直接放源码出来,那就更需要同学们实际跟着敲代码。对于理解部分我会尽可能的以注释的方式写出来,所以对于初学者或没有python编程基础的同学,如果不跟着敲代码很难真正的理解。


      重庆芝诺大数据分析有限公司是国内首批大数据技术应用解决方案的专业服务提供商,是中国商业联合会数据分析专业委员会事务所会员单位。公司基于Apache Hadoop 框架,自主研发的大数据综合分析处理平台—Zeno Data Matrix平台,提供一站式大数据开发环境和工具,包括数据抓取、清洗、储存、分布式计算、分析挖掘及可视化应用的整体解决方案。快速部署,整合数据信息,盘活数据资产,为政府、企业的经营决策提供科学支撑。

     芝诺数据现拥有近20项自主知识产权的软件专利。拥有大数据综合分析处理平台(ZDM平台)、大数据教育(实训)平台、重庆市安全生产综合服务平台、四点半课堂等。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值