python中的模块
用python其实好久了,但是一直没有特别系统的学习过,当年迅速上手,也写了好多代码了,零零散散也学了很多知识点。到了把它们串起来的时候了。尝试记录一下系统整理的知识点,先从“模块”说起。
为什么需要模块?
为了程序的复用;为了让大型程序更加结构化(模块提供了类似命名空间的方式,使得层级结构分明);为了系统共享组件(都引用一个模块,就能共用它)
python的标准库其实全是用模块方式组织的。
创建模块,最简单模块的创建就是创建一个py文件。
模块使用会用import关键字导入,导入的工作原理如下:
1.找到模块文件。(搜索路径为 sys.path里加载的路径)
2.编译。
3.执行模块,创建对象。
如果导入相同的模块,则会跳过这3部,从内存中直接加载模块。 载入的模块全部存储在sys.modules中。
import 语句其实是 调用了内建函数:__import__
调用的时候,我们其实调用的是变量,而不是函数,类等。
from语句需要注意的:
from 语句 把变量名复制到另一个作用域,这样就能直接使用,而不需要加模块前缀了。
比如 from sys import path 其实等效于 import sys path = sys.path 有的时候这样挺省事儿,但是,有可能会有覆盖的影响。
如果两个module里边有同名的,后来的就会把先到的覆盖掉。
from module1 import fun1
from module2 import fun1
调用fun1的时候调用的就是module2的了。
尽量别用 from module import * 因为这样会让源码变得难以阅读(你不知道怎么会凭空冒出来一个函数什么的)
import as 这个很有用,如果import的东西过长 如 xxx.yyy.zzz , as可以让你省事儿不少 import xxx.yyy.zzz as a
使用的时候就可以 a.fun()而不用xxx.yyy.zzz.fun()了。
import的作用域:
被import的文件不会看到做import动作文件中的变量。
就是如果文件 mod1.py 中有一个变量x
如果mod2.py import了 mod1,且恰好它也有一个变量x 则,x 是mod2的,mod1.x是mod1里的x。 在有多层的时候,这些也成立。
模块可以reload,但仅限于纯python写的。如果是C写的,则不行。虽然可以动态加载C的程序,但被装入后,python解释器就无法搞定了。
reload设计的原有目的是:在大的工程下可以动态替换一小部分,而不用让整个程序停下来。比如,某种核心交易服务的后台是python写的,可以不停机升级。
但relaod自身有缺陷,大家总是诟病它,例如:如果是面向对象的话,如果基类被reload,子类继承的基类方法其实没有跟着变。也有人拓展了它:
https://code.google.com/p/reimport/
我自己没有真正使用过reload,希望以后有机会试试。不过现在纯python写的大型应用,现在国内就知道有豆瓣。人们都奔着erlang和go去了,python在这方面的确不怎么受待见。
python中的模块的更多相关文章
- Python中optionParser模块的使用方法[转]
本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内 ...
- python中threading模块详解(一)
python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...
- 【转】关于python中re模块split方法的使用
注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...
- Python中的模块介绍和使用
在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一 ...
- python中导入模块的本质, 无法导入手写模块的解决办法
最近身边一些朋友发生在项目当中编写自己模块,导入的时候无法导入的问题. 下面我来分享一下关于python中导入模块的一些基本知识. 1 导入模块时寻找路径 在每一个运行的python程序当中,都维护了 ...
- Python中time模块详解
Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...
- Python中collections模块
目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...
- Python中pathlib模块
Python中pathlib模块 Path.cwd():返回当前目录的路径 Path.home():返回当前用户的家目录 Path.stat():返回此路径信息 Path.touch():创建文件 P ...
- Python 中包/模块的 `import` 操作
版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...
- 正则表达式与Python中re模块的使用
正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...
随机推荐
- 【JavaScript】JQuery中$.fn、$.extend、$.fn.extend
Web开发肯定要使用第三方插件,对于一个炫丽的效果都忍不住想看看对方是如何实现的,刚下载了一个仿京东商品鼠标经过时局部放大的插件.看了两眼JQuery源码,看看就感觉一头雾水.JQuery本来自己学的 ...
- Sql Server 高频,高并发访问中的键查找死锁解析
死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.但有时因为一些特殊应用场景如高频查询,高并发查询下由于数据库 ...
- spring+mybatis多数据源切换
在实际的公司项目中,很可能会遇到一个问题就是,一个java项目,但是项目中涉及两个数据库,这两个数据库还在不同IP的机子上. 遇到这种情况的时候,我们有两个选择 1.不走spring的aop方式,直接 ...
- Fragment学习笔记
Fragment为大量型号,尺寸,分辨率的设备提供了一种统一的UI优化方案.将Activity分解为多个Fragment,将极大地提高UI的灵活性,也更容易为一些新的设备配置带来更好的用户体验. on ...
- CCDH证书
4月份有些冲动,想报名考个CCDH证书,一直没有找到合适的付款方式,因为自己没有外币信用卡, 后来受到朋友的帮助,22号付了款,26号就去考了试,不是很满意,如果少冲动一下,多看两天书, 效果会更好.
- [转]通过AngularJS directive对bootstrap日期控件的的简单包装
本文转自:http://www.cnblogs.com/Benoly/p/4109460.html 最近项目上了AngularJS,而原来使用的日期控件的使用方式也需要改变,于是开始了倒腾,看了官方的 ...
- jmap,jhat分析内存
分析JAVA Application的内存使用时,jmap是一个很实用的轻量级工具.使用jmap可以查看heap空间的概要情况,粗略的掌握heap的使用情况.也可以生成heapdump文件,再使用jh ...
- 使用nmon监控服务器性能
1.下载nmon:http://nmon.sourceforge.net/pmwiki.php?n=Site.Download 2.选择适合Linux系统版本的相应nmon版本,Linux查看系统版本 ...
- UIView.frame的骗局
如果你刚刚开始接触IOS编程, 刚刚接触UIKit, 肯定会被 frame, bounds, center, layer.anchorPoint, layer.position 这些乱七八糟得属性折腾 ...
- Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组
题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数.i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少对这样的(i,j). 解法:分别从左到右,由右到 ...