一万字全网最全的“Python变量和简单数据类型知识”,干货满满

编程知识 行业动态 更新时间:2024-06-13 00:21:38

第二章:Python变量和简单数据类型

在本章中,你将学习可在Python程序中使用的各种数据,还将学习如何在程序 中使用变量来表示这些数据。

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

#hello world.py
print("Hello Python world!", end=',')
print("Hello Python world!")
输出结果:Hello Python world!,Hello Python world!

运行文件hello_world.py时,末尾的.py指出这是一个Python程序,因此编辑 器将使用Python解释器来运行它。Python解释器读取整个程序,确定其中每个 单词的含义。例如,看到后面跟着圆括号的单词print时,解释器就将圆括号中 的内容打印到屏幕。
编写程序时,编辑器会以各种方式突出程序的不同部分。例如,它知道 print()是一个函数的名称,因此将其显示为某种颜色;它知道"Hello Python world!"不是Python代码,因此将其显示为另一种颜色。这种功能称为 语法高亮,在你刚开始编写程序时很有帮助。

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

# hello_world.py
msg = "Hello Python World!"
print(msg)
输出结果:Hello Python World!

我们添加了一个名为message的变量。每个变量都指向一个值——与该变量 相关联的信息。在这里,指向的值为文本"Hello Python world!"。

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

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

# hello_world.py
msg = "Hello Python World!"
print(msg)
msg = "Hello Python Crash Course World!"
print(msg)
msg = 123456
print(msg)
输出结果:Hello Python World!
         Hello Python Crash Course World!
         123456

现在如果运行这个程序,将看到两行输出. 在程序中可随时修改变量的值,而Python将始终记录变量的最新值。

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

变量名只能包含字母、数字和下划线。
变量名能以字母或下划线打头,但不能以数字打头。例如,可将变量命名为message_1,但不能将其命名为1_message。
变量名不能包含空格,但能使用下划线来分隔其中的单词。例如,变量名 greeting_message可行,但变量名greeting message会引发错误。
不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途 的单词,如print。 变量名应既简短又具有描述性。例如,name比n好,student_name比s_n好, name_length比length_of_persons_name好。
慎用小写字母l和大写字母O,因为它们可能被人错看成数字1和0。
要创建良好的变量名,需要经过一定的实践,在程序复杂而有趣时尤其如 此。随着编写的程序越来越多,并开始阅读别人编写的代码,你将越来越善于创 建有意义的变量名。

注意 就目前而言,应使用小写的Python变量名。虽然在变量名中使用大写 字母不会导致错误,但是大写字母在变量名中有特殊含义,这将在以后文章中讨论。

变量1 = 123
变量2 = 4
print(变量1 * 变量2)
输出结果:492

2.2.2 使用变量时避免命名错误
程序员都会犯错,而且大多数程序员每天都会犯错。虽然优秀的程序员也会 犯错,但他们也知道如何高效地消除错误。下面来看一种你可能犯的错误,并学 习如何消除它。
我们将有意地编写一些引发错误的代码。请输入下面的代码,包括其中拼写 不正确、以粗体显示的单词

msg = "Hello Python Crash Course reader!"
print(msg)
输出结果:File "<ipython-input-9-df2d3e7d6932>", line 2
    print(msg)
             ^
SyntaxError: invalid character in identifier

在这里,解释器发现了一个名称错误,并报告打印的变量mesg未定义:Python无法识别你提供的变量名。名称错误通常意味着两种情况:要么是使用变量前忘记给它赋值,要么是输入变量名时拼写不正确。

2.2.3 变量是标签
变量常被描述为可用于存储值的盒子。在你刚接触变量时,这种定义可能很 有帮助,但它并没有准确描述Python内部表示变量的方式。一种好得多的定义 是,变量是可以赋给值的标签,也可以说变量指向特定的值。

刚学习编程时,这种差别可能意义不大,但越早知道越好。你迟早会遇到变 量的行为出乎意料的情形,此时如果对变量的工作原理有准确的认识,将有助于 搞清楚代码是如何运行的。

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

!!!动手试一试
在完成下面的每个练习时,都编写一个独立的程序。保存每个程序时,使用 符合标准Python约定的文件名:使用小写字母和下划线,如simple_message.py和 simple_messages.py。
练习2-1:简单消息
将一条消息赋给变量,并将其打印出来。

练习2-2:多条简单消息
将一条消息赋给变量,并将其打印出来;再将变量 的值修改为一条新消息,并将其打印出来。

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

字符串就是一系列字符。

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

"This is a string."
'This is also 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."
print("你说:\"你好\"")
输出结果:你说:"你好"

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

#name.py
name = 'ada lovelace'
print(name.title())
输出结果:Ada Lovelace

在这个示例中,变量name指向小写的字符串"ada lovelace"。

在函数调用 print()中,方法title()出现在这个变量的后面。方法是Python可对数据执行的操作。在name.title()中,name后面的句点(.)让Python对变量name执行方法title()指定的操作。每个方法后面都跟着一对圆括号,这是因为方法通常 需要额外的信息来完成其工作。这种信息是在圆括号内提供的。函数title()不需要额外的信息,因此它后面的圆括号是空的。

方法title()以首字母大写的方式显示每个单词,即将每个单词的首字母都 改为大写。这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序 将值Ada、ADA和ada视为同一个名字,并将它们都显示为Ada。
还有其他几个很有用的大小写处理方法。例如,要将字符串改为全部大写或 全部小写,可以像下面这样做:

#name.py
name = 'ada lovelace'
print(name.upper())
print(name)
print(name.lower())
输出结果:ADA LOVELACE
         ada lovelace
         ada lovelace

存储数据时,方法lower()很有用。很多时候,你无法依靠用户来提供正确 的大小写,因此需要将字符串先转换为小写,再存储它们。以后需要显示这些信 息时,再将其转换为最合适的大小写方式。

2.3.2 在字符串中使用变量¶
在有些情况下,你可能想在字符串中使用变量的值。例如,你可能想使用两 个变量分别表示名和姓,然后合并这两个值以显示姓名:

#full_name.py
first_name = "ada"
last_name = "lovelace"
age = 12
full_name = f"{first_name} {last_name} age is {age}"
print(full_name)
输出结果:ada lovelace age is 12

要在字符串中插入变量的值,可在前引号前加上字母f, 再将要插入 的变量放在花括号内。这样,当Python显示字符串时,将把每个变量都替换为其值。

这种字符串名为f字符串。f是format(设置格式)的简写,因为Python通过 把花括号内的变量替换为其值来设置字符串的格式。
使用f字符串可完成很多任务,如利用与变量关联的信息来创建完整的消息, 如下所示:

first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
print(f"Hello, {full_name.title()}!")
输出结果:Hello, Ada Lovelace!

在这里,一个问候用户的句子中使用了完整的姓名。这些代码显示一条格式良好的简单问候语.

还可以使用f字符串来创建消息,再把整条消息赋给变量:

first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
msg = f"Hello, {full_name.title()}!"
print(msg)
输出结果:Hello, Ada Lovelace!

注意

f字符串是Python 3.6引入的。如果你使用的是Python 3.5或更早的版本,需要使用format()方法,而非这种f语法。要使用方法format(),可在圆 括号内列出要在字符串中使用的变量。对于每个变量,都通过一对花括号来引 用。这样将按顺序将这些花括号替换为圆括号内列出的变量的值,如下所示:

full_name = "{} {}".format(first_name, last_name)
print(full_name.title())
输出结果:Ada Lovelace

2.3.3 使用制表符或换行符来添加空白
在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。你可以使 用空白来组织输出,让用户阅读起来更容易。 要在字符串中添加制表符,可使用字符组合\t,如下述代码的 处所示:

