摘要: 扩展位置参数和扩展键参数 在Python虚拟机函数机制之参数类别(三)的例3和例4中,我们看到了使用扩展位置参数和扩展键参数时指示参数个数的变量的值。在那里,我们发现在函数内部没有使用局部变量时,co_nlocals和co_argcount的值已经不再相同了。从它们的差异我们猜测,当使用扩展位置参数 阅读全文
posted @ 2018-08-25 21:16 北洛 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 位置参数的默认值 在Python中,允许函数的参数有默认值。假如函数f的参数value的默认值是1,在我们调用函数时,如果传递了value参数,那么f调用时value的值即为我们传递的值,如果调用时没有传递value的值,那么f将使用value的默认值,即为1。那么,带有默认值的位置参数,其实现机制 阅读全文
posted @ 2018-08-25 20:00 北洛 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 位置参数的传递 前面我们已经分析了无参函数的调用过程,我们来看看Python是如何来实现带参函数的调用的。其实,基本的调用流程与无参函数一样,而不同的是,在调用带参函数时,Python虚拟机必须传递参数。我们先来看一段代码: 我们用dis模块来编译一下对应的字节码: 再用dis模块编译下函数f对应的 阅读全文
posted @ 2018-08-25 11:06 北洛 阅读(981) 评论(0) 推荐(0) 编辑
摘要: 参数类别 我们在Python虚拟机函数机制之无参调用(一)和Python虚拟机函数机制之名字空间(二)这两个章节中,分别PyFunctionObject对象和函数执行时的名字空间。本章,我们来剖析一下函数参数的实现。 在Python中,函数的参数根据形势的不同可以分为四种类别: 位置参数:如f(a, 阅读全文
posted @ 2018-08-25 06:58 北洛 阅读(586) 评论(0) 推荐(0) 编辑
摘要: 函数执行时的名字空间 在Python虚拟机函数机制之无参调用(一)这一章中,我们对Python中的函数调用机制有个大概的了解,在此基础上,我们再来看一些细节上的问题。在执行MAKE_FUNCTION指令时,调用了PyFunction_New方法,这个方法有一个参数是globals,这个globals 阅读全文
posted @ 2018-08-23 21:03 北洛 阅读(515) 评论(0) 推荐(0) 编辑
摘要: PyFunctionObject对象 在Python中,任何一个东西都是对象,函数也不例外。函数这种抽象机制,是通过一个Python对象——PyFunctionObject来实现的 在Python中,有两个对象和函数有关,PyCodeObject和PyFunctionObject。PyCodeObj 阅读全文
posted @ 2018-08-22 22:00 北洛 阅读(930) 评论(0) 推荐(0) 编辑
摘要: Python中的异常控制语义结构 在Python虚拟机之异常控制流(四)这一章中,我们考察了Python的异常在虚拟机中的级别上是什么东西,抛出异常这个动作在虚拟机的级别上对应的行为,最后,我们还剖析了Python在处理异常时栈帧展开行为。但遗憾的是,在前面,我们只考察了Python虚拟机中内建的处 阅读全文
posted @ 2018-08-19 21:17 北洛 阅读(504) 评论(0) 推荐(0) 编辑
摘要: Python虚拟机中的异常控制流 先前,我们分别介绍了Python虚拟机之if控制流(一)、Python虚拟机之for循环控制流(二)和Python虚拟机之while循环控制结构(三)。这一章,我们来了解一下异常机制在Python虚拟机中的实现 首先,我们来看下面的代码: 1 / 0在Python中 阅读全文
posted @ 2018-08-19 16:53 北洛 阅读(699) 评论(0) 推荐(0) 编辑
摘要: Python虚拟机中的while循环控制结构 在Python虚拟机之if控制流(一)和Python虚拟机之for循环控制流(二)两个章节中,我们介绍了if和for两个控制结构在Python虚拟机中的实现,但是这里还差一个while循环控制结构。在这里,我们不单单要考虑循环本身的指令跳跃动作,还要考虑 阅读全文
posted @ 2018-08-19 10:31 北洛 阅读(735) 评论(0) 推荐(0) 编辑
摘要: Python虚拟机中的for循环控制流 在Python虚拟机之if控制流(一)这一章中,我们了解if控制流的字节码实现,在if控制结构中,虽然Python虚拟机会在不同的分支摇摆,但大体还是向前执行,但是在for循环控制结构中,我们将会看到一种新的指令跳跃方式,即指令回退。在if控制流章节中,我们看 阅读全文
posted @ 2018-08-18 17:34 北洛 阅读(1174) 评论(0) 推荐(0) 编辑