数据结构
Python中有三种内建的数据结构——列表、元组和字典
列表为可变数据类型,元组为不可变数据类型
列表
shoplist.append(‘rice’) #在列表最后添加一个元素
print shoplist #直接输出这个列表
del shoplist [ 0 ] #删除一个元素
print shoplist [ 1: 3 ]
#<span style=”color: #ff0000;”>注意:</span>输出第二个与第三个元素
元组 (元组与列表很像,只不过元组不能修改)
new_zoo = (‘monkey’, ‘dolphin’, zoo)#相当于一个二元数组
print new_zoo [ 2 ] [ 2 ]
空元组myempty = () 单一元组 singleton = (2 , )
元组与打印
name = ‘Swaroop’
print ‘%s is %d years old’ % (name, age)
字典
字典就是将键和值联系在一起,并且键必须是唯一的,字典其实就像是PHP中的数组,但是字典中的键/值对是没有顺序的。字典是dict类的实例/对象。
print d[‘key1’]
d[‘key3’]=4 #添加一个新的键值对到字典
del d [‘key1’ ] #删除一个键值对
for v1, v2 in d. items ( ): #遍历字典 V1为键 V2为值
print ‘Contact %s at %s’ % (v1,v2 )
序列
列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列
参考 !
当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 参考 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定
# Filename: reference.py
print ‘shoplist is’, shoplist //这里和下面的输出时一样的
print ‘mylist is’, mylist //与上面的输出是一样的
# notice that both shoplist and mylist both print the same list without
# the ‘apple’ confirming that they point to the same object
print ‘Copy by making a full slice’
mylist = shoplist[:] # make a copy by doing a full slice
#这就是一个完整的拷贝,不管原来的如何改变,都不会影响到他
del mylist[0] # remove first item
print ‘shoplist is’, shoplist
print ‘mylist is’, mylist
# notice that now the two lists are different
print ‘Simple Assignment’
shoplist = [ 'apple', 'mango', 'carrot', 'banana' ]
mylist = shoplist # mylist is just another name pointing to the same object!
del shoplist [ 0 ]
你需要记住的只是如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。如果你只是想要使用另一个变量名,两个名称都 参考 同一个对象,那么如果你不小心的话,可能会引来各种麻烦。
类与对象
注意,即便是整数也被作为对象(属于int类)
对象可以使用普通的 属于 对象的变量存储数据。属于一个对象或类的变量被称为域,对象也可以使用 属于 类的函数来具有功能。这样的函数被称为类的方法。这些术语帮助我们把它们与孤立的函数和变量区分开来。域和方法可以合称为类的属性。
域有两种类型——属于每个实例/类的对象或属于类本身。它们分别被称为实例变量和类变量
self
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self
def __init__ ( self, name ): //构造函数,在类被实例化的时候便会运行
self. name = name // self. name创建一个类变量
def sayHi ( self ):
print ‘Hello, my name is’, self. name
p = Person(‘Swaroop’)
p.sayHi()
类变量与对象变量
test= 1//类变量 每次被实例化之后 他的值会一直保存着,就相当于静态变量
def __init__ ( self, name ):
self. name2 = name
Person. test=Person. test+ 1
def sayHi ( self ):
print Person. test
p = Person(‘Swaroop’)
p.sayHi()
p2 = Person(‘Swaroop’)
p2.sayHi()
Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。
同样,注意__del__方法与 destructor 的概念类似。
继承
”‘Represents any school member.’”
def __init__ ( self, name, age ):
self. name = name
self. age = age
print ‘(Initialized SchoolMember: %s)’ % self. name
def tell(self):
”‘Tell my details.’”
print ‘Name:”%s” Age:”%s”‘ % (self.name, self.age),
class Teacher(SchoolMember): //子类 继承的方法
”‘Represents a teacher.’”
def __init__(self, name, age, salary):
SchoolMember.__init__(self, name, age)
self.salary = salary
print ‘(Initialized Teacher: %s)’ % self.name
def tell(self):
SchoolMember.tell(self)
print ‘Salary: “%d”‘ % self.salary
class Student(SchoolMember):
”‘Represents a student.’”
def __init__(self, name, age, marks):
SchoolMember.__init__(self, name, age)
self.marks = marks
print ‘(Initialized Student: %s)’ % self.name
def tell(self):
SchoolMember.tell(<span style=“color: #ff0000;”>self</span>)
#这里不使用self的话,就不会实例化基类
print ‘Marks: “%d”‘ % self.marks
t = Teacher(‘Mrs. Shrividya’, 40, 30000)
s = Student(‘Swaroop’, 22, 75)
print # prints a blank line
members = [t, s ]
for member in members:
member. tell ( ) # works for both Teachers and Students
基本类的__init__方法专门使用self变量调用,这样我们就可以初始化对象的基本类部分。这一点十分重要——Python不会自动调用基本类的constructor,你得亲自专门调用它。
Python总是首先查找本类的方法,在这个例子中就是如此。如果它不能在本类中找到对应的方法,它才开始到基本类中逐个查找。基本类是在类定义的时候,在元组之中指明的。
编码
通过在文件头部加上#-*-coding:utf-8-*- 来定义文件的字符集