print('Python')
print('\tPython')
print('Languages:\nPython\nC\nJavaScript')
输出结果:Python
	Python
Languages:
Python
C
JavaScript

还可在同一个字符串中同时包含制表符和换行符。字符串"\n\t"让Python换 到下一行,并在下一行开头添加一个制表符。

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

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

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

favorite_language = 'python '
print(favorite_language)
print(favorite_language.rstrip())
输出结果:python 
        python

第1行输出的字符串末尾有多余的空白;

第2行输出的字符串末尾没有多余的空白;rstrip方法会删除字符串右侧多余的空格

lstrip和strip
lstrip删除左侧多余的空格, strip删除两个多余的空格

favorite_language = ' python '
print(favorite_language)
print(favorite_language.lstrip())
print(favorite_language.strip())
输出结果:python 
         python 
         python

lstrip, rstrip和strip还可以删除多余的指定符号(甚至字符串)如

favorite_language = '**python**'
print(favorite_language)
print(favorite_language.lstrip('*'))
print(favorite_language.rstrip('*'))
print(favorite_language.strip('*'))
favorite_language = '*/python*/'
print(favorite_language)
print(favorite_language.lstrip('*/'))
print(favorite_language.rstrip('*/'))
print(favorite_language.strip('*/'))
输出结果:**python**
python**
**python
python
*/python*/
python*/
*/python
python

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

#apostrophe.py
message = "One of Python's strengths is its diverse community."
print(message)
输出结果:One of Python's strengths is its diverse community.

然而,如果使用单引号,Python将无法正确地确定字符串的结束位置

#apostrophe.py
message = 'One of Python's strengths is its diverse community.'
print(message)
输出结果:File "<ipython-input-31-149e29f4e40c>", line 2
    message = 'One of Python's strengths is its diverse community.'
                             ^
SyntaxError: invalid syntax

这种语法错误表 明,在解释器看来,其中的有些内容不是有效的Python代码。错误的原因各种各 样,我将指出一些常见的原因。学习编写Python代码时,你可能会经常遇到语法 错误。语法错误也是最不具体的错误类型,因此可能难以找出并修复。受困于非 常棘手的错误时,请参阅附录C提供的建议。

注意 编写程序时,编辑器的语法高亮功能可帮助你快速找出某些语法错 误。看到Python代码以普通句子的颜色显示,或者普通句子以Python代码的颜色 显示时,就可能意味着文件中存在引号不匹配的情况。

2.3.6 字符串的运算
加法 串联字符串

数乘 重复字符串若干次

str1 = "Hello"
str2 = "World"
print(str1 + str2)
print(str1 * 2)
输出结果:HelloWorld
         HelloHello

join方法 将列表连接

print(','.join([str1, str2]))
print(' '.join([str1, str2]))
输出结果:Hello,World
         HelloHello

动手试一试

完成下面的每个练习时,都编写一个独立的程序,并将其保存为名称类似于 name_cases.py的文件。

练习2-3:个性化消息

用变量表示一个人的名字,并向其显示一条消息。显示的消息应非常简单,下面是一个例子。
Hello Eric, would you like to learn some Python today?

练习2-4:调整名字的大小写
用变量表示一个人的名字,再以小写、大写和 首字母大写的方式显示这个人名。

练习2-5:名言

找一句你钦佩的名人说的名言,将其姓名和名言打印出来。 输出应类似于下面这样(包括引号)。
Albert Einstein once said, “A person who never made a mistake never tried anything new.”

练习2-6:名言2
重复练习2-5,但用变量famous_person表示名人的姓 名,再创建要显示的消息并将其赋给变量message,然后打印这条消息。

练习2-7:剔除人名中的空白

