基础

只是打印“Hello World”是不够的,是吗?你想要做的不仅仅是这些,你想带一些输入,操纵它,得到些输出。在Python中,我们使用常量和变量可以实现这些。在这一章,我们还将学习一些其他的概念。

注释

_注释_是#符号右边的任何文字,它对读程序的人有很大用处。

例如:

print('hello world') # 注意:print是一个函数

或者:

# 注意:print是一个函数
print('Hello World')

在你的程序中,你尽可能使用有用的注释:

  • 解释设想
  • 解释重要决策
  • 解释重要细节
  • 解释你在试图解决的问题
  • 解释程序中你在努力克服的问题,等等。

代码告诉你怎样做,注释告诉你这样做的原因。

这对你的程序的读者是有用的,他们可以很容易地理解程序做什么。记住,六个月后这个人可以是你自己!

字面常量

字面常量的一个例子是一个数字就像51.23,或一个字符串像“这是一个字符串”或“它一个字符串!”。它被称为字面,因为它是字面的——你使用它的字面值。数字2总是代表本身并没有什么其他的——它是一个常数,因为它的值是不能改变的,因此,所有这些被称为字面常量。

数字

数字主要有两种类型--整型和浮点数。

2是整数的一个例子,它只是一个完整的数。

浮点数(或简称为浮点)的例子有3.2352.3E-4。符号E表示10的次方。在这种情况下,52.3E-4的意思是52.3的-4次方。

有经验的程序要注意: Python中没有单独的long(长)整型。int(整型)可以是任意大小的整数。

字符串

字符串是字符的一个序列,字符串通常只是一串单词。

在你写的每一个Python程序中都要使用字符串,因此要注意以下部分:

单引号

你可以使用单引号例如'Quote me on this'指定字符串。所有的空白,例如空格和制表符都按原样保留。

双引号

在双引号中的字符串和在单引号中的字符串工作起来完全一样。例如"What's your name?"

三重引号

