Project Icon

wat

运行时Python对象深度检查工具

WAT是一款针对Python对象的深度检查工具,专为运行时环境设计。它能够展示对象的类型、格式化值、变量、方法、父类型、签名、文档及源代码。WAT在开发者面对复杂或未知对象时尤其有用,可以快速解析对象结构,大幅提升调试效率。这个工具无需安装,可直接在Python控制台中使用,为开发过程提供即时帮助。

🙀 WAT

深入检查Python对象。

WAT是一个强大的检查工具, 允许你在运行时深入探索和检查未知对象。

"Wat"是英语单词"what"的变体,常用于表达困惑或厌恶

如果你发现自己深陷在Python控制台中,感到迷失和困惑, 并且在想"WAT?这是什么东西?", 这时wat检查器就派上用场了。

启动Python解释器(或连接到一个解释器),对任何对象执行wat / object, 以调查其 类型格式化值变量方法父类型签名文档,甚至源代码。 或者,你可以使用wat(object)语法。

导入

即时加载

如果你想快速调试某些内容, 你可以在同一会话中无需安装任何东西就使用这个检查器。 通过将此代码片段粘贴到您的Python解释器中来动态加载:

import base64, zlib

代码 = 你是一位专门从事英语到中文翻译的语言学专家。 这是一个英语到中文的翻译,请为这段源文本提供中文翻译。 除了翻译外,不要提供任何解释或其他文字。 注意:翻译需要符合中文语序、流畅、通顺 需要翻译的源文本被包裹在XML标签中,如下:

当你的世界崩塌时,请记住这些话:

  1. 这只是暂时的。没有什么是永恒的,包括你现在的感受。

  2. 你比你想象的更坚强。你已经度过了许多艰难时刻,这次也不例外。

  3. 每一次失败都是一次学习的机会。试着从中汲取教训,让自己变得更好。

  4. 生活中总有起起落落。低谷之后必有高峰。保持希望,相信美好终会到来。

  5. 你并不孤单。寻求帮助并不可耻。与亲朋好友倾诉,或寻求专业人士的帮助。

  6. 关注你能控制的事情。有些事情超出了你的掌控范围,把精力集中在你能改变的事情上。

  7. 照顾好自己。确保充足的睡眠、健康的饮食和适度的运动。

  8. 保持感恩的心态。即使在最艰难的时刻,也要试着找出值得感恩的事物。

  9. 给自己一些时间。痊愈需要时间,不要对自己太苛刻。

  10. 相信自己。你比你想象的更有潜力和能力。

记住,每一个挑战都是成长的机会。保持坚强,相信自己,你终将度过难关,变得更加坚强。 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 6eOEF840p2+Ve2ff/nsL9Cu85LJfwGvPQFk' 在全局命名空间中执行经过base64解码和zlib解压缩后的代码 现在你可以使用 wat 对象。

[!警告] 在执行 Insta-Load 代码片段之前,建议验证你即将运行的内容。 你可以选择:

  • 事先验证提取的代码内容:
    print(zlib.decompress(base64.b64decode(code)).decode())
    
  • inspection.py 的内容粘贴到你的解释器中。 效果相同。
  • 使用 pip 安装包并查看代码。

使用 pip 安装

或者,安装 wat-inspector 包并从 wat 模块导入检查工具:

pip install wat-inspector
import wat

此包没有依赖项。

用法与修饰符

wat 对象可以通过使用除法运算符(无需括号,便于快速输入)快速检查事物。 简短语法 wat / foo 等同于 wat(foo)

你可以使用以下修饰符调用 wat.modifiers / foo

  • .short.s 隐藏属性(对象内部的变量和方法)
  • .dunder 显示双下划线属性(以 __ 开头)
  • .code 显示函数、方法或类的源代码
  • .long 显示未缩写的值和文档字符串
  • .nodocs 隐藏函数和类的文档
  • .caller 显示检查是如何以及在何处被调用的(适用于文件,不适用于 REPL)
  • .all 包含所有可用信息
  • .ret 返回被检查的对象
  • .str 返回输出字符串而不是打印它
  • .gray 禁用控制台中的彩色输出

