进击:连申明都不需要的python变量

精华 发表在    小白学python 07-28 20:50:54

1 2074 2

变量和简单数据类型


2.1 运行hello_world.py时发生的情况

运行hello_world.py时,Python都做了些什么呢?下面来深入研究一下。实际上,即便是运行简单的程序,Python所做的工作也相当多:

hello_world.py

print("Hello Python world!")
Hello Python world!

编写程序时,编辑器会以各种方式突出程序的不同部分。例如,它知道print是一个函数的名称,因此将其显示为蓝色;它知道“Hello Python world!”不是Python代码,因此将其显示为橙色。这种功能称为语法突出,在你刚开始编写程序时很有帮助。

2.2 变量

下面来尝试在hello_world.py中使用一个变量。在这个文件开头添加一行代码,并对第2行代码进行修改,如下所示:

message = "Hello Python world!"
print(message)
Hello Python world!

添加变量导致Python解释器需要做更多工作。处理第1行代码时,它将文本“Hello Python world!”与变量message关联起来;而处理第2行代码时,它将与变量message关联的值打印到屏幕。

下面来进一步扩展这个程序:修改hello_world.py,使其再打印一条消息。为此,在hello_world.py中添加一个空行,再添加下面两行代码:

message = "Hello Python world!"
print(message)

message = "Hello Python Crash Course world!"
print(message)
Hello Python world!
Hello Python Crash Course world!

2.2.1 变量的命名和使用

在Python中使用变量时,需要遵守一些规则和指南。违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解。请务必牢记下述有关变量的规则。

  • 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量命名为message_1,但不能将其命名为1_message。
  • 变量名不能包含空格,但可使用下划线来分隔其中的单词。例如,变量名greeting_message可行,但变量名greeting message会引发错误。
  • 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词,如print(请参见附录A.4)。
  • 变量名应既简短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
  • 慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。

要创建良好的变量名,需要经过一定的实践,在程序复杂而有趣时尤其如此。随着你编写的程序越来越多,并开始阅读别人编写的代码,将越来越善于创建有意义的变量名。

注意 就目前而言,应使用小写的Python变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母是个不错的主意。

2.2.2 使用变量时避免命名错误

程序员都会犯错,而且大多数程序员每天都会犯错。虽然优秀的程序员也会犯错,但他们也知道如何高效地消除错误。下面来看一种你可能会犯的错误,并学习如何消除它。

我们将有意地编写一些引发错误的代码。请输入下面的代码,包括其中以粗体显示但拼写不正确的单词mesage:

message = "Hello Python Crash Course reader!"
print(mesage)
  Traceback (most recent call last):
❶   File "hello_world.py", line 2, in 
❷     print(mesage)
❸ NameError: name 'mesage' is not defined

在这个示例中,第2行的变量名message中遗漏了字母s。Python解释器不会对代码做拼写检查,但要求变量名的拼写一致。例如,如果在代码的另一个地方也将message错误地拼写成了mesage,结果将如何呢?

mesage = "Hello Python Crash Course reader!"
print(mesage)
Hello Python Crash Course reader!

很多编程错误都很简单,只是在程序的某一行输错了一个字符。为找出这种错误而花费很长时间的大有人在。很多程序员天资聪颖、经验丰富,却为找出这种细微的错误花费数小时。你可能觉得这很好笑,但别忘了,在你的编程生涯中,经常会有同样的遭遇。

注意 要理解新的编程概念,最佳的方式是尝试在程序中使用它们。如果你在做本书的练习时陷入了困境,请尝试做点其他的事情。如果这样做后依然无法摆脱困境,请复习相关内容。如果这样做后情况依然如故,请参阅附录C的建议。

2.3 字符串

大多数程序都定义并收集某种数据,然后使用它们来做些有意义的事情。鉴于此,对数据进行分类大有裨益。我们将介绍的第一种数据类型是字符串。字符串虽然看似简单,但能够以很多不同的方式使用它们。

字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:

"This is a string."
'This is also a string.'
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."

2.3.1 使用方法修改字符串的大小写

对于字符串,可执行的最简单的操作之一是修改其中的单词的大小写。请看下面的代码,并尝试判断其作用:

name.py

name = "ada lovelace"
print(name.title())
Ada Lovelace

title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序将值Ada、ADA和ada视为同一个名字,并将它们都显示为Ada。

还有其他几个很有用的大小写处理方法。例如,要将字符串改为全部大写或全部小写,可以像下面这样做:

name = "Ada Lovelace"
print(name.upper())
print(name.lower())
ADA LOVELACE
ada lovelace

2.3.2 合并(拼接)字符串

在很多情况下,都需要合并字符串。例如,你可能想将姓和名存储在不同的变量中,等要显示姓名时再将它们合而为一:

  first_name = "ada"
  last_name = "lovelace"
❶ full_name = first_name + " " + last_name

  print(full_name)
ada lovelace
   first_name = "ada"
   last_name = "lovelace"
   full_name = first_name + " " + last_name

❶ print("Hello, " + full_name.title() + "!")
Hello, Ada Lovelace!
  first_name = "ada"
  last_name = "lovelace"
  full_name = first_name + " " + last_name

❶ message = "Hello, " + full_name.title() + "!"
❷ print(message)

2.3.3 使用制表符或换行符来添加空白

在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。你可使用空白来组织输出,以使其更易读。

要在字符串中添加制表符,可使用字符组合\t,如下述代码的❶处所示:

  >>> print("Python")
  Python
❶ >>> print("\tPython")
      Python
>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
    Python
    C
    JavaScript

2.3.4 删除空白

在程序中,额外的空白可能令人迷惑。对程序员来说,'python'和'python '看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。Python能够发现'python '中额外的空白,并认为它是有意义的——除非你告诉它不是这样的。

