字典是dict类的实例/对象。
序列的两个主要特
点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作 符让我们能够获取序列的一个切片,即一部分序列。
索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的。因此,shoplist[-1]表示 序列的最后一个元素而shoplist[-2]抓取序列的倒数第二个项目。
切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。注意这与 你使用的索引操作符十分相似。记住数是可选的,而冒号是必须的。
切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片 到哪里结束。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则 Python会停止在序列尾。注意,返回的序列从开始位置 开始 ,刚好在 结束 位置之前结束。即 开始位置是包含在序列切片中的,而结束位置被排斥在切片外 引用
你需要记住的只是如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。如果你只是想要使用另一个变量名,两个名称都 引用 同一个对象,那么如果你不小心的话,可能会引来各种麻烦。 #!/usr/bin/python # Filename: reference.py print 'Simple Assignment'
shoplist = ['apple', 'mango', 'carrot', 'banana']
mylist = shoplist # mylist is just another name pointing to the same object! del shoplist[0]
print 'shoplist is', shoplist
print 'mylist is', mylist
# shoplist is ['mango', 'carrot', 'banana'] # mylist is ['mango', 'carrot', 'banana']
# 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
# shoplist is ['mango', 'carrot', 'banana'] # mylist is ['carrot', 'banana']
# notice that now the two lists are different
更多字符串的操作
name = 'Swaroop' # This is a string object if name.startswith('Swa'):
print 'Yes, the string starts with \if 'a' in name:
print 'Yes, it contains the string \if name.find('war') != -1:
print 'Yes, it contains the string \delimiter = '_*_'
mylist = ['Brazil', 'Russia', 'India', 'China']
print delimiter.join(mylist)
startwith方法是用来测试字符串是否以给定字符串开始。
in操作符用来检验一个给定字符串是否为另一个字符串的一部分。
find方法用来找出给定字符串在另一个字符串中的位置,或者返回-1以表示找不到子字符串。 str类也有以一个作为分隔符的字符串join序列的项目的整洁的方法,它返回一个生成的大字符 串。
os.exists函数检验在主备份目录中是否有以当前日期作为名称的目录。如果没有,我们使用os.mkdir函数创建。
注意os.sep变量的用法——这会根据你的操作系统给出目录分隔符,即在Linux、Unix下它 是'/',在Windows下它是'\\\\',而在Mac OS下它是':'。使用os.sep而非直接使用字符,会使我们的程序具有移植性,可以在上述这些系统下工作
最理想的创建这些归档的方法是分别使用zipfile和tarfile。它们是Python标准库的一部分,可以 供你使用。使用这些库就避免了使用os.system这个不推荐使用的函数,它容易引发严重的错 误。
1. 什么(分析) 2. 如何(设计) 3. 编写(实施) 4. 测试(测试与调试) 5. 使用(实施或开发) 6. 维护(优化)
类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象这个类的 实例 。这类 似于你有一个int类型的变量,这存储整数的变量是int类的实例(对象)
对象可以使用普通的 属于 对象的变量存储数据。属于一个对象或类的变量被称为域。对象也 可以使用 属于 类的函数来具有功能。这样的函数被称为类的方法。
域有两种类型——属于每个实例/类的对象或属于类本身。它们分别被称为实例变量和类变 量
类使用class关键字创建。类的域和方法被列在一个缩进块中。
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是 在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本 身,按照惯例它的名称是self。
假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法 MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了
__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希 望的 初始化 。注意,这个名称的开始和结尾都是双下划线。
我们没有专门调用__init__方法,只是在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法。这是这种方法的重要之处。 __init__方法类似于C++、C#和Java中的 constructor 。 #!/usr/bin/python class Person:
def __init__(self,name): #self 第一个参数 self.name = name def sayHi(self):
print\
p = Person('Lily') # 要传入一个参数 p.sayHi() # 不需要传值
类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象 对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。
对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不 是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。
Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称 管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的 名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求 的(与双下划线前缀不同)。
就如同__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用。对象消 逝即对象不再被使用,它所占用的内存将返回给系统作它用。 同样,注意__del__方法与 destructor 的概念类似。 继承 1 2 3 4
#!/usr/bin/python
class SchoolMember: def __init__(self,name,age):