高级 Python 开发课程
第 章
>
第 级
数学模块
代码内省
目标
通过使用代码自省来检查阁楼中藏着的一些旧物品,以找出它们是什么以及如何使用。
阁楼里有一个很少使用的办公室,里面有几个旧箱子,藏着一些早已被遗忘的贵重物品。除非另有说明或者备忘录提供了信息,否则有时可能很难识别这些物品,或者识别出正在收集现场的常量。不仅如此,有时候也很难确定一个特定对象可以完成哪些操作,或者它的属性是什么。为了解决这个问题,我们可以使用代码自省。
代码自省允许我们检查并识别某些代码片段,并指明它们的一些属性。为此,我们将使用内置的四(4)个自省函数,这些函数已经包含在 Python 的基础代码中:type()、id()、repr()、dir() 和 help()。它们的功能如下:
type():该函数告诉你传入参数的对象是什么类型。例如,如果你将一个变量作为参数传入,该函数会将此对象识别为一个变量。id():Python 中创建的每个对象都有一个唯一的 id,可以用来在代码中唯一标识该对象。将一个对象作为该函数的参数,它将返回该对象的唯一 id。repr():将非字符串值转换为字符串,对于将数据转换为可读形式非常有用。dir():显示该对象拥有的所有属性,对于了解特定对象类型可以完成的操作非常有用。help():显示关于给定对象、函数、类等的所有信息,这些信息在 Python 的注册表中都有记录。
此外,我们还有一个新的异步函数,即 display() 函数。这个函数类似于 read() 函数,但允许你显示动态数据,就像那些生成动态数据的代码自省函数一样。它的语法如下:await player.dysplay( -data-)。所有这些函数都将对分析数据非常有用,这在我们使用方法并开始导入新函数以及分析我们希望识别属性的任何代码时都非常有用。
我们将使用这些函数来识别和编录存放在阁楼中的物品。首先,走向覆盖彩色地毯上标有暗色 X 的位置,从覆盖红色地毯的 X 开始。该区域内有三个(3)常量:red_container、green_container 和 blue_container,这些常量代表着每个箱子中对应彩色地毯的容器。
对于每个 X 标记,面向箱子并使用 open() 函数打开箱子,使用与对应彩色地毯常量相匹配的 collect() 函数从箱子中取出物品。使用 type() 自省函数来识别箱子中的常量是什么类型,其输出是原始数据,为此我们使用 repr() 函数将其转换为字符串。使用 speak() 来显示将函数与常量组合后的结果字符串,例如:player.speak(repr(type(red_container)))。随后再调用 speak() 函数并传入常量,以便直接识别内容,例如:player.speak(red_container)。
当收集、检查和识别完所有三个(3)常量后,走向桌子前方的浅色 X 标记。创建三个变量,分别命名为:item_id_red、item_id_green、item_id_blue,这些变量将用于存储你收集到的每个常量的 id。使用 id() 自省函数,通过将常量作为参数传入获取该常量的唯一标识号。按照如下格式将变量名与常量名进行匹配,例如:item_id_red = id(red_container),对所有三个(3)变量和常量都这么做。
当所有三个(3)变量都被填充后,将它们全部存储在一个名为 item_list 的列表中,并在浅色 X 标记处使用 display() 函数确保它写入桌上的备忘录,如下所示:await player.display(item_list)。
既然列表已经被记录下来,走向覆盖紫色地毯的暗色 X 标记并面向桌子。在这里,我们将使用 dir() 函数来识别列表的属性,但是输出的数据是原始数据,显示起来可能比较棘手。为此,我们使用 repr() 函数将数据转换为可读的字符串。创建一个变量,命名为 item_attributes 并存储转换后的字符串,格式如下:item_attributes = repr(dir(item_list))。最后,使用 display() 函数确保该数据被记录在桌上的备忘录中。
走向覆盖白色地毯的暗色 X 标记,使用与 dir() 相同的方法,但这一次使用 help() 来查看对象的所有文档使用说明。创建一个变量,命名为 item_help 并存储转换后的字符串,格式如下:item_help = repr(help(item_list))。最后,使用 read() 函数确保该信息也被记录在桌上的备忘录中,以完成关卡。