自定义内建模块 - 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 ...
随机推荐
- a:visited不起作用的原因解析
目前大多数的网站都很少会出现"一个超链接被点击后改变其颜色"的需求,但也还是有一部分网站有这样的实际需求,也是为了能够让用户更容易区分哪些标题是被点击访问过了,这类需求大多在新闻类 ...
- TensorFlow——Graph的基本操作
1.创建图 在tensorflow中,一个程序默认是建立一个图的,除了系统自动建立图以外,我们还可以手动建立图,并做一些其他的操作. 下面我们使用tf.Graph函数建立图,使用tf.get_defa ...
- windows I/O设备
当外部设备连接到windows后,设备所连接到的集线器驱动程序将为设备分配硬件ID,然后Windows 使用硬件 Id 查找设备与包含设备驱动程序的驱动程序包之间最近的匹配项. 如果查找到,设备就可以 ...
- Java配置文件读取中文乱码问题
背景 这是我之前在做的用友服务对接开发,昨天领导拿给财务测试时告诉我有乱码,当时我第一想法是用友那边的编码格式有问题,因为还在做其他任务,我说等问一下用友他们用的什么编码格式我们这边改一下,然后今天早 ...
- 随机算法 - Miller_Rabin pollard_rho
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...
- 本地Git绑定Gitee仓库
前言 Window的小伙伴如果还没在本地配好Git环境可以参考:https://www.cnblogs.com/poloyy/p/12185132.html 创建Gitee仓库 Gitee绑定本地Gi ...
- RabbitMQ入门(二)工作队列
在文章RabbitMQ入门(一)之Hello World,我们编写程序通过指定的队列来发送和接受消息.在本文中,我们将会创建工作队列(Work Queue),通过多个workers来分配耗时任务. ...
- redis 数据类型之列表
1.lpush lpush(name,values) # 在name对应的list中添加元素,每个新的元素都添加到列表的最左边 # 如: # conn.lpush('oo', 11,22,33) # ...
- lisp学习有感--对象化,结构化编程思想
Lisp程序员总是在写DSL,为自己设计的应用开发专用语言,减少程序中的组件,模块,在构造大型复杂应用时,这变的特别有效. 为什么要模块化,我们通常为复杂应用设计程序时,为了分工协作,会用面向对象化思 ...
- (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520
题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ...