版本3和24间的区别 (跳过第21版)
于2006-07-28 22:54:42修订的的版本3
大小: 317
编辑: czk
备注:
于2008-07-01 06:16:52修订的的版本24
大小: 8210
编辑: czk
备注:
删除的内容标记成这样。 加入的内容标记成这样。
行号 1: 行号 1:
## page was renamed from Python游戏设计基础/第2讲:Python语言基本数据结构
在这里详述 Python游戏设计基础/第2讲:Python语言基本数据结构.
<<TableOfContents>>
行号 4: 行号 3:
== 数字Numbers == = 基本概念 =

== 字面常量Literal Constants ==

一个'''字面意义上的(literal)'''常量的例子是如同5、1.23、9.25e-3这样的数,或者如同'This is a string'、"It's a string!"这样的字符串。它们被称作字面意义上的,因为它们具备 字面 的意义——你按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。

== 数值Numbers ==
在Python中有4种类型的数——整数、长整数、浮点数和复数。

    * 2是一个整数的例子。
    * 长整数不过是大一些的整数。比如123456789987654321。(注:这种类型在Python3.0中被去除。)
    * 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,{{{52.3E-4}}}表示52.3 * 10^-4^。
    * (-5+4j)和(2.3-4.6j)是复数的例子。
行号 7: 行号 18:
字符串是 字符的序列 。字符串基本上就是一组单词。我几乎可以保证你在每个Python程序中都要用到字符串。使用单引号(') 你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即空格和制表符都照原样保留。使用双引号(") 在双引号中的字符串与单引号中的字符串的使用完全相同,例如"What's your name?"。
行号 8: 行号 20:
== 列表Lists == == 变量Variants ==
行号 10: 行号 22:
== 字典Dictionaries == 仅仅使用字面意义上的常量很快就会引发烦恼——我们需要一种既可以储存信息 又可以对它们进行操作的方法。这是为什么要引入 变量 。变量就是我们想要的东西——它们的值可以变化,即你可以使用变量存储任何东西。变量只是你的计算机中存储信息的一部分内存。与字面意义上的常量不同,你需要一些能够访问这些变量的方法,因此你给变量名字。
行号 12: 行号 24:
== 元组Tuples == == 标识符的命名 ==
行号 14: 行号 26:
== 文件Files == 变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,你要遵循这些规则:

    * 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。
    * 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
    * 标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。
    * 有效 标识符名称的例子有{{{i}}}、{{{__my_name}}}、{{{name_23}}}和{{{a1b2_c3}}}。
    * 无效 标识符名称的例子有2things、this is spaced out和my-name。

== 数据类型 ==

变量可以处理不同类型的值,称为数据类型。基本的类型是数和字符串,我们已经讨论过它们了。在后面的章节里面,我们会研究怎么用类创造我们自己的类型。

使用内置函数type可以获取常量或者变量的类型,比如type(123.456)。

== 对象Objects ==

记住,Python把在程序中用到的任何东西都称为 对象 。这是从广义上说的。因此我们不会说“某某 东西 ”,我们说“某个 对象 ”。

就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python是极其完全地面向对象的。

我们将看一下如何使用变量和字面意义上的常量。

{{{#!python
i = 5
print i
i = i + 1
print i

s = '''This is a multi-line string.
This is the second line.'''
print s
}}}
输出
{{{
5
6
This is a multi-line string.
This is the second line.
}}}

下面来说明一下这个程序如何工作。首先我们使用赋值运算符(=)把一个字面意义上的常数5赋给变量i。这一行称为一个语句。语句声明需要做某件事情,在这个地方我们把变量名i与值5连接在一起。接下来,我们用print语句打印i的值,就是把变量的值打印在屏幕上。

然后我们对i中存储的值加1,再把它存回i。我们打印它时,得到期望的值6。

类似地,我们把一个字面意义上的字符串赋给变量s然后打印它。

== 语句与行 ==

默认地,Python希望每行都只使用一个语句,这样使得代码更加易读。

如果你想要在一行中使用多于一个语句,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个语句的结束。例如:
{{{
i = 5
print i
}}}
与下面这个相同:
{{{
i = 5;
print i;
}}}
同样也可以写成:
{{{
i = 5; print i;
}}}
甚至可以写成:
{{{
i = 5; print i
}}}
然而,我强烈建议你坚持每行只写一个语句。仅仅当一个语句太长的时候,在多于一行中写一个语句。这些都是为了尽可能避免使用分号,从而让代码更加易读。事实上,我 从来没有 在Python程序中使用过或看到过分号。

下面是一个在多行中写一个语句的例子。它被称为明确的行连接。
{{{
s = 'This is a string. \
This continues the string.'
print s
}}}
它的输出:
{{{
This is a string. This continues the string.
}}}
类似地,
{{{
print \
i
}}}
与如下写法效果相同:
{{{
print i
}}}
有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在语句中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。

== 缩进 ==

空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。

这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。

你需要记住的一样东西是错误的缩进会引发错误。例如:

{{{
i = 5
 print 'Value is', i # Error! Notice a single space at the start of the line
print 'I repeat, the value is', i
}}}
当你运行这个程序的时候,你会得到下面的错误:
{{{
  File "whitespace.py", line 4
    print 'Value is', i # Error! Notice a single space at the start of the line
    ^
SyntaxError: invalid syntax
}}}
注意,在第二行的行首有一个空格。Python指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。

如何缩进:不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用四个空格 。

== 运算符Operators ==

你编写的大多数语句(逻辑行)都包含表达式。一个简单的表达式例子如2 + 3。一个表达式可以分解为运算符和操作数。

运算符 的功能是完成某件事,它们由如+这样的符号或者其他特定的关键字表示。运算符需要数据来进行运算,这样的数据被称为 操作数 。在这个例子中,2和3是操作数。


== 表达式Expressions ==
{{{
#!/usr/bin/python

length = 5
breadth = 2
area = length * breadth
print 'Area is', area
print 'Perimeter is', 2 * (length + breadth)
}}}
输出
{{{
Area is 10
Perimeter is 14
}}}

矩形的长度与宽度存储在以它们命名的变量中。我们借助表达式使用它们计算矩形的面积和边长。我们表达式length * breadth的结果存储在变量area中,然后用print语句打印。在另一个打印语句中,我们直接使用表达式2 * (length + breadth)的值。

另外,注意Python如何打印“漂亮的”输出。尽管我们没有在'Area is'和变量area之间指定空格,Python自动在那里放了一个空格,这样我们就可以得到一个清晰漂亮的输出,而程序也变得更加易读(因为我们不需要担心输出之间的空格问题)。这是Python如何使程序员的生活变得更加轻松的一个例子。

基本概念

1. 字面常量Literal Constants

一个字面意义上的(literal)常量的例子是如同5、1.23、9.25e-3这样的数,或者如同'This is a string'、"It's a string!"这样的字符串。它们被称作字面意义上的,因为它们具备 字面 的意义——你按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。

2. 数值Numbers

在Python中有4种类型的数——整数、长整数、浮点数和复数。

  • 2是一个整数的例子。
  • 长整数不过是大一些的整数。比如123456789987654321。(注:这种类型在Python3.0中被去除。)
  • 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4

  • (-5+4j)和(2.3-4.6j)是复数的例子。

3. 字符串Strings

字符串是 字符的序列 。字符串基本上就是一组单词。我几乎可以保证你在每个Python程序中都要用到字符串。使用单引号(') 你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即空格和制表符都照原样保留。使用双引号(") 在双引号中的字符串与单引号中的字符串的使用完全相同,例如"What's your name?"。

4. 变量Variants

仅仅使用字面意义上的常量很快就会引发烦恼——我们需要一种既可以储存信息 又可以对它们进行操作的方法。这是为什么要引入 变量 。变量就是我们想要的东西——它们的值可以变化,即你可以使用变量存储任何东西。变量只是你的计算机中存储信息的一部分内存。与字面意义上的常量不同,你需要一些能够访问这些变量的方法,因此你给变量名字。

5. 标识符的命名

变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,你要遵循这些规则:

  • 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。
  • 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
  • 标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。
  • 有效 标识符名称的例子有i__my_namename_23a1b2_c3

  • 无效 标识符名称的例子有2things、this is spaced out和my-name。

6. 数据类型

变量可以处理不同类型的值,称为数据类型。基本的类型是数和字符串,我们已经讨论过它们了。在后面的章节里面,我们会研究怎么用类创造我们自己的类型。

使用内置函数type可以获取常量或者变量的类型,比如type(123.456)。

7. 对象Objects

记住,Python把在程序中用到的任何东西都称为 对象 。这是从广义上说的。因此我们不会说“某某 东西 ”,我们说“某个 对象 ”。

就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python是极其完全地面向对象的。

我们将看一下如何使用变量和字面意义上的常量。

   1 i = 5
   2 print i
   3 i = i + 1
   4 print i
   5 
   6 s = '''This is a multi-line string.
   7 This is the second line.'''
   8 print s

输出

5
6
This is a multi-line string.
This is the second line.

下面来说明一下这个程序如何工作。首先我们使用赋值运算符(=)把一个字面意义上的常数5赋给变量i。这一行称为一个语句。语句声明需要做某件事情,在这个地方我们把变量名i与值5连接在一起。接下来,我们用print语句打印i的值,就是把变量的值打印在屏幕上。

然后我们对i中存储的值加1,再把它存回i。我们打印它时,得到期望的值6。

类似地,我们把一个字面意义上的字符串赋给变量s然后打印它。

8. 语句与行

默认地,Python希望每行都只使用一个语句,这样使得代码更加易读。

如果你想要在一行中使用多于一个语句,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个语句的结束。例如:

i = 5
print i

与下面这个相同:

i = 5;
print i;

同样也可以写成:

i = 5; print i;

甚至可以写成:

i = 5; print i

然而,我强烈建议你坚持每行只写一个语句。仅仅当一个语句太长的时候,在多于一行中写一个语句。这些都是为了尽可能避免使用分号,从而让代码更加易读。事实上,我 从来没有 在Python程序中使用过或看到过分号。

下面是一个在多行中写一个语句的例子。它被称为明确的行连接。

s = 'This is a string. \
This continues the string.'
print s

它的输出:

This is a string. This continues the string.

类似地,

print \
i

与如下写法效果相同:

print i

有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在语句中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。

9. 缩进

空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。

这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。

你需要记住的一样东西是错误的缩进会引发错误。例如:

i = 5
 print 'Value is', i # Error! Notice a single space at the start of the line
print 'I repeat, the value is', i

当你运行这个程序的时候,你会得到下面的错误:

  File "whitespace.py", line 4
    print 'Value is', i # Error! Notice a single space at the start of the line
    ^
SyntaxError: invalid syntax

注意,在第二行的行首有一个空格。Python指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。

如何缩进:不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用四个空格 。

10. 运算符Operators

你编写的大多数语句(逻辑行)都包含表达式。一个简单的表达式例子如2 + 3。一个表达式可以分解为运算符和操作数。

运算符 的功能是完成某件事,它们由如+这样的符号或者其他特定的关键字表示。运算符需要数据来进行运算,这样的数据被称为 操作数 。在这个例子中,2和3是操作数。

11. 表达式Expressions

length = 5
breadth = 2
area = length * breadth
print 'Area is', area
print 'Perimeter is', 2 * (length + breadth)

输出

Area is 10
Perimeter is 14

矩形的长度与宽度存储在以它们命名的变量中。我们借助表达式使用它们计算矩形的面积和边长。我们表达式length * breadth的结果存储在变量area中,然后用print语句打印。在另一个打印语句中,我们直接使用表达式2 * (length + breadth)的值。

另外,注意Python如何打印“漂亮的”输出。尽管我们没有在'Area is'和变量area之间指定空格,Python自动在那里放了一个空格,这样我们就可以得到一个清晰漂亮的输出,而程序也变得更加易读(因为我们不需要担心输出之间的空格问题)。这是Python如何使程序员的生活变得更加轻松的一个例子。

Python语言的基本概念 (2008-07-01 06:23:22由czk编辑)

ch3n2k.com | Copyright (c) 2004-2020 czk.