我是个老手,多年来一直用Fortran、C、C++、Perl和一些Java编程,并试图学习这种新的Python语言。
我有一个小程序,它使用PIL创建一个图像,绘制一些原语(矩形、椭圆等)。并把它保存到巴布亚新几内亚。效果很好..。没问题。
我发现,在过去,“真正学习”一门语言的最好方法是“在引擎盖下窥视”并理解机械原理(双关语!)我以为我在进步..。但是,在查看PIL库以查看幕后发生了什么时,我在ImageDraw.py中找到了以下代码
def ellipse(self, xy, fill=None, outline=None):
"""Draw an ellipse."""
ink, fill = self._getink(outline, fill)
if fill is not None:
self.draw.draw_ellipse(xy, fill, 1)
if ink is not None:
self.draw.draw_ellipse(xy, ink, 0)所以,self.draw.draw_ellipse()椭圆()调用方法,好的,很好.但是draw_ellipse(...)是在哪里定义的?那里发生了什么魔法?我搜索了整个PIL目录树(甚至整个python树.),提到draw_ellipse的唯一两个地方就在省略()方法定义中.我甚至在调试器中试过一步一步地完成它,我仍然感到“麻烦”:-)关于在引擎盖下发生了什么。
我遗漏了什么??
谢谢!
发布于 2017-11-26 13:10:32
draw_ellipse是在_imaging.c文件中定义的。请看下面的内容。
由于代码是用c++编写的(可能是为了提高库的性能),而且您只有一个已编译的PIL包,所以您无法看到原始代码。编译后的文件名以_imaging.cpy.~开头。在我的环境中,它是_imaging.cpython-36m-darwin.so。
https://stackoverflow.com/questions/47495340
复制相似问题