python 指引

参考:Python tutorial, A byte of python, Dive into python, Python Package Index, python style rules, Algorithms & Data Structures



变量

变量是用来存储数据的,存储的数据就是变量的值,如:

>>> age = 20
>>> print age
>>> print(age)
>>> print 'age'
>>> print "age"

注意:1.python中的单引号和双引号,用法是完全相同的;2.前两个print会调用变量的值,后两个则直接输出引号中的字符串。

变量可以存储字符串、数字和布尔值,通过tpye()可以查看变量的数据类型,如:

>>> type(age)
>>> type('age')

python中有整数、长整数、浮点数和复数4种类型的数字,数字可以进行比较操作和数值操作。比较操作包括:小于<,大于>,等于==,小于等于<=,大于等于>=和不等于!=,数值操作包括:加+,减-,乘*,除/,求余%,求整//,乘方**

字符串用单引号或双引号扩起来,常用的字符串操作有:

string[x] 获取第x个字符

"abcde"[2]>"b"

string[x:y] 获取从x到y的字符

"abcde"[1:3]>"bc"

string[:y] 获取从开始到y的字符

"abcde"[:3]>"abc"

string[x:] 获取从x到末尾的字符

"abcde"[3:]>"de"

len(string) 返回字符串长度

len("abcde")>"5"

string1+string2 合并两个字符串

"abc"+"de">"abcde"

更多字符串操作请看这里

数据类型可以合法地转换,常用的函数有int()float()str()

[TOP]


数据结构

列表和元组

将数据一个接一个地存起来,如列表lists和元组tuples,就构成了最简单的线性结构。

>>> list_1 = [5,4,3,2,1]
>>> tuple_1 = (5,4,3,2,1)

列表和元组非常相似,区别在于列表使用方括号,元组使用圆括号。访问列表和元组的方式也是一样的,如list_1[0]tuple_1[0]分别用于访问其第一个元素。

列表和元组更新元素的方式不同,列表中的元素可以单独更新,元组则不可以,如:

>>> list_1[1]=0
>>> list_1
[0,4,3,2,1]
>>> tuple_[1]=0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> tuple_1 = (0,4,3,2,1)
>>> tuple_1
(0,4,3,2,1)

列表和元组的元素可以是数字、字符串,也可以是列表、元组,最常见的是“列表的列表”,构成一个二维表。

列表的操作有很多,如对于list=[3,2,1]

list.append(i) 添加元素到列表尾部

list.append(0)>[3,2,1,0]

list.extend(list0) 合并list0到列表尾部

list.extend([0,9])>[3,2,1,0,9]

list.pop(x) 返回并删除第x个元素

list.pop(1)>2[3,1]

list.insert(x,i) 插入元素到第x个位置

list.insert(2,0)>[3,2,0,1]

list.sort() 排序列表元素

list.sort()>[1,2,3]

list.index(i) 返回列表中第一次出现该元素的位置

list.index(2)>1

list.count(i) 计算列表中该元素出现的次数

list.count(2)>1

list.remove(i) 删除列表中第一次出现的该元素

list.remove(2)>[3,1]

只要不会改变元素值,这些列表操作,大多数都同样适用于元组。

这些操作的使用说明几乎都内置在python的__doc__中,可通过help([])调取帮助信息,也可通过dir([])查看列表对象所有的属性和方法,然后通过print [].extend.__doc__查看详细内容。

字典和集合

列表和元组是元素的集合,这些元素依次对应一个数字下标。“数字下标”并不是必要的,字典就是一种“非数字下标”的数据结构,如:

>>> dict = {'a':'aaa','b':'bbb','c':'ccc'}

实际上,“下标”也不是必要的,python可以将数据放在一起,不指定次序,也没有下标,这就是集合,如:

>>> set = {'aaa','bbb','ccc'}

常见的集合操作有:

set_1 & set_2 返回两个集合共有的元素
set_1 | set_2 合并两个集合的元素
set_1 - set_2 set_1中存在,set_2中不存在的元素
set_1 ^ set_2 set_1或set_2中存在的元素,且剔除共有的元素


