Python in nutshell 2nd 简明翻译 (1)

来源:互联网 发布:软件编程语言培训中心 编辑:程序博客网 时间:2024/04/28 00:09

Python in nutshell 2nd (1)

Chapter 4. Python语言

本章是针对Python语言的一个快速指南,要想深入地从头学习Python,我建议可以先阅读Mark LutzDavid Ascher编写的Learning Python一书,由O'Reilly出版。

4.1. 词法结构

一种语言的词法结构是如何用此语言编写程序的一个基本规则集。它是语言的低层语法,就像变量名看起来是什么样的,什么字符用来标示出程序注释等等。每个Python源文件,与其它文本文件一样,是一个字符序列。也可以完全认为它是行,标记符,以及语句的序列。这些不同的视角也是互相补充与加强的关系。Python在程序布局上是非常特殊的,特别要注意的是行与缩进,所以如果你从其它语言转移到Python上,要特别注意这个信息。

4.1.1. 行与缩进

一段Python程序是由一组逻辑行的序列组成的,每个逻辑行则由一个或多个物理行组成。

不在字符串中的’#’表示注释,即在此字符后直到行未的所有内容都是注释。

不需要使用任何特殊字符来作为行结束符(在Java中,我们要使用分号表示行尾)。

可以使用’/’反斜杠将多个物理行连接为一个逻辑行。同时,Python将会将没有结束配对的( [ ,以及 { 范围内的所有物理行都自动连接为一个逻辑行。使用三引号可以得到多个物理行组成的单逻辑行字符串。对于由多物理行组成的单逻辑行语句,所有的缩进规则只针对首行有效。

Python只使用缩进来组织代码段,而不使用任何其它符号,如括号,或Begin/End对。为避免不必要的混乱,不要混用TAB与空格,建议只使用空格(在Python中,逻辑上将TAB转换为8个空格)。

4.1.2 字符集

通常情况下,Python源文件只使用ASCII字符集,要想使用大字符集,需要在源码的首行加入: # -*- coding: utf-8 -*- 。在此例子中使用了utf-8字符集,你也可以使用其它的字符集,如iso-5988-1。注意,非ASCII字符集只对注释与字符串有效。

4.1.3 标记

Pythony程序行由多个标记组合而成。

4.1.3.1 标识符

标识符用来标记变量、函数、类、模块或其它对象的名称。它以字母或下划线开始,名字中可以包括零个或多个字母、下划线或数字。但不可以使用特殊字符$%@

所有标识符在Python中是大小字敏感的。

Python建议的标识符大小写规范是:针对类名,首单词首字母大写,其它种类全部使用小写。由一个单下划线开始的标识符是一个私有标识符;由二个连续下划线开始的标识符是一个强私有标识符;由二个连续下划线开始,并由 二个连续下划线结束的标识符是与语言相关的特殊标识符。由单个下划线组成的标识符在终端界面中起特殊作用,它被绑定到最后一次执行的表达式。

4.1.3.2 关键字

目前,Python中共有30个关键字,所有关键字均为小写。

andassertbreakclasscontinuedefdelelifelseexceptexecfinallyforfromglobalifimportinislambdanotorpassprintraisereturntrywhilewith (2.5)yield

其中With是从2.5版本开始的一个新关键字,as是一个伪关键字。要想在程序中使用新的with语句,记住在源码中加入 from _ _future_ _ import with_statement 。这样在此Module中就可以使用with语句了。

4.1.3.3 操作符

+-*/%**//<<>>&|^~<<=>>=<>!===

4.1.3.4 分隔符

以下的符号及它们的组合被用作为分隔符:

()[]{},:.'=;+=-=*=/=//=%=&=|=^=>>=<<=**=

以下字符在当作其它标记的组成部分时,用来表示特定的含义:

'"#/

在除注释与字符串外,Python程序中不可以使用字符 $ 与 ? 、所有ASCII码大于126的字符,除空格外所有的控制字符。

字符@从Python2.4开始被用来表示Decorator

4.1.3.5 字面值

在程序中出现的数字与字符串都是字面值:

42 整数

3.14 浮点数

1.0j 虚数

'hello' 字符串

"world" 字符串

"""Good night""" 字符串

也可以用来初始化其它的基本类型:

[ 42, 3.14, 'hello' ] 列表

( 100, 200, 300 ) 表列

{ 'x':42, 'y':3.14 } 字典



4.1.4 语句

4.1.4.1 简单语句

不包含其它语句就是简单语句。一般一句简单语句占一行,也可以用 ; 作分隔符在一行放置多句语句。

4.1.4.2 组合语句

组合语句由一个以 : 号结束的子句开始,后接一组作为语句体的语句序列。





4.2 数据类型

Python中所有皆是对象,对象的类型定义了它可以支持的操作,它的属性,以及它是否是一个可变对象。

type(obj) 返回任何对象的类型对象。

instance(obj,type) 检测对象的类型,返回TrueFalse

4.2.1 数字类型

有整数(分为普通整数、长整数两种)、浮点数与复数。

所有数字类型都是不变类型。

所有数字类型都不包括 + 或 – 号,若出现这样的符号,则表示单独的操作符,并不是此数字的一部分。

4.2.1.1 整数

普通整数:

1, 23, 3493 # 十进制

01, 027, 06645 # 八进制

0x1, 0x17, 0xDA5 # 十六进制

- sys.maxint – 1 <= 普通整数 <= sys.maxint

长整数:只受限于内存大小。

4.2.1.2 浮点数

0., 0.0, .0, 1., 1.0, 1e0, 1.e0, 1.0e0

对应于C语言中的Double类型。

4.2.1.3 复数

0j, 0.j, 0.0j, .0j, 1j, 1.j, 1.0j, 1e0j, 1.e0j, 1.0e0j



4.2.2 序列

序列是一个排序的容器。内建的序列有ListTupleString

4.2.2.1 可迭代对象

序列都是可迭代对象,可迭代对象都有边界范围。

4.2.2.2 字符串

字符串是由单个字符组成的序列。字符串是不变对象。

转义序列:

/<newline> 忽略行未 None

// 反斜杠 0x5c

/' 单引号 0x27

/" 双引号 0x22

/a 响铃 0x07

/b 退格 0x08

/f 进页 0x0c

/n 新行 0x0a

/r 回车 0x0d

/t 制表符 0x09

/v 垂直制表符 0x0b

/DDD 八进制值DDD As given

/xXX 十六进制值XX As given

/other 任何其它字符 0x5c + as given



在字符串表达式前加 r R 表示原始字符串,转义字符将会被忽略。

在字符串表达式前加 u U 表示unicode字符串,也可在 /u 后跟四个十六进制数值表示一个unicode字符。

在字符串表达式前加 ur ru 表示原始unicode字符串。

unicode 转义序列: /U{name} , 例如:/U{Copyright Sign} 表示版权符号。

邻近的多个字符串表达式会被自动连接到一起,如

marypop = ('supercalifragilistic' # Open paren -> logical line continues

'expialidocious') # Indentation ignored in continuation

这样我们可以在每行上加入需要的注释。

4.2.2.3 表列 Tuple

Tuple是不可变的序列容器对象。

(100, 200, 300) 有三个元素

(3.14,) 有一个元素

()

('x',100) 有两个元素,常用来表示 键-值 对。

tuple('wow') 得到 ('w','o','w')

4.2.2.4 列表 List

List是可变的序列容器对象。

[42, 3.14, 'hello'] 有三个元素

[100] 有一个元素

[]

list('wow') 得到['w','o','w']



4.2.3 集合 Set

set对应可变容器对象,frozenset对应不可变容器对象。其中无序存放不重复(Unique)对象。

python2.4以前,只能使用sets模块中的SetImmutableSet类。

set中只可以放置可散列对象,而set本身是非散列的,而frozenset对象本身是可散列的。



4.2.4 字典 Dictionary

映射就是一组无序的由同样是无序的一组键值进行索引的容器。作为键值的对象必须是可散列对象,且在字典中是唯一的。Dictionary中的每个Item指一个键-值对(它由两个元素的Tuple表示,参见上面Tuple的内容)。

{'x':42, 'y':3.14, 'z':7 } 以字符串对象作为key的包含三组item

{1:2, 3:4 } 以整数对象作为key

{}

同样的字典,也可以通过构造函数来构建:

dict(x=42, y=3.14, z=7)

dict([[1, 2], [3, 4]])

dict( )

使用fromkeys方法可以快速建立含有一组key值的字典:

dict.fromkeys('hello', 2) # 得到 {'h':2, 'e':2, 'l':2, 'o':2}

dict.fromkeys([1, 2, 3]) # 得到 {1:None, 2:None, 3:None}



4.2.5 None

空对象。一个没有return语句的函数返回空对象。



4.2.6 可调用类型(Callable

可调用类型的实例支持函数调用操作。函数(内建及自定义)都可调用,Generator也是可调用的。

类型本身也是可调用的,系统有很多内建类型,如前面看到的dict,而class就是自定义的类型,类型的调用将会创建相应的类型实例。

方法也是可调用的,方法就是指类的属性绑定的函数,或者可以使用特定的__call__方法来调用类实例的方法。



4.2.7 布尔值

0、非空对象、非空容器都表示true0None、空容器表示false

bool类型是int的子类型,它有两个值:TrueFalse。等同于10

在实际应用中,请直接使用 if x,而不要使用if bool(x), if x==True, if bool(x)==True



 
原创粉丝点击