用变量表示一个人的名字,并在其开头和末尾 都包含一些空白字符。务必至少使用字符组合"\t"和"\n"各一次。
打印这个人名,显示其开头和末尾的空白。然后,分别使用剔除函数 lstrip()、rstrip()和strip()对人名进行处理,并将结果打印出来。

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

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

print(2 + 3, 3 - 2, 2 * 3, 3 / 2)
输出结果:5 1 6 1.5

Python还支持运算次序,因此可在同一个表达式中使用多种运算。还可以使 用圆括号来修改运算次序,让Python按你指定的次序执行运算,如下所示

2 + 3 * 4 / (1 + 1)
输出结果:8.0

整数不可以0开头
0b二进制; 0x十六进制; 0o八进制

print(0b10101010, 0xFF01E4, 0o67261)
输出结果:170 16712164 28337
print(0b2)
输出结果:print(0b2)
  File "<ipython-input-38-c2c6337c223d>", line 1
    print(0b2)
           ^
SyntaxError: invalid token
print(0xu)
 输出结果:File "<ipython-input-39-2e4741a622e2>", line 1
    print(0xu)
           ^
SyntaxError: invalid token
print(0o8)
输出结果:
  File "<ipython-input-40-398a23b00ed4>", line 1
    print(0o8)
           ^
SyntaxError: invalid token

print(0823892)
输出结果:File "<ipython-input-41-53a28a8474e3>", line 1
    print(0823892)
                ^
SyntaxError: invalid token

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

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

print(0.1 + 0.1, 2 * 0.1, 0.2 + 0.1)
输出结果:0.2 0.2 0.30000000000000004

所有语言都存在这种问题,没有什么可担心的。Python会尽力找到一种精确 表示结果的方法,但鉴于计算机内部表示数的方式,这在有些情况下很难。就现 在而言,暂时忽略多余的小数位数即可。在第二部分的项目中,你将在需要时学 习处理多余小数位的方式。

2.4.3 整数和浮点数
将任意两个数相除时,结果总是浮点数,即便这两个数都是整数且能整除:

4 / 2
输出结果:2.0

地板除

