认识模块

对于模块,在前面的一些举例中,已经涉及到了,比如曾经有过:import random (获取随机数模块)。为了能够对模块有一个清晰的了解,首先要看看什么模块,这里选取官方文档中对它的定义:

A module is a file containing Python definitions and statements. The file name is the module name with the suffix .py appended. Within a module, the module's name (as a string) is available as the value of the global variable name.

都是洋码子,翻译一下不?不!还是只说要点:

•模块就是一个含有python语句的文件

•模块名就是文件名(不要扩展名.py)

那么,那个import random的文件在哪里呢?

用曾经讲过的那个法宝:help()函数看看:

>>> help(random)

然后就出现:

NAME

random - Random variable generators.

FILE

/usr/local/lib/python2.7/random.py

DESCRIPTION

...

这里非常明显的告诉我们,random模块的文件就是: /usr/local/lib/python2.7/random.py(注意:这个地址是我的计算机中的地址,可能跟看官的不一样,特别是如果看官用的是windows,肯定跟我这个不一样了。)

看官这时候可能有疑问了,import是怎么找到那个文件的?类似文件怎么写?不用着急,这些我都会一一道来。

标准库

看了前面的random这个例子,看官可能立刻想到一个问题:是不是已经有人把很多常用的功能都写成模块了?然后使用者只需要用类似方法调用即可。的确是,比如上面显示的,就不是某个程序员在使用的时候自己编写的,而是在安装python的时候,就被安装在了计算机里面。观察那个文件存储地址,就知道了。

我根据上面得到的地址,列出/usr/local/lib/python2.7/里面的文件,这些文件就是类似random的模块,由于是python安装就有的,算是标配吧,给它们一个名字“标准模块库”,简称“标准库”。

这张图列出了很少一部分存在这个目录中的模块文件。

Python的标准库(standard library)是Python的一个组成部分,也是Python为的利器,可以让编程事半功倍。

有一点,请看官特别注意,对于标准库而言,由于内容太多,恐怕是记不住的。也不用可以的去记忆,只需要知道有这么一个东西。如果在编写程序的时候,一定要想到,对于某个东西,是不是会有标准库支持呢?然后就到google或者上面给出的地址上搜索。

举例:

>>> import sys #导入了标准库sys

>>> dir(sys) #如果不到网页上看,用这种方法可以查看这个标准库提供的各种方法(函数)

['__displayhook__', '__doc__', '__egginsert', '__excepthook__', '__name__', '__package__', '__plen', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', '_mercurial', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'last_traceback', 'last_type', 'last_value', 'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']

>>> sys.platform #比如这个

'linux2'

>>> sys.version #还有这个

'2.7.6 (default, Nov 13 2013, 19:24:16) \n[GCC 4.6.3]'

>>> help(sys.stdin) #这是查看某个模块方法具体内容的方式

标准库,在编程中经常用到。这里不赘述。只要看官能够知道在哪里找、如何找所需要的标准库即可。

自己编写模块

看官可能比较喜欢“自己动手,丰衣足食”(虽然真的不一定是丰衣足食),在某些必要的时候,还真得自己动手写一些模块。那么怎么编写模块呢?

前面已经交代,模块就是.py文件,所以,只要将某些语句写到一个.py文件中,它就是一个模块了。没有什么太多的秘密。

在某个目录下面建立了一个文件,名称是:mmmm.py,如下图所示,然后编辑这个文件内容。编辑好后保存。

代码是文件内容:

#!/usr/bin/env python

#coding:utf-8

def my_name(name):

print name

class pythoner:

def __init__(self,lang):

self.lang = lang

def programmer(self):

print "python programmer language is: ",self.lang

图示是文件所在目录,并且在该目录下打开了python的交互模式(我这是在ubuntu下,看官是别的操作系统的化,注意路径,如果遇到问题,可以暂时搁置,看下文)。

从图中可以看出,当前目录中有这个文件:mmmm.py

在交互模式下,仿照对标准库模块的操作方式:

>>> import mmmm

>>> dir(mmmm)

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'my_name', 'pythoner', 'web']

>>> mmmm.__doc__ #这个是空的,正是,因为我未曾写过任何文档说明

>>> mmmm.__name__ #名字

'mmmm'

>>> mmmm.__file__ #文件

'mmmm.py'

再看后面的:my_name,pythoner,web,都是我在内容中自己写的。

>>> mmmm.web

'https://qiwsir.github.io'

web是模块mmmm中的一个通过赋值语句建立的变量,在这里,它编程了mmmm的属性,能够通过点号运算访问,其实不仅仅是这类型的赋值,其它通过def,class等,都能做为mmmm模块的属性。

>>> mmmm.my_name

>>> mmmm.pythoner

当然,跟操作标准库一样,一样能够使用help()来看看这些属性的具体内容:

>>> help(mmmm.my_name)

Help on function my_name in module mmmm:

my_name(name)

>>> help(mmmm.pythoner)

Help on class pythoner in module mmmm:

class pythoner

| Methods defined here:

|

| __init__(self, lang)

|

| programmer(self)

怎么调用呢?这样即可:

>>> mmmm.my_name("qiwsir")

qiwsir

当调用模块中的函数的时候,用模块的名称(import mmmm)+点号+函数(注意,函数后面要有括号,如果有参数,括号里面跟参数),即 module_name.funciton(*args)

>>> py = mmmm.pythoner("c++")

>>> py.programmer()

python programmer language is: c++

上面两行,则是演示用绑定的方法调用模块中的类以及类的实例方法。跟以往的相比较,似乎都是在前面多了一个mmmm.

