自定义内建模块 - Python Build Your Own Built-In Module
在 python 中, 用户可以通过 py 文件创建自定义的 module, 也可以通过 C 创建 dll, 扩展 python module.
当用户在一个正在编辑的模块 module 中, 引入(import)另一个已经编辑好的 module 的时候,
需要名字指明另一个 module 的所在位置,python 才能成功 import 该模块.
例如,
在 A.py 中 import abc 文件夹下的 123 module,
A.py,
import abc/123 目录结构如下,
A.py
- abc
- 123.py 然而当引入 built in module 的时候, 只需要以 import + name of built in module 的形式即可,
如 import sys . 这是为什么呢?为什么 python 会知道所要 import 的 built in module 所在的位置呢?
毫无疑问, 一定是有这么一个机制 - 能否告诉 python 所引用的 built in module 在什么地方儿呢,
所以对与 built in module 的 import 来说,在 import 的时候不需要显示的指出 module 所在位置. 下面来具体看一下儿,
在 python 启动之后, python 已经创建了一个 名字空间 namespace,
在这个 namespace 中的符号和值来至于系统 module.而这些系统 module 中,
__builtin__ module 就是其中一个被创建的 module .
而 python 会创建一个 PyDictObject 对象,来维护系统所有 modules. static PyMethodDef builtin_methods[] = {
{"__built_class__", (PyCFunction)builtin___built_class__,METH_VARARGS | METH_KEYWORDS, built_class_doc},
{"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
{"dir", builtin_dir, METH_VARARGS | METH_KEYWORDS, built_class_doc}, METH_VARARGS, dir_doc},
{"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
{"iter", builtin_iter, METH_VARARGS, iter_doc},
{"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
{"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
{"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
{"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
{"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
{"vars", builtin_vars, METH_VARARGS, vars_doc},}; 设置完 builtin methods 的属性, 接下就需要这个一个函数, 可以告诉 python 所引入 builtin module 的搜索路径了.
这个函数就是,
void Py_SetPath(const wchar_t *) python docs org 上面的解释如下,
Set the default module search path. If this function is called before
Py_Initialize(),then Py_GetPath() won’t attempt to compute a default
search path but uses the one provided instead.This is useful if Python
is embedded by an application that has full knowledge of the location
of all modules.The path components should be separated by the platform
dependent delimiter character,which is ':' on Unix and Mac OS X,
';' on Windows.
This also causes sys.executable to be set only to the raw program name
(see Py_SetProgramName()) and for sys.prefix and sys.exec_prefix to be
empty. It is up to the caller to modify these if required after calling
Py_Initialize().Use Py_DecodeLocale() to decode a bytes string to get
a wchar_* string.The path argument is copied internally, so the caller
may free it after the call completes. 最后,来一起看一个添加自定义 builtin module 的示例,
例子,
其实很简单, 值需要将自定义模块(zzyzz.py), 放在路径 "\Python\Python36-32\lib" 下就可以了,
zzyzz.py
+ import datetime
def weeknumber():
print ("Week - %s" % datetime.date.today().isocalendar()[1])
print ("Date - %s" % str(datetime.date.today().isocalendar()))
print ("Date - %s" % str(datetime.date.today())) Output,
>>>import zzyzz
>>>zzyzz.weeknumber()
Week - 43
Date - (2017, 43, 1)
Date - 2017-10-23
>>>sys.modules['zzyzz']
<module 'zzyzz' from '...\\Python\\Python36-32\\lib\\zzyzz.py'>
自定义内建模块 - Python Build Your Own Built-In Module的更多相关文章
- Python常用内建模块
Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...
- python常用内建模块 collections,bs64,struct,hashlib,itertools,contextlib,xml
# 2 collections 是Python内建的一个集合模块,提供了许多有用的集合类. # 2.1 namedtuple #tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p ...
- Python常用的内建模块
PS:Python之所以自称“batteries included”,就是因为内置了许多非常有用的模块,无需额外安装和配置,即可直接使用.下面就来看看一些常用的内建模块. 参考原文 廖雪峰常用的内建模 ...
- Python内建模块--collections
python内建模块--collections collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点 ...
- python的常用内建模块与常用第三方模块
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一.常用内置模块1.datetimePython 提供了一个 time 和 calendar 模块可 ...
- Python常用内建模块和第三方库
目录 内建模块 1 datetime模块(处理日期和时间的标准库) datetime与timestamp转换 str与datetime转换 datetime时间加减,使用timedelta这个类 转 ...
- Python的程序结构[5] -> 模块/Module[0] -> 内建模块 builtins
builtins 内建模块 / builtins Module 在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类. builtins 模块内容 / builtin ...
- Python3 内建模块 hashlib、itertools、HTMLParser、urllib
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...
- 四十六 常用内建模块 itertools
Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...
随机推荐
- 下载并部署 ArcGIS API for JavaScript 4.10
学习ArcGIS API for JavaScript 4.10 的第一步就是下载并部署该文件. 有的读者由于之间没接触过,不知道怎么下载和部署文件.这些读者要求作者详细的写一篇关于下载和部署的文章( ...
- 【转】JavaScript 3D图表
文章系本人原创,转载请保持完整性并注明出自<四火的唠叨> 在说3D图表以前,首先要明确两个概念,一个是数据的维度,一个是呈现数据载体的维度.对于数据的维度,一维的数据呈现,但是呈现的载体是 ...
- VS2019菜单栏没有团队选项解决方法
新安装了Visual Studio 2019结果菜单栏没有“团队”菜单,导致没办法连接TFS服务器,查了下网上也并没有对应解决方法(甚至遇见这个问题的都没有/笑哭,所以这个方法写出来也大概没什么用) ...
- Go的内存对齐和指针运算详解和实践
uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough t ...
- Webpack实战(三):作为前端你不得不懂的Webpack资源入口和出口的配置
关于Webpack前两篇跟大家分享的主要是Webpack的一些基本的配置,今天开始我们详细了解一下有关Webpack的各种配置,今天主要跟大家分享的是Webpack的资源入口和资源出口的配置. 如果想 ...
- Docker学习(一)环境准备安装centos7
前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使用沙箱机 ...
- 官方文档中文版!Spring Cloud Stream 快速入门
本文内容翻译自官方文档,spring-cloud-stream docs,对 Spring Cloud Stream的应用入门介绍. 一.Spring Cloud Stream 简介 官方定义 Spr ...
- shell 条件测试
1.文件相关 -e 判断文件或者文件夹是否存在 -d 判断目录是否存在 -f 判断文件是否存在 -r 判断是否有读权限 -w 判断是否有写权限 -x 判断是否有执行权限 1.1命令行使用 [root@ ...
- GP工作室—Alpha版本发布1
目录 GP工作室-Alpha版本发布1 一.简介 1.1作业要求 1.2团队成员 二.软件下载安装说明 五.项目总结 @(Gold Point团队の项目计划) GP工作室-Alpha版本发布1 一.简 ...
- c#数字图像处理(二)彩色图像灰度化,灰度图像二值化
为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法,很容易移植到彩色图像上.24位彩色图像每个像素用3个字节表示,每个字节对应着R.G.B分量的亮度(红.绿 ...