您可以使用三重引号-("""或''')指定多行字符串。在三重引号中您可以自由使用单引号和双引号。例如:

'''This is a multi-line string. This is the first line.
This is the second line.
"What's your name?," I asked.
He said "Bond, James Bond."
'''

字符串是不可改变的

这意味着,一旦您已经创建了一个字符串,你就不能改变它。虽然这看起来似乎是一件坏事,但它真不是(坏事)。在我们后面看到的各种程序中,将会明白这不是一个限制。

C/C++程序员要注意: 在Python中没有单独的“char”(字符型)数据。这里没有真正的需要它,我相信你不会想念它。

Perl/PHP程序员要注意: 记住,单引号字符串和双引号字符串是相同的——他们不以任何方式不同。

格式方法

有时,我们可能想要从其它信息构建字符串。这就是“format()”方法有用之处。

保存下面几行到文件"str_format.py"中:

age = 20
name = 'Swaroop'

print('{0} was {1} years old when he wrote this book'.format(name, age))
print('Why is {0} playing with that python?'.format(name))

输出结果为:

python str_format.py
Swaroop was 20 years old when he wrote this book
Why is Swaroop playing with that python?

它是如何工作的:

一个字符串可以使用特定的格式,随后调用format方法,用format方法替代那些使用适当参数的格式。

观察使用第一处,我们使用“{0}”对应于变量‘name’,这是format(格式)方法的第一个参数。类似的,第二个格式是“{1}”对应的“age”,这是格式方法的第二个参数。注意,Python从0开始计数,这意味着第一位置的索引是0,第二个位置的索引是1,等等。

注意,我们可以使用字符串的连接

name + 'is' + str(age) + 'years old'

实现同样的目的,但这非常讨厌、容易出错。第二,在这种情况下,通过format方法自动转换为字符串,而不是显式地转换为需要的字符串。第三,当使用的format 方法,我们可以改变消息,而无需处理使用的变量,反之亦然。

还要注意,这些数字(索引)都是可选的,所以你也可以写成:

age = 20
name = 'Swaroop'

print('{} was {} years old when he wrote this book'.format(name, age))
print('Why is {} playing with that python?'.format(name))

这将给与前面的程序相同的输出。

Python在format方法中做的是,用每个参数值替代规格的地方。这里有更详细的规格,如:

# decimal (.) precision of 3 for float '0.333'
print('{0:.3f}'.format(1.0/3))
# fill with underscores (_) with the text centered
# (^) to 11 width '___hello___'
print('{0:_^11}'.format('hello'))
# keyword-based 'Swaroop wrote A Byte of Python'
print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))

输出为:

0.333
___hello___
Swaroop wrote A Byte of Python

既然我们正在讨论格式化,大家应该也已经注意到了:print函数每次都会在输出的最后增加一个回车,这保证了我们重复调用print函数每次都能输出在不同的行。如果想要去掉这个回车,可以给print函数一个end参数并设置为空即可,例如:

print('a', end='')
print('b', end='')

输出是:

ab

或者你也可以给end参数指定为空格:

print('a', end=' ')
print('b', end=' ')
print('c')

输出为:

a b c

转义字符

假设你想要一个带单引号 (')的字符串,你会怎么写呢?例如你想输出"What's your name?"。 你不能写成'What's your name?', 因为python会搞不清字符串是从哪开始又是从哪结束。所以你需要告诉python字符串中间的单引号并不是字符串的结束标志。 利用_转义字符_可以做到这点。 将单引号替换成 /' - 注意反斜杠,这样字符串就变成'What/'s your name?'了.

另一个办法是使用双引号"What's your name?"。 不过当你需要双引号的时候和单引号的情况类似,必须加上反斜杠 /", 而反斜杠也一样必须表示成//

如果你需要一个双行字符串呢? 一个办法是使用前面提到的三引号或者使用换行的转义字符\n开始新的一行,例如:

'This is the first line\nThis is the second line'

还有一个有用的转义字符\t表示tab, 转义字符太多了我只说了常用的。

另一个值得注意的地方是在一个字符串末尾的反斜杠表示这个字符串将被合并到下一行, 例如:

"This is the first sentence. \
This is the second sentence."

上面的字符串等价于

"This is the first sentence. This is the second sentence."

原始字符串

如果你不希望python对字符串进行特别处理, 不希望使用转义字符, 可以为字符串加上前缀r或R,这样的字符串就是原始字符串。例如:

r"Newlines are indicated by \n"

正则表达式用户请注意

永远使用原始字符串编写正则表达式, 否则会需要大量的反斜杠, 例如反向引用可以表示为'\\1'r'\1'.

变量

仅仅使用字面常量会很快变得无聊——我们需要某种方式存储任何信息,同样操作它们。这就要引入_变量_。变量是它的名字所指示的东西——他们的值会有所不同。例如,你可以用变量存储任何值。变量是你电脑中存储信息的内存的一部分。不像字面常量,您需要某种方法来访问这些变量,因此你要给出他们的名字。

标识符命名

变量是标识符的一个示例。_标识符_是用来识别一些东西的名字。这里有一些你必须遵循的标识符命名规则:

  • 标识符的第一个字符必须是字母表中的一个字母(大写或小写的ASCII或Unicode字符)或下划线(_)。
  • 标识符名称的其余部分可以包含字母(大写或小写的ASCII或Unicode字符)、下划线(_)或数字(0 - 9)。
  • 标识符的名称都是区分大小写的。例如,mynamemyName相同。注意前者中n小写和后者中N大写。
  • 有效的标识符名称的例子有:i,myname,name23无效的标识符名字的例子有:2things,this is spaced out,my-name>a1b2_c3

数据类型

变量可以保存不同的被称为数据类型的数值。基本类型是数字和字符串,我们已经讨论了。在后面的章节中,我们将看到如何使用类创建自己的类型。

对象

记住,Python把程序中使用的任何东西作为一个对象。在常识中这意味着,我们说‘对象’,而不是说‘一些东西’,

面向对象编程的用户要注意: 一切东西都是对象,包括数字、字符串和函数,在这个意义上讲,Python是坚定的面向对象的。

现在,我们将看到如何使用变量以及字面常量。保存下面的示例,运行这个程序。

怎样写Python程序

从此以后,保存和运行一个Python程序的标准过程如下:

  1. 打开选择的编辑器,例如VS Code。
  2. 输入例子中给出的程序代码。
  3. 用提到的文件名保存为文件。
  4. 在命令行使用python program.py命令运行程序。

例如: 使用变量和常量

Filename : var.py

# Filename : var.py
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.

它是如何工作的

下面介绍这个程序如何工作的。首先,我们使用赋值运算符(=)为变量i指定了字面常量值5,这一行叫做一个声明,因为它指出应该做一些事情,在这个例子中,我们将名为i的变量与值5相联系。接下来,我们使用print函数打印i的值,不出所料,恰恰打印变量的值到屏幕上。

然后,我们给存储在变量i中的值加1后,再存回到i中。然后,我们把它打印出来,我我们想的一样,我们得到值6

同样,我们为字符串变量s指定了字面常量字符串,然后打印它。

静态语言程序员应注意 变量的使用只是通过给他们指定一个值。不需要/不使用声明或数据类型定义。

逻辑行与物理行

物理行是当你写程序时_看_到的一行。逻辑行是_Python 看到_的一个单独语句。Python默认一个_物理行_为一个_逻辑行_。

一个逻辑行是一个语句,像print('Hello World')--如果它本身在一行上(像你在一个编辑器中看到的),那么,它也是一个物理行。

默认情况下,Python鼓励一行写一个语句的用法,这使代码更可读。

如果您想要在一个物理行列举多个逻辑行,那么您必须使用一个表示逻辑行/语句结束的分号;显式地指明。例如:

i = 5
print(i)

i = 5;
print(i);

等效。

同样可写成:

i = 5; print(i);

甚至是

i = 5; print(i)

然而,我强烈建议你坚持在每一个物理行编写一个最大的逻辑行。这就是你永远都不要使用分号。事实上,我从未使用,甚至在python程序中从来没有见过一个分号。

这个观念是很有用的,还有一种情况:如果你有一个长代码行,你可以通过使用反斜杠把它分解为多个物理行。这是被称为显式行连接:

s = '这是一个字符串。 \
这是字符串的继续。'
print(s)

输出结果为:

这是一个字符串。这是字符串的继续。

同样的,

i = \
5

i = 5

相同

有时有一种隐含的假设,您不需要使用一个反斜杠。在这种情况下,逻辑行有一个开始圆括号、开始方括号或开始花括号,但不是一个结束的括号。这被称为隐式连接。当我们在以后的章节--编写程序使用列表时,你可以看到它的作用。

缩进

在Python中的空白是重要的。实际上,在一行开始的空格是重要的。这被称为缩进。在逻辑行开头的前导空白(空格和制表符)用于确定逻辑行的缩进级别,它用于依次确定语句的分组。

这意味着一起的语句必须有相同的缩进。每一个这样的语句组被称为。在后面的章节,我们将看到的块是何等重要的例子。

你应该记住的一件事是,错误的缩进可以产生错误。例如:

i = 5
 print('值是 ', i) # 错误! 注意在行的开头有一个空格
print('重复,值是 ', i)

当运行它时,将会发生下面的错误:

  File "whitespace.py", line 4
    print('Value is ', i) # Error! Notice a single space at the start of the line
    ^
IndentationError: unexpected indent

请注意,这里第二行的开头有一个空格。这个错误表明:Python告诉我们程序的语法是无效的,即程序写的不正确。这意味着,你不能任意开始语句中的新块(当然,除了默认的主块,您一直已经使用的)。您可以使用新块的情况,将在后面的章节详细,如"控制流"。

如何缩进 缩进只使用4个空格,这是Python官方推荐的标准。好的编辑器会为你自动这样做。确保你使用一致的数量的缩进空格,否则你的程序将显示错误。

静态语言程序员应注意 Python为块总是使用缩进,从来不用花括号。运行from __future__ import braces可以了解更多。

小结

现在,我们已经经历了许多细节,我们可以转到更有趣的东西,如控制流语句。一定要熟悉这一章你所读的。


继续阅读操作符和表达式


书籍推荐