[TOP]


流程控制

分支控制

if 判断条件(非零) :
    执行语句
elif 判断条件 :
    执行语句
else :
    执行语句

循环控制

while 判断条件 :
    执行语句

for 元素 in 列表或元组:
    执行语句

breakcontinue用于跳出或跳过循环,pass是一个特殊的占位语句,用于保持程序结构的完整性,而不会做任何动作。

捕获异常

try:
    执行语句
except 错误返回名:
    执行语句
except 错误返回名,错误返回值 :
    执行语句
else :
    执行语句

[TOP]


函数

函数定义:

def functionname(parameters):
    函数体
    return [expression]

函数调用:

functionname(n)

关于匿名函数:lambda被称为python的匿名函数,其主体是一个表达式,而非代码块,并且只能写一行,如:

>>> sum = lambda arg1, arg2: arg1 + arg2
>>> sum(20,80)

[TOP]


输入输出

标准输出和标准输入:

>>> print "Hello World";
Hello World
>>> str = raw_input("Enter your input : ");
>>> print "Received input is : ", str

打开和关闭文件:

poem = '''\
What language is thine, O sea?
The language of eternal question.
What language is thy anser, O sky?
The language of eternal silence.
'''

f = file('poem.txt', 'w')
f.write(poem)
f.close()

f = file('poem.txt')
while True:
    line = f.readline()
        if len(line) == 0:
                break
        print line,
f.close()

'w'是”写“文件模式,常见的还有只读'r'、追加'a'、读写'r+'等模式。

文件处理完以后都需要关闭,下边这种方法可以自动关闭文件:

with open('letter.txt', mode="w") as file_a:
    for letter in "hello":
        file_a.write(letter + "\n")

with open('letter.txt') as a:
    for line in a:
        print line.strip()

更多文件处理,请看这里

[TOP]


创建一个类:

class Person:
    def __init__(self, age, name):
        self.age = age
        self.name = name
    def birthday(self):
        self.age = self.age + 1

这里创建了一个名为Person的类,__init__设置了类的属性,birthday()Person对象的一个方法。

下面来看看怎么使用这个类(创建实例):

hanmeimei = Person(15, "HanMeimei")
lilei = Person(16,"LiLei")
print lilei.name, lilei.age
print hanmeimei.name, hanmeimei.age

类可以继承,构成“超类”、“子类”等,类中的方法还可以重写,这些概念的作用需要在写代码过程中理解和领悟。

[TOP]


模块

import用于导入模块,也就是将python代码从另一个文件中转移到当前程序中,如:

import re

也可以只导入模块中的一部分代码(函数、类等),如:

from re import match

此外,还有相对导入、局部导入等调用模块的方法,请查看这里

[TOP]


虚拟环境

virtualenv用于创建虚拟的python环境,在虚拟环境中可以:

  1. 在没有权限的情况下安装新套件

  2. 根据不同的应用,使用不同的套件版本

  3. 套件升级不影响其他应用

安装:

$ sudo apt-get install python-virtualenv

创建虚拟环境:

$ virtualenv SPI
$ virtualenv -p python3 SPI

创建一个名为SPI的虚拟环境。

启动虚拟环境:

$ cd SPI
$ source ./bin/activate

退出虚拟环境:

(SPI)$ deactivate

安装套件:

(SPI)$ pip3 install numpy

[TOP]


接下来做什么?

python语言的优势需要在实际应用中才能体会到,而编程中所遇到的问题,很多时候并不是因为不懂语法,而是没有建立起“编程思想”,编程思想的建立只能通过不断地写代码,同时,应尽早掌握以下几条技巧

  1. 掌握列表推导式

  2. 掌握生成器

  3. 善用map、reduce、filter、iter、range、xrange等内置函数

  4. 掌握装饰器

  5. 善用递归函数

  6. 掌握itertoolsfunctools

  7. 善用模块,用成熟模块重构代码

  8. 善用字典、函数和类

  9. 学习算法,理解程序架构

[TOP]