print(5 / 2)
2
print(5 // 2)
输出结果:2.5
         2

在其他任何运算中,如果一个操作数是整数,另一个操作数是浮点数,结果 也总是浮点数:

print(1 + 2.0, 2 * 3.0, 3.0 ** 2)
输出结果:3.0 6.0 9.0

无论是哪种运算,只要有操作数是浮点数,Python默认得到的总是浮点数, 即便结果原本为整数也是如此。

Python中次幂不是^而是**

2.4.4 数中的下划线
书写很大的数时,可使用下划线将其中的数字分组,使其更清晰易读:

universe_age = 14_000_000_000
2
print(universe_age)
3
print(12_1000_0000)
输出结果:14000000000
         1210000000

这是因为存储这种数时,Python会忽略其中的下划线。将数字分组时,即便 不是将每三位分成一组,也不会影响最终的值。在Python看来,1000与1_000没 什么不同,1_000与10_00也没什么不同。这种表示法适用于整数和浮点数,但 只有Python 3.6和更高的版本支持。

2.4.5 同时给多个变量赋值
可在一行代码中给多个变量赋值,这有助于缩短程序并提高其可读性。这种 做法最常用于将一系列数赋给一组变量。

例如,下面演示了如何将变量x、y和z都初始化为零:

x, y, z = 0, 0, 0
2
print(x, y, z)
输出结果:0 0 0

这样做时,需要用逗号将变量名分开;对于要赋给变量的值,也需同样处 理。Python将按顺序将每个值赋给对应的变量。只要变量和值的个数相同, Python就能正确地将它们关联起来。

多值赋值是同时进行的

比如, 我们要交换两个变量的值, 传统做法为

x, y = 111, 222
2
temp = x
3
x = y
4
y = temp
5
print(x, y)
输出结果:222 111

而利用多值赋值, 只需

x, y = 111, 222
2
x, y = y, x
3
print(x, y)
输出结果:222 111

2.4.6 常量
常量类似于变量,但其值在程序的整个生命周期内保持不变。Python没有内 置的常量类型,但Python程序员会使用全大写来指出应将某个变量视为常量,其 值应始终不变:

MAX_CONNECTIONS = 5000
MAX_CONNECTIONS = 5001
print(MAX_CONNECTIONS)

注意 这里常量是一种约定, 实际上你仍旧可以修改这个常量的值(但不推荐这样做)

动手试一试

练习2-8:数字8
编写四个表达式,分别使用加法、减法、乘法和除法运 算,但结果都是数字8。为使用函数调用print()来显示结果,务必将这些表达式 用圆括号括起来。也就是说,你应该编写四行类似于下面的代码:

print(5+3)

输出应为四行,其中每行都只包含数字8。

练习2-9:最喜欢的数
用一个变量来表示你最喜欢的数,再使用这个变量创 建一条消息,指出你最喜欢的数是什么,然后将这条消息打印出来。


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

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

#comment.py
print("Hello Python people!")
输出结果:Hello Python people!

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

要成为专业程序员或与其他程序员合作,就必须编写有意义的注释。当前, 大多数软件是合作编写的,编写者可能是同一家公司的多名员工,也可能是众多 致力于同一个开源项目的人员。训练有素的程序员都希望代码中包含注释,因此 你最好从现在开始就在程序中添加描述性注释。作为新手,最值得养成的习惯之 一就是在代码中编写清晰、简洁的注释。 如果不确定是否要编写注释,就问问自己:在找到合理的解决方案之前,考 虑了多个解决方案吗?如果答案是肯定的,就编写注释对你的解决方案进行说明 吧。相比回过头去再添加注释,删除多余的注释要容易得多。从现在开始,本书 的示例都将使用注释来阐述代码的工作原理。

动手试一试

练习2-10:添加注释
选择你编写的两个程序,在每个程序中至少添加一条 注释。如果程序太简单,实在没有什么需要说明的,就在程序文件开头加上你的 姓名和当前日期,再用一句话阐述程序的功能。

2.6 Python之禅

import this

executed in 15ms, finished 13:50:39 2021-08-29
美胜于丑。

显式比隐式好。

简单总比复杂好。

复杂总比复杂好。

平的比嵌套的好。

稀疏比密集好。

可读性很重要。

特殊情况不足以违反规则。

虽然实用胜过纯洁。

错误永远不应该悄无声息地过去。

除非明确沉默。

面对模棱两可的情况,拒绝猜测的诱惑。

应该有一个——最好只有一个——显而易见的方法来做到这一点。

虽然这种方式一开始可能并不明显,除非你是荷兰人。

现在总比没有好。

虽然永远都比现在好。

如果实现很难解释,那就不是个好主意。

如果实现很容易解释,这可能是一个好主意。

名称空间是一个非常好的主意——让我们做更多的工作吧!

Python八荣八耻
以动手实践为荣,以只看不练为耻。
以打印日志为荣,以单步跟踪为耻。
以空白分隔为荣,以制表分隔为耻。
以单元测试为荣,以手工测试为耻。
以代码重用为荣,以复制粘贴为耻。
以多态应用为荣,以分支判断为耻。
以Pythonic为荣,以冗余拖沓为耻。
以总结思考为荣,以不求甚解为耻。

2.7 小结
变量
字符串(f字符串, strip, upper, lower, title)
整数(不同进制, 次幂运算**)
浮点数
数中的下划线
多值赋值
常量
八荣八耻(以动手实践为荣)

下一章,第3章 最全Python列表简介

更多推荐

一万字全网最全的“Python变量和简单数据类型知识”,干货满满

本文发布于:2023-03-31 23:29:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/c02250e23d236a62fa8948ecae6c4033.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:干货   最全   变量   万字   数据类型

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!