现在的位置: 首页 > 综合 > 正文

《简明Python教程》学习笔记

2012年01月11日 ⁄ 综合 ⁄ 共 2922字 ⁄ 字号 评论关闭

《简明Python教程(A Byte of Python)》: http://woodpecker.org.cn/abyteofpython_cn/chinese/index.html

Python的创造者是Guido van Rossum。

Python的官方介绍是:“Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。”

特点:语法简单,无需管理内存,可移植性,是解释型语言,可嵌入c/c++等程序,带有庞大的标准库,免费开源。

数有四种类型:整数,长整数,浮点数,复数(-5+4j)

字符串:可用成对的单引号或双引号,另外还可用三个单引号,包含多行字符串,其中可任意使用单引号双引号,如'''sam'p'le '''。(Python没有char类型)

变量:无需声明或定义数据类型,直接赋值。像basic语言。

代码:一个语句可以分号结尾或者省去分号,直接回车

Python代码的层次结构完全依靠缩进,不依靠 { } 。

运算符:和c类似,不同在于:**乘方,//整除,^异或,~按位翻转(x的按位翻转是-(x+1),~5是6),布尔操作“非”“与”“或”分别是not, and, or,和c的!, &&, ||不同。

注释:以井号#开头,不使用c/c++的注释符号,应该是为了遵循Unix的脚本习惯吧。

控制语句

条件控制:if elif else 和c类似,不过不使用括号,句末加上冒号:。Python没有switch语句,可以使用if elif else或字典。

while循环:while else (else为可选)

for循环:for i in range(1, 5): 注意range(1, 5)表示[1, 2, 3, 4],相当于c的for (int i = 1; i < 5; i++)。range默认步长是1,range(1, 5, 2)表示步长为2,[1, 3]。

break: 用于终止循环,else不会被执行。

函数

用def定义,例如 def func1(a, b=1): 第二个参数具有默认值。可如此调用func1(1) func1(1, 2) func1(b=2, a=3)改变参数顺序

函数参数是传值的。

变量具有作用域,可通过global来声明全局变量

return语句:如果没有返回,相当于写成return None

pass语句:表示空的语句块,例如 def func(): pass

文档字符串DocString:每个函数(或模块、类)的第一个逻辑行的字符串是文档字符串。通常是一个多行字符串,首行以大写字母开始,句号结尾。第二行空行,第三行是详细描述。可以func.__doc__打印出来

模块:通过import导入模块。模块文件扩展名必须是.py。字节编译过的模块是.pyc,可加快模块加载速度,与平台无关。模块就是一个单独的.py文件。没什么特殊之处。

数据结构:内建三种数据结构:列表list、元组tuple和字典。

list: 可增删查的列表。alist = ['a', 'b', 'c']

元组tuple: 不可变的列表。atuple = ('a', 'b', 'c') 空元组直接(),但一个成员的元组必须加上逗号 atuple = ('a', )为了区分元组和表达式中一个带圆括号的对象。元祖用处最多的地方是打印,如 print '%s is %d' % (var0, var1)

字典dict: d = {key1: value1, key2:value2} 用d['key']来获得值

列表、元组都可以使用索引index来访问成员,如alist[0]。index可以为负数,-1表示序列的最后一个元素。

列表直接赋值不会产生列表的拷贝,相当于只是Pointer复制。如list2 = list1两者完全相同。list2 = list1[:]这样才会产生新拷贝。

class类: 和其他oo类似。但类的函数参数第一个必须是self,调用时不需要加self。初始化用__init__。显式删除对象用__del__。

class Person:
    def __init__(self, name):
        self.name = name

    def sayHi(self):
        print 'Hello, my name is', self.name

p = Person('Swaroop')
p.sayHi()

class的继承:子类__init__不会自动调用基类的__init__

class Male(Person):

  def__init__(self, name, salary):

     Person.__init__(self, name)

     self.salary = salary

输入输出

文件

读方式打开 f = file('aaa.txt')

读一行(包含回车) line = f.readline()

写方式打开 f = file('aaa.txt', 'w')

写入 f.write('abc')

关闭 f.close()

存储器pickle,可在文件中持久存储任何Python对象。

import cPickle as p

f = file("a.dat", 'w')

p.dump(['a', 'b'], f)

f.close()

f = file('a.dat')

alist = p.load(f)

异常处理

try:

except EOFError:

except:

自定义异常类型

class ShortInputException(Exception):
    '''A user-defined exception class.'''
    def __init__(self, length, atleast):
        Exception.__init__(self)
        self.length = length
        self.atleast = atleast

try:
    s =
raw_input('Enter something --> ')
    if len(s) < 3:
        raise ShortInputException(
len(s), 3)
    # Other work can continue as usual here
except EOFError:
    print '\nWhy did you do an EOF on me?'
except ShortInputException, x:
    print 'ShortInputException: The input was of length %d, \
          was expecting at least %d'
% (x.length, x.atleast)
else:
    print 'No exception was raised.'

lambda创建函数对象

def make_repeater(n):
    return lambda s: s*n

twice = make_repeater(2)

print twice('word')
print twice(5)

输出

$ python lambda.py
wordword
10

抱歉!评论已关闭.