《简明 python 教程》_《简明Python教程》笔记

简明Python教程是A Byte of Python的中译本, 旨在引导读者快速入门。本文总结了该教程Python 2.x版与Python 3.x版的内容和差异。

介绍

Python的特色

解释型

面向对象

动态数据类型

胶水语言

标准库功能齐全

起步

使用交互式的提示符

在命令行输入python进入交互环境。

Python 2.x 直接输入print 'hello world'。Python 3.x 中print不再是操作符,而成为函数,使用方法为print('hello world')。

运行help()获取帮助,按q退出帮助。help(func)得到函数的信息。加入引号print('str')可得到操作符的信息。

使用源文件

将代码保存为helloworld.py。然后,在终端执行python helloworld.py或者./helloworld.py。

要直接运行Python程序,在Unix有个标准的实现方法:在源文件行首加上#!/usr/bin/python。它被称作组织行,源文件的头两个字符是#!(叫做pound bang或者shebang),后面跟着一个程序的绝对路径。如果不知道位置,可以写成#!/usr/bin/env python,但有多个python版本共存时不可以,因为旧版本的Python可能运行程序。

Unix/Linux用户需要chmod a+x helloworld.py命令使文件可执行。

基本概念

四种类型:整数、长整数、浮点数、复数

字符串

双引号与单引号字符串完全相同

