1. python 中, 用户可以通过 py 文件创建自定义的 module, 也可以通过 C 创建 dll, 扩展 python module.
  2. 当用户在一个正在编辑的模块 module 中, 引入(import)另一个已经编辑好的 module 的时候,
  3. 需要名字指明另一个 module 的所在位置,python 才能成功 import 该模块.
  4. 例如,
  5. A.py import abc 文件夹下的 123 module,
  6. A.py,
  7. import abc/123
  8.  
  9. 目录结构如下,
  10. A.py
  11. - abc
  12. - 123.py
  13.  
  14. 然而当引入 built in module 的时候, 只需要以 import + name of built in module 的形式即可,
  15. import sys . 这是为什么呢?为什么 python 会知道所要 import built in module 所在的位置呢?
  16. 毫无疑问, 一定是有这么一个机制 - 能否告诉 python 所引用的 built in module 在什么地方儿呢,
  17. 所以对与 built in module import 来说,在 import 的时候不需要显示的指出 module 所在位置.
  18.  
  19. 下面来具体看一下儿,
  20. python 启动之后, python 已经创建了一个 名字空间 namespace,
  21. 在这个 namespace 中的符号和值来至于系统 module.而这些系统 module 中,
  22. __builtin__ module 就是其中一个被创建的 module .
  23. python 会创建一个 PyDictObject 对象,来维护系统所有 modules.
  24.  
  25. static PyMethodDef builtin_methods[] = {
  26. {"__built_class__", (PyCFunction)builtin___built_class__,METH_VARARGS | METH_KEYWORDS, built_class_doc},
  27. {"__import__", (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
  28. {"dir", builtin_dir, METH_VARARGS | METH_KEYWORDS, built_class_doc}, METH_VARARGS, dir_doc},
  29. {"getattr", builtin_getattr, METH_VARARGS, getattr_doc},
  30. {"iter", builtin_iter, METH_VARARGS, iter_doc},
  31. {"max", (PyCFunction)builtin_max, METH_VARARGS | METH_KEYWORDS, max_doc},
  32. {"min", (PyCFunction)builtin_min, METH_VARARGS | METH_KEYWORDS, min_doc},
  33. {"next", (PyCFunction)builtin_next, METH_VARARGS, next_doc},
  34. {"print", (PyCFunction)builtin_print, METH_VARARGS | METH_KEYWORDS, print_doc},
  35. {"round", (PyCFunction)builtin_round, METH_VARARGS | METH_KEYWORDS, round_doc},
  36. {"vars", builtin_vars, METH_VARARGS, vars_doc},};
  37.  
  38. 设置完 builtin methods 的属性, 接下就需要这个一个函数, 可以告诉 python 所引入 builtin module 的搜索路径了.
  39. 这个函数就是,
  40. void Py_SetPath(const wchar_t *)
  41.  
  42. python docs org 上面的解释如下,
  43. Set the default module search path. If this function is called before
  44. Py_Initialize(),then Py_GetPath() wont attempt to compute a default
  45. search path but uses the one provided instead.This is useful if Python
  46. is embedded by an application that has full knowledge of the location
  47. of all modules.The path components should be separated by the platform
  48. dependent delimiter character,which is ':' on Unix and Mac OS X,
  49. ';' on Windows.
  50. This also causes sys.executable to be set only to the raw program name
  51. (see Py_SetProgramName()) and for sys.prefix and sys.exec_prefix to be
  52. empty. It is up to the caller to modify these if required after calling
  53. Py_Initialize().Use Py_DecodeLocale() to decode a bytes string to get
  54. a wchar_* string.The path argument is copied internally, so the caller
  55. may free it after the call completes.
  56.  
  57. 最后,来一起看一个添加自定义 builtin module 的示例,
  58. 例子,
  59. 其实很简单, 值需要将自定义模块(zzyzz.py), 放在路径 "\Python\Python36-32\lib" 下就可以了,
  60. zzyzz.py
  61. + import datetime
  62. def weeknumber():
  63. print ("Week - %s" % datetime.date.today().isocalendar()[1])
  64. print ("Date - %s" % str(datetime.date.today().isocalendar()))
  65. print ("Date - %s" % str(datetime.date.today()))
  66.  
  67. Output,
  68. >>>import zzyzz
  69. >>>zzyzz.weeknumber()
  70. Week - 43
  71. Date - (2017, 43, 1)
  72. Date - 2017-10-23
  73. >>>sys.modules['zzyzz']
  74. <module 'zzyzz' from '...\\Python\\Python36-32\\lib\\zzyzz.py'>

自定义内建模块 - Python Build Your Own Built-In Module的更多相关文章

  1. Python常用内建模块

    Python常用内建模块 datetime 处理日期和时间的标准库. 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import da ...

  2. python常用内建模块 collections,bs64,struct,hashlib,itertools,contextlib,xml

    #  2  collections 是Python内建的一个集合模块,提供了许多有用的集合类. # 2.1 namedtuple #tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p ...

  3. Python常用的内建模块

    PS:Python之所以自称“batteries included”,就是因为内置了许多非常有用的模块,无需额外安装和配置,即可直接使用.下面就来看看一些常用的内建模块. 参考原文 廖雪峰常用的内建模 ...

  4. Python内建模块--collections

    python内建模块--collections collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点 ...

  5. python的常用内建模块与常用第三方模块

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一.常用内置模块1.datetimePython 提供了一个 time 和 calendar 模块可 ...

  6. Python常用内建模块和第三方库

    目录 内建模块 1  datetime模块(处理日期和时间的标准库) datetime与timestamp转换 str与datetime转换 datetime时间加减,使用timedelta这个类 转 ...

  7. Python的程序结构[5] -> 模块/Module[0] -> 内建模块 builtins

    builtins 内建模块 / builtins Module 在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类. builtins 模块内容 / builtin ...

  8. Python3 内建模块 hashlib、itertools、HTMLParser、urllib

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...

  9. 四十六 常用内建模块 itertools

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数. 首先,我们看看itertools提供的几个“无限”迭代器: >>> import itertools ...

随机推荐

  1. a:visited不起作用的原因解析

    目前大多数的网站都很少会出现"一个超链接被点击后改变其颜色"的需求,但也还是有一部分网站有这样的实际需求,也是为了能够让用户更容易区分哪些标题是被点击访问过了,这类需求大多在新闻类 ...

  2. TensorFlow——Graph的基本操作

    1.创建图 在tensorflow中,一个程序默认是建立一个图的,除了系统自动建立图以外,我们还可以手动建立图,并做一些其他的操作. 下面我们使用tf.Graph函数建立图,使用tf.get_defa ...

  3. windows I/O设备

    当外部设备连接到windows后,设备所连接到的集线器驱动程序将为设备分配硬件ID,然后Windows 使用硬件 Id 查找设备与包含设备驱动程序的驱动程序包之间最近的匹配项. 如果查找到,设备就可以 ...

  4. Java配置文件读取中文乱码问题

    背景 这是我之前在做的用友服务对接开发,昨天领导拿给财务测试时告诉我有乱码,当时我第一想法是用友那边的编码格式有问题,因为还在做其他任务,我说等问一下用友他们用的什么编码格式我们这边改一下,然后今天早 ...

  5. 随机算法 - Miller_Rabin pollard_rho

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...

  6. 本地Git绑定Gitee仓库

    前言 Window的小伙伴如果还没在本地配好Git环境可以参考:https://www.cnblogs.com/poloyy/p/12185132.html 创建Gitee仓库 Gitee绑定本地Gi ...

  7. RabbitMQ入门(二)工作队列

      在文章RabbitMQ入门(一)之Hello World,我们编写程序通过指定的队列来发送和接受消息.在本文中,我们将会创建工作队列(Work Queue),通过多个workers来分配耗时任务. ...

  8. redis 数据类型之列表

    1.lpush lpush(name,values) # 在name对应的list中添加元素,每个新的元素都添加到列表的最左边 # 如: # conn.lpush('oo', 11,22,33) # ...

  9. lisp学习有感--对象化,结构化编程思想

    Lisp程序员总是在写DSL,为自己设计的应用开发专用语言,减少程序中的组件,模块,在构造大型复杂应用时,这变的特别有效. 为什么要模块化,我们通常为复杂应用设计程序时,为了分工协作,会用面向对象化思 ...

  10. (树形DP入门题)Anniversary party(没有上司的舞会) HDU - 1520

    题意: 有个公司要举行一场晚会.为了让到会的每个人不受他的直接上司约束而能玩得开心,公司领导决定:如果邀请了某个人,那么一定不会再邀请他的直接的上司,但该人的上司的上司,上司的上司的上司等都可以邀请. ...