一个提供操作Python对象底层工具的模块。A utility tool with some submodules for operating internal python objects.
Project description
pyobject - 一个提供操作Python对象底层工具的Python包, 包含一些子模块。A utility tool with some submodules for operating internal python objects.
所包含模块 Included modules:
__init__ - 显示和输出Python对象的各个属性值
pyobject.browser - 以图形界面浏览Python对象
pyobject.code_ - Python 字节码(bytecode)的操作工具
pyobject.search - 以一个对象为起点,搜索python对象
pyobject.newtypes - 定义一些新的类型 (实验性)
pyobj_extension(新增) - C扩展模块, 提供操作Python对象底层的函数
包含的函数 Functions:
describe(obj, level=0, maxlevel=1, tab=4, verbose=False, file=sys.stdout):
"描述"一个对象,即打印出对象的各个属性。 参数说明: maxlevel:打印对象属性的层数。 tab:缩进的空格数,默认为4。 verbose:一个布尔值,是否打印出对象的特殊方法(如__init__)。 file:一个类似文件的对象,用于打印输出。
browse(object, verbose=False, name=’obj’):
以图形方式浏览一个Python对象。 verbose:与describe相同,是否打印出对象的特殊方法(如__init__)
函数browse()的图形界面如下所示:
objectname(obj):
objectname(obj) - 返回一个对象的名称,形如xxmodule.xxclass。 如:objectname(int) -> 'builtins.int'
bases(obj, level=0, tab=4):
bases(obj) - 打印出该对象的基类 tab:缩进的空格数,默认为4。
新增函数 New Functions:
make_list(start_obj, recursions=2, all=False):
创建一个对象的列表, 列表中无重复的对象。 start:开始搜索的对象 recursion:递归次数 all:是否将对象的特殊属性(如__init__)加入列表
make_iter(start_obj, recursions=2, all=False):
功能、参数与make_list相同, 但创建迭代器, 且迭代器中可能有重复的对象。
search(obj, start, recursions=3):
从一个起点开始搜索对象 obj:待搜索的对象 start:起点对象 recursion:递归次数
新增类: pyobject.Code
类Code用于包装Python字节码对象(bytecode),提供一个便利操作Python字节码的接口。
Python底层的bytecode对象,如func.__code__,是不可变的,鉴于此,Code类提供了一个可变的字节码对象,以及一系列操作字节码的函数,使得操作底层字节码对象变得更容易。
示例用法: (从模块的doctest中摘取):
>>> def f():print("Hello") >>> c=Code.fromfunc(f) # 或 c=Code(f.__code__) >>> c.co_consts (None, 'Hello') >>> c.co_consts=(None, 'Hello World!') >>> c.exec() Hello World! >>> >>> import os,pickle >>> temp=os.getenv('temp') >>> with open(os.path.join(temp,"temp.pkl"),'wb') as f: ... pickle.dump(c,f) ... >>> f=open(os.path.join(temp,"temp.pkl"),'rb') >>> pickle.load(f).to_func()() Hello World! >>> >>> c.to_pycfile(os.path.join(temp,"temppyc.pyc")) >>> sys.path.append(temp) >>> import temppyc Hello World! >>> Code.from_pycfile(os.path.join(temp,"temppyc.pyc")).exec() Hello World!
新增模块: pyobj_extension
本模块使用了C语言编写。可直接使用import pyobj_extension, 导入该独立模块。其中包含的函数如下:
convptr(pointer):
将整数指针转换为Python对象,与id()相反。 Convert a integer pointer to a Python object,as a reverse of id().
py_decref(object, n):
将对象的引用计数减小n。Decrease the reference count of an object for n.
py_incref(object, n):
将对象的引用计数增加n。Increase the reference count of an object for n.
警告: 不恰当地使用这3个函数可能导致Python崩溃。
Warning:Improper use of the three functions above may lead to crashes.
list_in(obj, lst):
判断obj是否在列表或元组lst中。与Python内置的obj in lst调用多次==运算符(__eq__)相比, 本函数直接比较对象的指针,提高了效率。
版本:1.2.4
更新日志:
2024-8-12(v1.2.4):针对pyobject.code_增加了对3.10及以上版本的支持;进一步优化了search模块的搜索性能,以及一些其他修复和改进。
2024-6-20(v1.2.3):更新了包内test目录下的.pyc文件加壳工具,并更新了pyobject.browser中的对象浏览器,添加了显示列表和字典项,后退、前进、刷新页面,以及新增、编辑和删除项等新特性。
2022-7-25(v1.2.2):增加了操作Python底层对象引用, 以及对象指针的C语言模块pyobj_extension。
2022-2-2(v1.2.0):修复了一些bug,优化了search模块的性能; code_中增加了Code类, browser中增加编辑属性功能, 增加了Code类的doctest。
源码:见 https://github.com/qfcy/Python/tree/main/pyobject
作者 Author: 七分诚意 qq:3076711200
作者CSDN主页: https://blog.csdn.net/qfcy_/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pyobject-1.2.4-cp313-cp313-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac6555ae0f05983cb2e4d165f5fc6dcbf911e620ba756ae47349a20b958ef50b |
|
MD5 | 72419965db06a6963b1e235bde223a57 |
|
BLAKE2b-256 | 6f06fefcd5e3e42279142413e3e15c9ac71f754f31e6df7c4db0a80a401c1974 |
Hashes for pyobject-1.2.4-cp312-cp312-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e0e08e2e9b14102f7602291307ab49522b550d92d96a268d3901a90bff6d741 |
|
MD5 | 87a532bd38f30f70ee84381b95233b21 |
|
BLAKE2b-256 | 0f2d42689236b73c4952dbc733cbc08d9c042b0b6cf3d8aa7e58d127f4163201 |
Hashes for pyobject-1.2.4-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76aff678e09791cdada006887cbd79d308a45ff7ad91708ad3a9146eac8eda30 |
|
MD5 | 18672afbddeb8f48483141126c0e8ade |
|
BLAKE2b-256 | 2d57be740b19765f9acb405b92fcc83c6106a3fb55de7751c0f7f4a2da5ce7ec |
Hashes for pyobject-1.2.4-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b304c8f45b655f7a1ec3f15f4c1c336bcb695ce30ec54dca2c55957ef447f49c |
|
MD5 | 0c4b765011790d84b491e68a7441d7cc |
|
BLAKE2b-256 | c114f4f1d8bfe1bcdf8b09e736f288a7dd666639f98843389be90e6f73d0c748 |
Hashes for pyobject-1.2.4-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | af9e2e14a6ae003c86969d8279b552a908decddbafbcb193778ee28311b095b8 |
|
MD5 | b52b7f99ea93860981380a5c615f9d40 |
|
BLAKE2b-256 | 882fe30595b88caa113981979ec09b143e04d156a84af94938885f8a131db068 |
Hashes for pyobject-1.2.4-cp39-cp39-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 03a3ddfe8686748bad45fe166235fe12d725f44a64498c25c26997bd34c2b0ba |
|
MD5 | acdc7306ccd394f40110653717130e61 |
|
BLAKE2b-256 | 4abb4af0d572470958307f27e23d916d543c5cec2d8a370fdc5efee046845407 |
Hashes for pyobject-1.2.4-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22211ff9b8b724350460998b3b0c1056fe705538cc5cd5ca7d98e694de908448 |
|
MD5 | e02688dfbf6f4115f792c267bb054f67 |
|
BLAKE2b-256 | c55e46ed6875db4e0d6d1f02fd1fd9e05fc5357b5dc1a6ecd732881ef7beba0e |
Hashes for pyobject-1.2.4-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 28301a7814ba288ecab1f153916c41fbaf0eaaf008bfc532530be5e98484e006 |
|
MD5 | 3890848b0a6fa0923781c0ae0c4e48d3 |
|
BLAKE2b-256 | dd4979dbf0c2a2d85f1c805123b1bb4e8cd05d48db1e81c6befd2eb817550e58 |
Hashes for pyobject-1.2.4-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c5883442aa5afb2063a3dbb74296629d3ded2def9316a5e16aca449af5adbb7 |
|
MD5 | 7532f0886435e25e8547dd542cbd8b95 |
|
BLAKE2b-256 | 8bdcba660e1395b19090a4ddde87382e562ace8920774e2dc1373d30d978f85f |
Hashes for pyobject-1.2.4-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 014c37fd653f69d0621e789b39e3cf4846c3ef9d2e68d8a6eb444dd834456b07 |
|
MD5 | b83e07ef1a717898388164dc22dcb250 |
|
BLAKE2b-256 | 14fd01eb1830c41c737da42fefe54b83db87fb4cf0c887da3612fee27d2fc1eb |
Hashes for pyobject-1.2.4-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a49d2c4af571032b1f746a32bc6c28b9cbe3ff3e7319fa11b8cb32c048787d73 |
|
MD5 | 0b558f2e20cf3568a7d7e60d424fa288 |
|
BLAKE2b-256 | 7c9248785567f6a6fe39ae53a3637c84006a3acc9cc0858daeb21c806589d671 |