looking at python
Python 初探
Python是。。?
python是一种解释型脚本语言。
python语言是一句一句执行的,可以再命令提示符中直接编写程序并随时获得结果
python支持面向对象
我已经会c了,除此之外我还会java了,为嘛我还要学习python?
python语言结构和语法十分简单,十分容易学习。(这两天基本就可以开始写python了,那个机器人项目就是用python写的。)
python代码易于阅读,并且,易于维护(这一条是看来的,这可能只是一种感觉问题。也可能是因为,python代码的层次性非常弱,代码结构非常简单,再加上很容易阅读,因此容易维护)
标准库十分广泛。(那个机器人项目=。=居然只提供了python和c++库)
可移植性好。
可扩展性好。这一条也是看来的。python可以添加低层次的模块到python解释器,这些模块使得程序员可以添加或者定制自己的工具。(别的语言也可以啊)
python的语法鉴赏
变量
对变量的第一次赋值就是声明和定义。
num = 1;nums = 1, 2, 3;array = 'a', "b", 'sa', 3;num = array[1]; // num = "b"num = array[3]; // num = 3
通过上面的例子可以看出来,变量的类型在运行时是可以发生改变的。
另外,python中没有字符类型。事实上也不需要有。
列表
这相当于数组的概念,但是python的列表中允许出现不同类型的元素。
例如:
list1 = ['a', 'b', "c", 123 ]
python列表的索引从0开始,并且可以一次访问其中的多个元素。
例如:
sublist = list[0:4]sublist = list[0:]
上述语句访问的是0, 1, 2, 3四个元素。
还可以直接删除列表中的一个元素:
del list[2];
对列表的操作还有:
list.append(o) # 列表尾追加元素olist.count(o) # 列表的元素个数list.extend(o) # 将新列表的值全部追加到原列表中list.index(o) # 返回列表中第一次出现这个值得位置list.insert(index, o) # 插入o到位置indexlist.pop(o=list[-1]) # 移除列表的一个元素,并返回该元素的值list.remove(o) # 移除列表中第一个这样的值list.reverse() # 将列表中的值倒置list.sort([compFunc]) # 链表排序,compFunc用于指定比较函数,可选
python中还有元组(不允许修改的列表)、字典等数据结构。。不码这儿了,语法什么的大差不离
python面向对象编程
与其他众多支持面向对象编程的编程语言一样,python使用class关键字来定义一个类。
创建类:
class Foo: id = 1 def __init__(self, name): self.name = name id = id + 1def displayself(self): print self.name, Foo.id
python中self是指向这个对象自己的引用。他必须作为每个方法的第一个参数。
每个类的属性分为两部分,一部分是在所有方法声明之前声明的变量,他们作为所有对象共享的一个静态变量,所有对象都持有相同的这个属性,并且都可以改变他的值。在方法中声明的属性是这个类的私有属性,每个对象拥有不同的私有属性。
创建对象的实例
foo1 = new Foo("foo1")foo2 = new Foo("foo2")
访问属性
foo1.displayself()foo2.displayself()
python内置类属性
__dict__: 一个字典,由类的属性数据构成
__doc__: 类的文档字符串,是类的第一个逻辑行的由三个引号括起来的字符串
__name__: 类名
__module__: 类定义所在的模块
__bases__: 类的所有父类构成元素(包含了一个由所有父类组成的元组)
python的对象销毁机制
python拥有和java类似的垃圾回收机制。
python使用引用计数器来最总内存总的对象。
当对象的引用计数变为0的时候,对象占用的内存将被回收。但是回收发生在内存将要被写满的时候。
同事python还有一个循环引用垃圾收集器,即两个对象分别持有对方的引用,但是没有别的变量指向他们,因此他们也应该被垃圾回收所以,他们也应该被垃圾回收。因此python的垃圾回收机制由一个引用计数器和一个循环垃圾收集器组成。
python的对象中包含了内置的析构函数__del__,当对象的引用计数变为0时,析构函数将被执行。
类的继承
python支持多重继承:
class Foo (Parent1, Parent2, Parent3...):
父类的构造函数必须在子类中亲自调用:
class Foo(Foo2): def __init__(self): super().__init__(self);