pythonheap(python有没有堆和栈的概念)

2021-09-15 0 454
本站所有源码亲测可搭建!仅提供源代码学习参考!如需代安装代配置请联系网站客服获取报价!

1.python有没有堆和栈的概念

作者:jasonleaster链接:/question/34835069/answer/87490319来源:知乎著作权归作者所有,转载请联系作者获得授权。

声明:以下提及的Python实现或相关细节概念均特指CPython1. 首先解决题主demo代码里面的疑惑 (没写过compiler)不管是Python还是C, 很重要的一个概念就是name 和 object。在Python里面赋值语句有非常简洁的抽象概念,如下 Assignment expression in Python have two things in common:Create a new objectbuild a connection between that new object and a name题主可以思考既然 a = 1 在Python中是assignment expression,那么def func(): pass 是不是一个赋值语句呢?(请紧扣上面关于赋值表达式的两条概念) 我并没有说题外话,只是在帮助题主更深刻的理解demo代码里面关于赋值过来赋值过去的一些疑惑。

一方面为了更好的利用高效率的内存,另一方面为了释放把程序员从各种内存管理的细节中解放,更好的关注“业务逻辑”,有了GC和一些很爽的技术,比方说referenceIn [8]: string_1 = “EOF”In [9]: string_2 = “EOF”In [11]: print “address 1: %x” % id(string_1)address 1: 7f2517898530In [12]: print “address 2: %x” % id(string_2)address 2: 7f25178985302. 关于题主说的Python中是否存在stack。 严谨的说,stack只是一种抽象数据结构。

不管是什么语言,实现一个stack应该不难。题主的意思应该是指Python语言本身是否存在stack or heap 概念的实现。

关于heap的定义:In computer science, a heap is a specialized tree-based data structure that satisfies the heap property: If A is a parent node of B then the key of node A is ordered with respect to the key of node B with the same ordering applying across the heap. — Wikipedia关于Heap,可能才疏学浅又或者眼神不好使,并没有找到符合树形结构定义的heap,相反,Python对象都是生存在机器操作系统管理的原生heap上的,这里的这个heap就是特身的机器本身动态内存,是由C语言的内存管理API malloc那一堆family API申请来的。所以才会常常听到人们说“Python的对象都是生存在堆上的”。

如果题主有兴趣还有探究Python虚拟机的实现,会发现这货完全在模拟x86 stack-based machine。如果对C语言很了解那就更不用说了,简直就是个仿真。

多说一句,有兴趣的话可以探究一下,Python的内存池(pool)是怎么回事。我做的一点点积累,有兴趣可以瞥一眼 Architecture of Python Virtual Machine(友情提示,不感兴趣不要点开 : )再说关于stack。

额。

前面都说了Python的虚拟机就是stack-based machine,所以Python语言本身实现了stack,具体的就是 PyFrameObject里面的两个指针以及一些宏操作。我没有说PyFrameObject本身就是stack,因为PyFrameObject本身是为了隔离namespace而存在的。

而每一个PyFrameObject都有定义两个指针 — PyObject **f_valuestack, PyObject ** f_stacktop这两个指针模拟了x86平台里面的esp 和 ebp寄存器的作用。

至于pop或者push之类对于栈的操作都是用宏实现的,也都是对这两个指针操作。typedef struct _frame { PyObject_VAR_HEAD 。

。 PyObject **f_valuestack;/* points after the last local */ /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. Frame evaluation usually NULLs it, but a frame that yields sets it to the current stack top. */ PyObject **f_stacktop; 。

。} PyFrameObject;栈本身的概念非常简洁也非常有用处。

2.python中**是什么意思

** 在python里面表示幂运算

传递实参和定义形参(所谓实参就是调用函数时传入的参数,形参则是定义函数是定义的参数)的时候,你还可以使用两个特殊的语法:“*“ ** 。

调用函数时使用* **

test(*args)* 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去。比如上面这个代码,如果 args 等于 (1,2,3) ,那么这个代码就等价于 test(1, 2, 3) 。

test(**kwargs)** 的作用则是把字典 kwargs 变成关键字参数传递。比如上面这个代码,如果 kwargs 等于 {‘a’:1,’b’:2,’c’:3} ,那这个代码就等价于 test(a=1,b=2,c=3) 。

定义函数参数时使用* **

def test(*args):

定义函数参数时 * 的含义又要有所不同,在这里 *args 表示把传进来的位置参数都装在元组 args 里面。比如说上面这个函数,调用 test(1, 2, 3) 的话, args 的值就是 (1, 2, 3) 。:

def test(**kwargs):

类似的, ** 就是针对关键字参数和字典的了。 调用 test(a=1,b=2,c=3) 的话, kwargs 的值就是 {‘a’:1,’b’:2,’c’:3} 了。

普通的参数定义和传递方式和 * 们都可以和平共处,不过显然 * 必须放在所有位置参数的最后,而 ** 则必须放在所有关键字参数的最后,否则就要产生歧义了

3.python scipy.misc什么用

SciPy 中包含一些用于输入和输出的实用模块。下面介绍其中两个模块:io 和misc。

以图像形式保存数组

因为我们需要对图像进行操作,并且需要使用数组对象来做运算,所以将数组直接保存为图像文件1 非常有用。本书中的很多图像都是这样的创建的。

imsave() 函数可以从scipy.misc 模块中载入。要将数组im 保存到文件中,可以使用下面的命令:

from scipy.misc import imsave imsave(‘test.jpg’,im)

scipy.misc 模块同样包含了著名的Lena 测试图像:

lena = scipy.misc.lena()

该脚本返回一个512*512 的灰度图像数组。

注1: 所有Pylab 图均可保存为多种图像格式,方法是点击图像窗口中的“保存”按钮。

4.python exception 是什么对象

所说所有的变量都是对象。 对象在python里,其实是一个指针,指向一个数据结构,数据结构里有属性,有方法。

对象通常就是指变量。从面向对象OO的概念来讲,对象是类的一个实例。在python里很简单,对象就是变量。

class A:

myname=”class a”

上面就是一个类。不是对象

a=A()

这里变量a就是一个对象。

它有一个属性(类属性),myname,你可以显示出来

print a.myname

所以,你看到一个变量后面跟点一个小数点。那么小数点后面就是它的属性或者是方法。带括号的方法。不带就是属性。

pythonheap(python有没有堆和栈的概念)

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!1207802822@qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有红包奖励和额外收入!

源码蜂 PYTHON教程 pythonheap(python有没有堆和栈的概念) https://www.yuanmafeng.com/44492.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或联络我们。
查看详情

相关推荐

评论
暂无评论
pythonheap(python有没有堆和栈的概念)-海报

分享本文封面