三引号('''或""")指示多行的字符串

转义符\也可用于表示下一行继续

自然字符串通过给字符串加上前缀r或R来指定

Unicode字符串前加前缀u或U

字符串不可变

相邻字符串会被自动级连,如'hello' 'world'会被自动转为'helloworld'。注意,如果输入print 'hello','world',逗号会变为空格,结果为hello world。

标识符

第一个字符为字母或下划线

其他部分可以为字母、下划线、数字

大小写敏感

对象

数、字符串、函数都是对象

使用变量时不需要声明或定义数据类型

逻辑行与物理行

建议每个物理行只写一句逻辑行

尽量避免使用分号

缩进

同一层次的语句必须有相同的缩进

运算符与表达式

控制流

if: 没有switch,用if..elif..else或字典完成同样工作

while: 有一个可选的else从句

for..in: 如for i in range(0,5), 可选else从句

break 和 continue: 在循环中使用

函数

global语句

global语句声明变量是全局的,当在函数内给赋变量的时候,变化也反映在主块中。

默认参数

只有形参表末尾的参数可以有默认值。如def func(a, b=5)是有效的,def func(a=5, b)是无效的。

关键参数

使用名字(关键字)而不是位置(默认从左到右赋值)来给函数指定实参。如def func(a,b=2,c=3):可以这样调用func(c=50, a=100)。有两个好处:1. 不必担心参数顺序。2. 可以只给我们想要的那些参数赋值

DocStrings

文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。

可以通过func.__doc__(注意双下划线)得到函数的文档字符串属性。

模块

简介

利用import语句输入sys模块

sys.argv包含了命令行参数的列表

字节编译的.pyc文件

使输入模块更快

与平台无关

from..import语句

应避免使用from..import而使用import语句,因为这样可以使程序更易读,也可以避免名称的冲突。

模块的name属性

每个Python模块都有它的__name__,如果它是'__main__',说明这个模块被用户单独运行。

dir()函数

可以使用内建的dir()来列出模块定义的标识符,如dir(sys)。标识符有函数、类和变量。

不给dir()传递参数,默认返回当前模块的属性列表。

使用del语句删除当前模块中的变量/属性。

数据结构

列表

列表是可变的数据类型

列表中的项目包括在方括号中,如shoplist = ['apple', 'mango', 'carrot', 'banana']

删除用del,如del shoplist[0]

元组

元组和字符串一样是不可变的

元组的项目包括在圆括号中,如zoo = ('wolf', 'elephant', 'penguin')

字典

键值对包含在花括号中,如d = {key1 : value1, key2 : value2 }

del语句删除键/值对,如del dict['key']

序列

列表、元组和字符串都是序列

索引操作符和切片操作符

shoplist[0]抓取第一个项目

shoplist[-2]抓取倒数第二个项目

shoplist[:]返回整个序列的拷贝

shoplist[:-1]返回除最后一个项目外包含所有项目的序列切片

开始位置包含在序列切片中,而结束位置被排斥在切片外。

引用

创建一个对象并给它赋一个变量的时候,这个变量仅仅引用那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。

要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单对象),必须使用切片操作符来取得拷贝。

解决问题

Windows把反斜杠\作为目录分隔符,而Python中表示转义符。所以Windows下路径字符串应使用'C:\\Documents'或r'C:\Documents'。

os.sep变量会根据操作系统给出目录分隔符,即在Linux、Unix下是'/',在Windows下是'\\',在Mac OS下是':'。使用os.sep而非直接使用字符使程序具有移植性。

推荐使用zipfile和tarfile创建归档。不推荐使用os.system,它容易引发严重的错误。

面向对象编程

假如有一个类MyClass和这个类的实例MyObject。调用MyObject.method(arg1, arg2)时,会由Python自动转为MyClass.method(MyObject, arg1, arg2)。

方法与函数的区别只是一个额外的self变量

__init__方法类似于C++、C#和Java中的constructor,__del__方法与destructor的概念类似。

Python中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的。

只有一个例外:如果数据成员名称以双下划线前缀,比如__privatevar,Python的名称管理体系会把它作为私有变量。

输入输出

使file类的read、readline、write、close方法

读模式('r')、写模式('w')、追加模式('a')

使用pickle或cpickle模块的dump、load方法实现存取对象

异常

使用try..except语句来处理异常

使用raise语句引发异常,可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。

在无论异常发生与否的情况下都执行特定语句,使用try..finally

在一个try块下同时使用except从句和finally块,需要把一个嵌入另外一个。

标准库

sys模块

sys.argv

sys.version、sys.version_info

sys.stdin、sys.stdout、sys.stderr

os模块

os.name字符串指示正在使用的平台。比如Windows是'nt',Linux/Unix是'posix'。

os.getcwd()得到当前Python脚本工作的目录路径。

os.getenv()和os.putenv()分别用来读取和设置环境变量。

os.listdir()返回指定目录下的所有文件和目录名。

os.remove()用来删除一个文件。

os.system()用来运行shell命令。

os.linesep字符串给出当前平台使用的行终止符。如Windows使用'\r\n',Linux使用'\n',而Mac使用'\r'。

os.path.split()函数返回一个路径的目录名和文件名。

os.path.isfile()和os.path.isdir()分别检验给出的路径是文件还是目录。

os.path.exists()检验给出的路径是否真地存在。

更多

特殊的方法

特殊的方法都被用来模仿某个行为。例如,想要为类使用x[key]这样的索引操作(就像列表和元组一样),只需要实现__getitem__()方法就可以。在《Python参考手册》中可以找到所有的特殊方法。

单语句块

语句块通过缩进层次与其它块区分开。但如果语句块只包含一条语句,可以在条件语句或循环语句的同一行指明它。但这种写法不推荐使用。

if True: print('YES')

列表综合

通过列表综合,可以从一个已有的列表导出一个新的列表。

#!/usr/bin/python

# Filename: list_comprehension.py

listone = [2, 3, 4]

listtwo = [2*i for i in listone if i > 2]

print listtwo # [6,8]

在函数中接收元组和列表

在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的是**前缀,多余的参数会被认为是一个字典的键/值对。

def powersum(power, *args):

total = 0

for i in args:

total += pow(i, power)

return total

print powersum(3,2,1) # 9

print powersum(3,10) # 1000

lambda语句

lambda需要一个参数,后面仅跟单个表达式作为函数体,而表达式的值被这个新建的函数返回。注意,即便是print语句也不能用在lambda形式中,只能使用表达式。

def make_repeater(n):

return lambda s: s*n

twice = make_repeater(2)

print twice('word') # wordword

print twice(5) # 10

exec语句

exec用来执行储存在字符串或文件中的语句

exec 'print "Hello World"'

eval语句

eval用来计算存储在字符串中的有效表达式

eval('2*3')

assert语句

assert用来声明某个条件是真的,非真的时候引发AssertionError。

>>> mylist = ['item']

>>> assert len(mylist) >= 1

>>> mylist.pop()

'item'

>>> assert len(mylist) >= 1

Traceback (most recent call last):

File "", line 1, in ?

AssertionError

repr函数

repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有eval(repr(object)) == object。可以通过定义类的__repr__方法来控制对象在被repr函数调用的时候返回的内容。

>>> i = []

>>> i.append('item')

>>> `i`

"['item']"

>>> repr(i)

"['item']"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值