如果感觉这个mmmm比较麻烦,可以用from,具体是这样的:

>>> from mmmm import *

>>> my_name('qiwsir')

qiwsir

>>> web

'https://qiwsir.github.io'

>>> py = pythoner("c++")

>>> py.programmer()

python programmer language is: c++

这次不用总写那么mmmm了。两种方式,哪个更好呢?没有定论。看官在以后的实践中体会,什么时候用什么方式。

上面用from mmmm import ,其中符号,表示将所有的都import进来,用这个方法,也可以只import一部分,如同:

>>> from mmmm import my_name #如果看官前面运行了上述操作,需要关闭交互模式,

#再重启,才能看到下面过程

>>> my_name("qiwsir")

qiwsir

>>> web #没有import这个,所以报错。

Traceback (most recent call last):

File "", line 1, in

NameError: name 'web' is not defined

这就是基本的import模块方法。看官的疑问,还要存着。且听下回分解。

python如何自学模块_跟老齐学Python之Import 模块相关推荐

  1. 跟老齐学python轻松入门_跟老齐学Python 轻松入门 中文pdf_Python教程

    资源名称:跟老齐学Python 轻松入门 中文pdf 第0章 预备 1第1章 基本对象类型 13第2章 语句和文件 100第3章 函数 145第4章 类 181第5章 错误和异常 233第6章 模块 ...

  2. python实验室怎么样_跟老齐学Python之一个免费的实验室

    在学生时代,就羡慕实验室,老师在里面可以鼓捣各种有意思的东西.上大学的时候,终于有机会在实验室做大量实验了,因为我是物理系,并且,遇到了一位非常令我尊敬的老师--高老师,让我在他的实验室里面,把所有已 ...

  3. 零基础python从入门到精通 pdf-跟老齐学Python:从入门到精通PDF电子版

    跟老齐学Python:从入门到精通是一本面向初学python的人提供的最好教程,在书中作者以非常欢快的描述方式为读者讲解Python语言,以各种案例帮助你能够更简单的深入学习! 跟老齐学Python介 ...

  4. 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通

    跟老齐学Python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧下载吧! 目录: 第1季 基础 ...

  5. 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通.pdf

    跟老齐学Python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧下载吧! 目录: 第1季 基础 ...

  6. 零基础python从入门到精通 pdf-跟老齐学Python从入门到精通 电子版(pdf格式)

    跟老齐学python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧在巴士下载站下载吧! 目录: ...

  7. python从入门到精通pdf-跟老齐学Python从入门到精通

    跟老齐学Python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧下载吧! 目录: 第1季 基础 ...

  8. python从入门到精通pdf-跟老齐学Python从入门到精通完整版PDF_Python教程

    资源名称:跟老齐学Python 从入门到精通 完整版PDF 第1季 基础 第0章 预备 2 0.1 关于Python的故事 2 0.1.1 Python的昨天.今天和明天 3 0.1.2 Python ...

  9. python从入门到精通pdf-跟老齐学Python从入门到精通 电子版(pdf格式)

    跟老齐学python从入门到精通是一款由老齐写作的Python电子书籍.书籍讲述了零基础读者的Python入门教程,内容涵盖了Python的基础知识和初步应用,需要的赶紧在巴士下载站下载吧! 目录: ...

最新文章

  1. docker 配置使用宿主机的GPU(ubuntu16.04+cuda10.0+cudnn7)
  2. 曲线图实现,可滚动曲线图,自定义数据
  3. Hadoop入门连接
  4. 平滑线反锯齿工具_PS大神常用选框类工具有哪些?其实很简单,小白认真学也能懂...
  5. 3.2.2 OS之请求分页管理方式(请求页表、缺页中断机构、地址变换机构)
  6. 城市动能转换_地理答啦:高速公路过境,省道国道穿城——济南北跨,建设新旧动能转换先行区应当关注的问题...
  7. java 怎么用毫秒_java1.8中如何使用精确到毫秒的时间
  8. excel制作录入和查询系统_叮咚!您有一份Excel人员信息查询系统,请您查收~
  9. CSRF——攻击与防御
  10. 使用 Spring Boot 开发邮件系统
  11. 高德地图获取经纬度并逆定位获取地理位置名称(原生)
  12. 我和电赛的成长故事与总结#2019年全国大学生电子设计竞赛#
  13. Android 获取世界时区
  14. 高新技术企业认证自助申请教程
  15. a[i][j] 和 a[j][i] 的区别
  16. Android开发:隐藏和显示底部导航栏
  17. dockers 安装 awvs
  18. IDEA运行main方法找不到类java.lang.ClassNotFoundException: javax.servlet.ServletRequest
  19. stm32定时器输出pwmIO口模拟pwm——呼吸灯
  20. thinkphp开发流程之四 ——数据库的配置以及表模型的创建和使用

热门文章

  1. js--webSocket入门
  2. Servlet 获取IllegelStateException
  3. PHP回收机制性能方面考虑的因素
  4. 京东某程序员哀叹:在大厂快待废了,出去面试问自己kafka,竟然全忘了!
  5. 同事说,我写Java代码像写诗
  6. Twitter 广告平台实时计费系统的架构增强之道
  7. 如何实现一个连接池?一文带你深入浅出,彻底搞懂!
  8. 实战篇:一个核心系统 3 万多行代码的重构之旅
  9. MySQL:互联网公司常用分库分表方案汇总!
  10. 网易分布式数据库多活架构的演进与实践