最近在学python,发现它有许多新颖的地方。我之前学过一些C++,发现Python与C++在些地方很相似,有些地方大相径庭。许多Python的概念,C++中都有相似的。
目前遇到的有几个:
1. “万物皆对象”
Python中,a = 10, b = 10, 则a,b同引用同一个对象10, 这个“10”被储存在内存某个地方(可以通过id(10)来查看地址)
在C++中, a = 10, b = 10 中, 10是一个右值, 没有地址(?)。
另外,在python中, function也是对象,function object + instance object = method object,程序每一个组件都被视为对象,拥有自己的属性和方法
2.类
1. python类的method第一个参数为self, 类似于C++的this指针,用来指代调用method的对象。
2. 类有class variable 和 instance variable 两种 data attribute, 前者类似C++的 static data member, 是属于类的,被全员共享的;后者是属于某个instance的,只能被这个instance访问;
最令我惊讶的是:同一个类的instance的instance varible可以数量不同。可以在运行时给某个instance添加某个属性,也可以del掉。而在C++中,类的data member数量是固定的统一的。
3. 类内也可以定义类,这个跟C++一样
3.赋值
Python支持多个变量同时赋值:
a, b = b, a # 将a,b交换
4.函数
最明显的差异是, Python中函数内可以定义函数, 这一个在C++中是禁止的;
5. 推导式
Python有列表推导式,字典推导式等。在语法上它们更加接近英语,在实践中也能简化代码,提高可读性。
(未完)
6.迭代
Python没有C/C++风格的迭代(即以以索引变量的改变去遍历序列),只有类似for_each的迭代:
for i in range(1, 22): # Python 迭代 ------ for ( int i = 0; i < num; ++i) # C++风格的迭代 ------
7. 生成器和惰性计算
Python中使用yield语句来生产生成器,来返回一个迭代器。它的好处是可以实现惰性计算,即只有被需要的时候,程序才计算结果,而不用事先计算好结果存起来,这样就减少了空间占用。生成器巧妙之处在于,每次执行到yield语句,就返回结果,同时记录变量和语句执行的状态。下一次运行将从上一次的yield语句后的语句开始执行。
(未完)
原文地址:https://www.cnblogs.com/Tsuko/p/9345704.html