博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中的模块
阅读量:5213 次
发布时间:2019-06-14

本文共 1391 字,大约阅读时间需要 4 分钟。

用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在这方面的确不怎么受待见。

 

 

 

 

 

转载于:https://www.cnblogs.com/skytraveler/p/3840768.html

你可能感兴趣的文章
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>
一些注意点
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
C#修饰符
查看>>
20.核心初始化之异常向量表
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
js 封装获取元素的第一个元素
查看>>
iOS 获取Home键指纹验证
查看>>