python 模块
认识模块
对于模块,在前面的一些举例中,已经涉及到了,比如曾经有过: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 MODULE DOCS http://docs.python.org/library/random DESCRIPTION ...
这里非常明显,random模块的文件就是: /usr/local/lib/python2.7/random.py(注意:这个地址是我的计算机中的地址)
标准库
看了前面的random这个例子,可能立刻想到一个问题:是不是已经有人把很多常用的功能都写成模块了?然后使用者只需要用类似方法调用即可。的确是,比如上面显示的,就不是某个程序员在使用的时候自己编写的,而是在安装python的时候,就被安装在了计算机里面。观察那个文件存储地址,就知道了。
根据上面得到的地址,列出/usr/local/lib/python2.7/里面的文件,这些文件就是类似random的模块,由于是python安装就有的,算是标配吧,给它们一个名字“标准模块库”,简称“标准库”。
这张图列出了很少一部分存在这个目录中的模块文件。
Python的标准库(standard library)是Python的一个组成部分,也是Python为的利器,可以让编程事半功倍。
如果有时间,请经常访问:https://docs.python.org/2/library/,这里列出了所有标准库的使用方法。
特别注意,对于标准库而言,由于内容太多,恐怕是记不住的。也不用可以的去记忆,只需要知道有这么一个东西。如果在编写程序的时候,一定要想到,对于某个东西,是不是会有标准库支持呢?然后就到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 web = "https://hiekay.github.io" 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
在交互模式下,仿照对标准库模块的操作方式:
>>> 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://hiekay.github.io'
web是模块mmmm中的一个通过赋值语句建立的变量,在这里,它编程了mmmm的属性,能够通过点号运算访问,其实不仅仅是这类型的赋值,其它通过def,class等,都能做为mmmm模块的属性。
>>> mmmm.my_name <function my_name at 0xb74ceb54> >>> mmmm.pythoner <class mmmm.pythoner at 0xb73e6bcc>
当然,跟操作标准库一样,一样能够使用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("hiekay") hiekay
当调用模块中的函数的时候,用模块的名称(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('hiekay') hiekay >>> web 'https://hiekay.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("hiekay") hiekay >>> web #没有import这个,所以报错。 Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'web' is not defined
这就是基本的import模块方法。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python 类的细节
下面我根据MARK Lutz的《Learning Python》中的“大师眼中的OOP”,列一些使用OOP的常见原因。 代码重用。这是很简单(并且是使用OOP的最主要原因)。通过支持继承,类允许通过定制来编程,而不是每次都从头开始一个项目。 封装。在对象接口后包装其实现的细节,从而隔离了代码的修改对用户产生的影响。 结构。类提供了一个新的本地作用域,最小化了变量名冲突。他们还提供了一种编写和查找实现代码,以及去管理对象状态的自然场所。 维护性。类自然而然地促进了代码的分解,这让我们减少了冗余。对亏支持类的结构以及代码重用,这样每次只需要修改代码中一个拷贝就可以了。 一致性。类和继承可以实现通用的接口。这样代码不仅有了统一的外表和观感,还简化了代码的调试、理解以及维护。 多态。多态让代码更灵活和有了广泛的适用性。(这似乎是OOP的属性,不是使用它的理由) 此外,对于python2来说,还有一个叫做“新式类”(new-style)的东西,这个对应于前面讲过的类,那么前面讲过的类就称为“经典”(classic)类。但是,对于Python3来讲,没有这种区别,二者融合。只是在Python2中,...
- 下一篇
Django 搭建单服务实现多域名访问
最近使用Django开发一个小程序和后台管理系统 ,需要将这两个不同的项目部署到同一个服务里面,然后使用不同的域名来访问不同的项目。Django默认的只支持单服务访问,要想实现不同域名,需要安装django的第三方扩展包:django-hosts。 本文通过一个简单的demo来给演示, 看本文的前提是需要对django有一定的认识,对项目环境的搭建以及Nginx有一定的了解。 一.搭建环境与项目:平时习惯使用Anconda来管理Python包,所以本文也使用anconda管理环境,当然大家要是习惯使用virtuallen管理环境也没有问题。本文主要是演示怎么完整搭建一个单服务实现多域名访问的流程,不涉及具体的业务流程。 由于生成django项目需要先下载django包,所以我们先创建一个基本的虚拟环境,然后在虚拟环境中通过具体命令来生成
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Thymeleaf,官方推荐html解决方案