zcynine

 

 

自然字符串

如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。

r"Newlines are indicated by \n"

 

在文件头加上linux下运行python的主程序模块和文件名

#!/usr/bin/python
#Filename:test.py

 

打印DocString(文档字符串)是个好习惯

#!/usr/bin/python
#Filename:test.py

def printMax(x, y):
    \'\'\'Prints the maximum of two numbers.

    The two values must be integers.\'\'\'
    x = int(x) # convert to integers, if possible
    y = int(y)
    if x > y:
        print x, \'is maximum\'
    else:
        print y, \'is maximum\'

printMax(3, 5)
print printMax.__doc__

Result

 

 主模块入口Sample

#!/usr/bin/python
# Filename: using_name.py
if __name__ == \'__main__\':
    print \'This program is being run by itself\'
else:
    print \'I am being imported from another module\'

 

构建自己的模块

mymodule

#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
print \'Hi, this is mymodule speaking.\'
version = \'0.1\'
# End of mymodule.py

import的主module

#!/usr/bin/python
# Filename: mymodule_demo.py
import mymodule
mymodule.sayhi()
print \'Version\', mymodule.version

 

数据结构

列表,即Javascript中的数组,可以对它进行增删改查的操作

#!/usr/bin/python
# Filename: using_list.py

# This is my shopping list
shoplist = [\'apple\', \'mango\', \'carrot\', \'banana\']

print \'I have\', len(shoplist),\'items to purchase.\' #length

print \'These items are:\', # Notice the comma at end of the line
for item in shoplist: #for-in circle
    print item,

print \'\nI also have to buy rice.\'
shoplist.append(\'rice\') #append element
print \'My shopping list is now\', shoplist

print \'I will sort my list now\'
shoplist.sort() #sort elements
print \'Sorted shopping list is\', shoplist

print \'The first item I will buy is\', shoplist[0] #get element by index
olditem = shoplist[0]
del shoplist[0] #delete element
print \'I bought the\', olditem
print \'My shopping list is now\', shoplist

Result

 

元组,和列表类似,但是不能修改,即为不能修改的列表,用()包裹。

元组可以直接输出,定义中可以直接包含其他元组

类似于C++中的多维数组

#!/usr/bin/python
# Filename: using_tuple.py

zoo = (\'wolf\', \'elephant\', \'penguin\')
print \'Number of animals in the zoo is\', len(zoo)

new_zoo = (\'monkey\', \'dolphin\', zoo)
print \'Number of animals in the new zoo is\', len(new_zoo)
print \'All animals in new zoo are\', new_zoo
print \'Animals brought from old zoo are\', new_zoo[2]
print \'Last animal brought from old zoo is\', new_zoo[2][2]

Result

 

元组一般用于打印

#!/usr/bin/python
# Filename: print_tuple.py

age = 22
name = \'Swaroop\'
print \'%s is %d years old\' % (name, age)
print \'Why is %s playing with that python?\' % name

 

字典,类似于Javascript里的Object,key/value键值对,Hash表

#!/usr/bin/python
#Filename:test.py

#ab is short for \'a\'ddress \'b\'ook

ab={
    \'Swaroop\' : \'swaroopch@byteofpython.info\',
    \'Larry\' : \'larry@wall.org\',
    \'Matsumoto\' : \'matz@ruby-lang.org\',
    \'Spammer\' : \'spammer@hotmail.com\'
    }

print "Swaroop\'s address is %s" % ab[\'Swaroop\']

#Adding a key/value pair
ab[\'Guido\'] = \'guido@python.org\'

#Deleting a key/value pair
del ab[\'Spammer\']

print \'\nThere are %d contacts in the address-book\n\' % len(ab)

for name,address in ab.items():
    print \'Contact %s at %s\' %(name,address)

if \'Guido\' in ab: #OR ab.has_key(Guido)
    print "\nGuido\'s address is %s" %ab[\'Guido\']

Result

 

列表、元组和字符串都是序列,但是序列是什么,它们为什么如此特别呢?序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列。

#!/usr/bin/python
# Filename: seq.py

shoplist = [\'apple\', \'mango\', \'carrot\', \'banana\']

# Indexing or \'Subscription\' operation
print \'Item 0 is\', shoplist[0] #Item 0 is apple
print \'Item 1 is\', shoplist[1] #Item 1 is mango
print \'Item 2 is\', shoplist[2] #Item 2 is carrot
print \'Item 3 is\', shoplist[3] #Item 3 is banana
print \'Item -1 is\', shoplist[-1] #Item -1 is banana
print \'Item -2 is\', shoplist[-2] #Item -2 is carrot

# Slicing on a list
print \'Item 1 to 3 is\', shoplist[1:3] #Item 1 to 3 is [\'mango\', \'carrot\']
print \'Item 2 to end is\', shoplist[2:] #Item 2 to end is [\'carrot\', \'banana\']
print \'Item 1 to -1 is\', shoplist[1:-1] #Item 1 to -1 is [\'mango\', \'carrot\']
print \'Item start to end is\', shoplist[:] #Item start to end is [\'apple\', \'mango\', \'carrot\', \'banana\']

# Slicing on a string
name = \'swaroop\'
print \'characters 1 to 3 is\', name[1:3] #characters 1 to 3 is wa
print \'characters 2 to end is\', name[2:] #characters 2 to end is aroop
print \'characters 1 to -1 is\', name[1:-1] #characters 1 to -1 is waroo
print \'characters start to end is\', name[:] #characters start to end is swaroop

Result

 

引用,类似于C++的指针,如果我们把一个列表赋值给一个新变量,实际是新变量指向列表的内存地址,如果我们把一个序列复制给一个新变量,这只是Copy操作。

#!/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
# 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

Result

 

常用的字符串方法

#!/usr/bin/python
# Filename: str_methods.py

name = \'Swaroop\' # This is a string object
if name.startswith(\'Swa\'):
print \'Yes, the string starts with "Swa"\'

if \'a\' in name:
print \'Yes, it contains the string "a"\'

if name.find(\'war\') != -1:
print \'Yes, it contains the string "war"\'

delimiter = \'_*_\'
mylist = [\'Brazil\', \'Russia\', \'India\', \'China\']
print delimiter.join(mylist)

 

 

 

编写一个备份文件的Python脚本

设计思路

1. 需要备份的文件和目录由一个列表指定。

2. 备份应该保存在主备份目录中。

3. 文件备份成一个zip文件。

4. zip存档的名称是当前的日期和时间。

5. 我们使用标准的zip命令,它通常默认地随Linux/Unix发行版提供。Windows用户可以使用Info-Zip程序。注意你可以使用任何地存档命令,只要它有命令行界面就可以了,那样的话我们可以从我们的脚本中传递参数给它。

Code

#!/usr/bin/python
# Filename: backup_ver1.py

import os
import time

# 1. The files and directories to be backed up are specified in a list.
source = [\'/home/swaroop/byte\', \'/home/swaroop/bin\']
# If you are using Windows, use source = [r\'C:\Documents\', r\'D:\Work\'] or something like that

# 2. The backup must be stored in a main backup directory
target_dir = \'/mnt/e/backup/\' # Remember to change this to what you will be using

# 3. The files are backed up into a zip file.
# 4. The name of the zip archive is the current date and time
target = target_dir + time.strftime(\'%Y%m%d%H%M%S\') + \'.zip\'

# 5. We use the zip command (in Unix/Linux) to put the files in a zip archive
zip_command = "zip -qr \'%s\' %s" % (target, \' \'.join(source))

# Run the backup
if os.system(zip_command) == 0:
    print \'Successful backup to\', target
else:
    print \'Backup FAILED\'

 

 

 

面向对象

类与对象的方法

举个简单的例子就能看懂,书上的缩进写的一团糟,看起来有点类,手打一遍,发现Python真的很优雅!

#!/usr/bin/python
#Filename:test.py

class Person:
    \'\'\'Represents a person.\'\'\'
    population = 0

    def __init__(self,name):
        \'\'\'Initializes the person\'s data.\'\'\'
        self.name = name
        print \'(Initializing %s)\' %self.name

        #When this person is created,he/she
        #adds to the population
        Person.population += 1

    def __del__(self):
        \'\'\'I am dying.\'\'\'
        print \'%s says bye.\' %self.name

        Person.population -= 1

        if Person.population == 0:
            print \'I am the last one.\'
        else:
            print \'There are strill %d people left.\' %Person.population

    def sayHi(self):
        \'\'\'Greeting by the person.

        Really,that\'s all it does.\'\'\'
        print \'Hi,my name is %s.\' %self.name

    def howMany(self):
        \'\'\'Prints the current population.\'\'\'
        if Person.population == 1:
            print \'I am the only person here.\'
        else:
            print \'We have %d persons here.\' %Person.population


swaroop = Person(\'Swaroop\')
swaroop.sayHi()
swaroop.howMany()

kalam = Person(\'Abdul Kalam\')
kalam.sayHi()
kalam.howMany()

swaroop.sayHi()
swaroop.howMany()

Result

 

继承

#!/usr/bin/python
#Filename:test.py

class SchoolMember:
    \'\'\'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(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
        

Result

 

 

输入输出

文件

你可以通过创建一个file类的对象来打开一个文件,分别使用file类的read、readline或write方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式。最后当你完成对文件的操作的时候,你调用close方法来告诉Python我们完成了对文件的使用。

#!/usr/bin/python
#Filename:test.py

poem = \'\'\'\
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
\'\'\'

f = file(\'poem.txt\',\'w\') #open for \'w\'rting
f.write(poem) #write text to file
f.close() #close the file

f = file(\'poem.txt\')
#if no mode is specified,\'r\'ead mode is assumed by default
while True:
    line = f.readline()
    if len(line) == 0:#Zero length indicates EOF
        break
    print line,
    #Notice comma to avoid automatic newline added by Python

f.close() #close the file

 

储存与取储存 dump()&load()

Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。

还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,因此要快得多(比pickle快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。

#!/usr/bin/python
#Filename:test.py

import cPickle as p
#import pickle as p

shoplistfile = \'shoplist.data\'
# the name of the file where we will store the object

shoplist = [\'apple\', \'mango\', \'carrot\']

# Write to the file
f = file(shoplistfile, \'w\')
p.dump(shoplist, f) # dump the object to a file
f.close()

del shoplist # remove the shoplist

# Read back from the storage
f = file(shoplistfile)
storedlist = p.load(f)
print storedlist
        

 

 

异常

try...except的用法

#!/usr/bin/python
#Filename:test.py

import sys

try:
    s = raw_input(\'Enter something --> \')
except EOFError:
    print \'\nWhy did you do an EOF on me?\'
    sys.exit() # exit the program
except:
    print \'\nSome error/exception occurred.\'
    # here, we are not exiting the program

print \'Done\'

 

 

http://pythonguidecn.readthedocs.org/zh/latest/

http://old.sebug.net/paper/books/LearnPythonTheHardWay/

 

分类:

技术点:

相关文章: