Python REPL中直接输入变量与print打印的区别及相关技术问题解答
Python交互式运行相关问题解答
问题1:第[2]行的操作是否属于调用对象?调用(calling)是否仅适用于函数?
- 不属于调用对象。调用操作需要加后缀括号
()传入参数,第2行只是输入变量名读取对象值,没有调用行为。 - 调用仅适用于可调用对象,包括函数、实现了
__call__方法的类实例等,普通元组、数值、未实现__call__的类实例都不能被调用。
问题2:第[8]行返回的内容是什么?它不是ndarray的内容,看起来类似创建该对象的函数调用,只是缺少numpy.前缀。
第8行的输出是ndarray对象的官方调试字符串表示形式,由对象的__repr__()方法生成,设计初衷就是输出便于开发者快速识别对象类型的内容,格式故意模拟创建该对象的代码写法,方便调试时快速分辨对象类别和取值。
问题3:第[6]行中的[1,2,3]是列表,还是仅为numpy.array()参数的专属语法?
就是Python原生的列表类型,不是numpy专属语法。numpy.array()可以接收任何序列型参数(列表、元组、其他ndarray等)来创建数组,这里传入的就是普通的列表字面量。
问题4:是否存在无需使用print(),就能获取不带array()前缀的ndarray内容的方法?
有,可以直接用str(an_ndarray)或者调用an_ndarray.__str__()获取,返回的就是和print输出一致的不带array()前缀的内容。
问题5:请用精准技术术语解释第[3]行与第[8]行输出差异较大的原因。
Python交互式解释器(REPL)下直接输入变量名回车时,会自动调用该对象的__repr__()方法输出调试用字符串:
- 内置元组类型的
__repr__()方法返回的是元组字面量格式(1, 2, 3) numpy.ndarry类型自定义的__repr__()方法会返回带array()标识的类型说明格式,因此两者输出差异明显。
问题6:通常控制台输入的内容(如第[2]行)的正式名称是什么?是命令(Commands)、调用(calls)还是输入(inputs)?
在Python REPL场景下,正式名称是输入表达式,也可以统称交互式输入(inputs);只有带括号执行可调用对象的内容才叫调用(calls);命令(Commands)一般指操作系统终端的shell指令,不是Python REPL输入的标准称呼。
问题7:第[3][5][8][10]行的内容正式名称是什么?是否叫输出(Output),有哪些同义词?
正式名称就是输出(Output),细分的话:
- 直接输入变量名得到的输出叫
__repr__输出/表示字符串 print()得到的输出叫__str__输出/打印字符串- 同义词还有:求值结果、标准输出(stdout)内容、返回结果。
问题8:首句中标记的[*]正式名称是什么?它不属于严格意义上的代码。
你所指的是代码片段前标注的[n]类标记,属于为了方便定位代码行额外添加的辅助性标识,不属于Python语法范畴,没有统一的官方正式名称,通常称为行号标注、参考行号标记即可。
内容的提问来源于stack exchange,提问作者Zweifler
相关产品推荐
相关产品推荐