空白很重要,因为你经常需要比较两个字符串是否相同。例如,一个重要的示例是,在用户登录网站时检查其用户名。但在一些简单得多的情形下,额外的空格也可能令人迷惑。所幸在Python中,删除用户输入的数据中的多余的空白易如反掌。

Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip()。

❶ >>> favorite_language = 'python '
❷ >>> favorite_language
  'python '
❸ >>> favorite_language.rstrip()
  'python'
❹ >>> favorite_language
  'python '

要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中:

  >>> favorite_language = 'python '
❶ >>> favorite_language = favorite_language.rstrip()
  >>> favorite_language
  'python'

你还可以剔除字符串开头的空白,或同时剔除字符串两端的空白。为此,可分别使用方法lstrip()和strip():

❹ >>> favorite_language = ' python '
❷ >>> favorite_language.rstrip()
  ' python'
❸ >>> favorite_language.lstrip()
  'python '
❹ >>> favorite_language.strip()
  'python'

2.3.5 使用字符串时避免语法错误

语法错误是一种时不时会遇到的错误。程序中包含非法的Python代码时,就会导致语法错误。例如,在用单引号括起的字符串中,如果包含撇号,就将导致错误。这是因为这会导致Python将第一个单引号和撇号之间的内容视为一个字符串,进而将余下的文本视为Python代码,从而引发错误。

下面演示了如何正确地使用单引号和双引号。请将该程序保存为apostrophe.py,再运行它:

apostrophe.py

message = "One of Python's strengths is its diverse community."
print(message)
One of Python's strengths is its diverse community.
message = 'One of Python's strengths is its diverse community.'
print(message)
  File "apostrophe.py", line 1
    message = 'One of Python's strengths is its diverse community.'
                            ^❶
SyntaxError: invalid syntax
注意 编写程序时,编辑器的语法突出功能可帮助你快速找出某些语法错误。看到Python代码以普通句子的颜色显示,或者普通句子以Python代码的颜色显示时,就可能意味着文件中存在引号不匹配的情况。

2.3.6 Python 2中的print语句

在Python 2中,print语句的语法稍有不同:

>>> python2.7
>>> print "Hello Python 2.7 world!"
Hello Python 2.7 world!

2.4 数字

在编程中,经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息等。Python根据数字的用法以不同的方式处理它们。鉴于整数使用起来最简单,下面就先来看看Python是如何管理它们的。

2.4.1 整数

在Python中,可对整数执行加(+)减(-)乘(*)除(/)运算。

>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5
>>> 3 ** 2
9
>>> 3 ** 3
27
>>> 10 ** 6
1000000
>>> 2 + 3*4
14
>>> (2 + 3) * 4
20

2.4.2 浮点数

Python将带小数点的数字都称为浮点数。大多数编程语言都使用了这个术语,它指出了这样一个事实:小数点可出现在数字的任何位置。每种编程语言都须细心设计,以妥善地处理浮点数,确保不管小数点出现在什么位置,数字的行为都是正常的。

从很大程度上说,使用浮点数时都无需考虑其行为。你只需输入要使用的数字,Python通常都会按你期望的方式处理它们:

>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2
0.4
>>> 2 * 0.1
0.2
>>> 2 * 0.2
0.4
>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004

2.4.3 使用函数str()避免类型错误

你经常需要在消息中使用变量的值。例如,假设你要祝人生日快乐,可能会编写类似于下面的代码:

birthday.py

age = 23
message = "Happy " + age + "rd Birthday!"

print(message)
  Traceback (most recent call last):
    File "birthday.py", line 2, in 
      message = "Happy " + age + "rd Birthday!"
❶ TypeError: Can't convert 'int' object to str implicitly
age = 23
message = "Happy " + str(age) + "rd Birthday!"

print(message)
Happy 23rd Birthday!

2.4.4 Python 2中的整数

在Python 2中,将两个整数相除得到的结果稍有不同:

>>> python2.7
>>> 3 / 2
1

在Python 2中,若要避免这种情况,务必确保至少有一个操作数为浮点数,这样结果也将为浮点数:

>>> 3 / 2
1
>>> 3.0 / 2
1.5
>>> 3 / 2.0
1.5
>>> 3.0 / 2.0
1.5

2.5 注释

在大多数编程语言中,注释都是一项很有用的功能。本书前面编写的程序中都只包含Python代码,但随着程序越来越大、越来越复杂,就应在其中添加说明,对你解决问题的方法进行大致的阐述。注释让你能够使用自然语言在程序中添加说明。

2.5.1 如何编写注释

在Python中,注释用井号(#)标识。井号后面的内容都会被Python解释器忽略,如下所示:

comment.py

# 向大家问好
print("Hello Python people!")
Hello Python people!

编写注释的主要目的是阐述代码要做什么,以及是如何做的。在开发项目期间,你对各个部分如何协同工作了如指掌,但过段时间后,有些细节你可能不记得了。当然,你总是可以通过研究代码来确定各个部分的工作原理,但通过编写注释,以清晰的自然语言对解决方案进行概述,可节省很多时间。

要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。当前,大多数软件都是合作编写的,编写者可能是同一家公司的多名员工,也可能是众多致力于同一个开源项目的人员。训练有素的程序员都希望代码中包含注释,因此你最好从现在开始就在程序中添加描述性注释。作为新手,最值得养成的习惯之一是,在代码中编写清晰、简洁的注释。

如果不确定是否要编写注释,就问问自己,找到合理的解决方案前,是否考虑了多个解决方案。如果答案是肯定的,就编写注释对你的解决方案进行说明吧。相比回过头去再添加注释,删除多余的注释要容易得多。从现在开始,本书的示例都将使用注释来阐述代码的工作原理。


登录或注册后发布评论