你可以链式使用修饰符,例如 wat.long.dunder.nodocs / foo

调用 wat.localswat() 检查本地变量。 调用 wat.globals 检查全局变量。

在解释器中输入 wat 以了解更多关于这个对象本身的信息。

有几种等效的替代语法。选择最适合你的一种:

wat.short / 'foo'  # 快速输入
wat.short('foo')
wat('foo', short=True)  # 自然的 Python 语法
'foo' | wat.short  # Unix 管道风格

用例示例

确定类型

在 Python 这样的动态类型语言中,通常很难确定对象的类型。WAT Inspector 可以通过显示类型名称及其所在模块来帮助你。

>>> wat.short / (1,)
值:(1,)
类型:tuple
长度:1
>>> wat.short / {None}
值:{None}
类型:set
长度:1
>>> wat.short / user
字符串表示:admin
repr 表示:<User: admin>
类型:django.contrib.auth.models.User
父类:django.contrib.auth.models.AbstractUser, django.contrib.auth.base_user.AbstractBaseUser, django.contrib.auth.models.PermissionsMixin, django.db.models.base.Model, django.db.models.utils.AltersData

现在你已经确定了实际类型,可以在代码中添加类型注解以减少进一步的混淆。

查找方法

通过列出方法及其签名和文档字符串,你可以轻松理解如何使用未知对象。

wat / ['foo']


如果你想查看完整的文档字符串,请使用 wat.long

发现函数签名

查看函数的文档字符串和签名,了解如何使用它。

wat / str.split

查找属性

列出属性及其类型,了解被检查对象内部的真实情况。

wat / re.match('(\d)_(.*)', '1_title')

探索模块

另一个用例是探索模块。你可以列出选定模块的函数、类和子模块。

import pathlib
wat / pathlib

然后,你可以进一步导航,例如 wat / pathlib.fnmatch

探索双下划线属性

默认情况下,WAT Inspector 隐藏以 __ 开头的属性。使用 wat.dunder 来查看它们。

wat.dunder / {}

查看代码

查看函数的源代码,了解它的实际工作原理。

wat.code / wat.__call__

美化不可读的集合

嵌套的字典和列表会得到漂亮的格式化、缩进输出:

使用断点调试

你可以使用 Python 的 breakpoint() 关键字在程序中启动交互式调试器。连接到解释器并现场检查事物。

(Pdb) import wat  # 或粘贴 Insta-Load 代码片段
(Pdb) wat / foo  # 检查本地变量
...
(Pdb) c  # 继续执行

查找本地变量

使用 wat.localswat.globals 分别查找本地和全局变量。

学习 Python

通过这些代码片段,你可以更好地理解 Python 内部机制。

reversed([]) == reversed([])
# False
wat.s / reversed([])
# 值:<list_reverseiterator object at 0x76749d1cb400>
# 类型:list_reverseiterator
wat / type('ObjectCreator', (), {})
# 值:<class '__main__.ObjectCreator'>
# 类型:type
# 签名:class ObjectCreator()

wat / type
# 值:<class 'type'>
# 类型:type
# 签名:class type(…)
# """
# type(object) -> 对象的类型
# type(name, bases, dict, **kwds) -> 一个新的类型
# """
# 
# 公共属性:
#   def mro(self, /) # 返回一个类型的方法解析顺序。
from typing import List
wat.s / List[str]
# 值:typing.List[str]
# 类型:typing._GenericAlias
# 父类:typing._BaseGenericAlias, typing._Final
# 签名:def List(*args, **kwargs)

wat(str | None)
# 值:str | None
# 类型:types.UnionType

探索 Python 内置函数:

wat / __builtins__
wat / ...

检查 WAT 自身

wat.dunder / wat
wat.code / wat.__truediv__

环境变量

  • WAT_COLOR="false" 禁用控制台中的彩色输出。
  • WAT_COLOR="true" 强制在非 tty 环境中也使用彩色输出。

参考

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号