购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2章
CHAPTER 2
Python语言基础

很多人在学习Python语言时为了图快、贪多,一上来就学网络、多线程、并发、网络爬虫,甚至是深度学习。其实学这些技术都没问题,有旺盛的求知欲总是好的。不过这些技术的基础,却是Python语言中被认为最简单,一看就知道,不看也能猜出个八九不离十的基础知识。有些人认为,基础的内容差不多就行,还是学些炫酷的内容更过瘾。其实学习Python语言就像踮着脚尖够东西,差1mm你也够不着。所以还是老老实实打好Python语言的基础,这样在以后学习Python高级技术的过程中才会游刃有余。

2.1 运行helloworld.py会发生什么情况

代码位置:src/basic/helloworld.py

当运行helloworld.py时,Python会做哪些工作?实际上,即使只有一行代码,Python也要做相当多的工作。代码如下:

     helloworld.py
     print('Hello Python!')

运行这行代码,会看到如下的输出:

     Hello Python!

在运行程序时,文件的扩展名(py)会指出这是一个Python程序,所以会使用Python解析器运行helloworld.py。

尽管输出的结果只是一行字符串,不过这其中的执行过程却相当复杂。Python解析器要弄明白helloworld.py文件里的代码到底干了什么(分析代码)。首先Python解析器要将helloworld.py文件中的代码分成不能再分的单元,如将print("Hello Python")拆成print、(、"、Hello Python、"、)。然后会理解每部分的含义,接下来会将其组合起来,看是否有问题,如果没问题就开始执行了。Python解析器经过一系列复杂的操作后,最后给出结果"Hello Python!"。

当然,在编辑Python代码时,这种分析也是必要的,因为在编辑器中,要对Python代码的不同部分改变颜色,如print、圆括号、双引号、字符串都会显示不同的颜色,这样就会让代码一目了然,有助于更好地阅读代码,这种功能称为语法高亮,这对于初学者尤其重要。

2.2 变量

下面在helloworld.py中定义并初始化一个变量,在这个文件开头添加一行代码,并对第2行代码进行修改,代码如下:

     msg = 'Hello Python!'
     print(msg)

运行这段程序,会看到如下的输出结果:

     Hello Python!

你会发现,输出结果与前面的相同。在这段代码中,定义了一个名为msg的变量,并为这个变量指定了一个值,这个过程称为变量的初始化,这个值就是与该变量关联的信息。如果以后不再为msg变量赋值,那么msg就代表"Hello Python!"。在处理第2行代码时,print函数会将与msg变量关联的值打印到屏幕上。

下面扩展这个程序,修改helloworld.py,让其再打印一行消息。为此,需要在helloworld.py的最后再添加两行代码,为了让代码更清晰,可以在新添加的两行代码前面加一个空行:

     msg = 'Hello Python!'
     print(msg)

     msg = '我爱Python,我爱《Python从菜鸟到高手》!'
     print(msg)

现在运行程序,会看到输出了如下两行消息:

     Hello Python!
     我爱Python,我爱《Python从菜鸟到高手》!

在新添加的两行代码中的第1行重新设置了msg变量的值,所以最后一行代码会将msg变量最新的值打印到屏幕上。因此可以得出一个结论,在Python中可以随时随地修改变量的值,而每次使用变量时,都会获得变量最新的值。

2.2.1 变量的定义和初始化

微课视频

代码位置:src/basic/var.py

由于Python是动态编程语言 ,所以在定义变量时并不需要事先指定变量的数据类型,变量的定义和初始化是同时进行的。Python解析器会根据初始化值的数据类型动态确定变量的类型。例如,下面有4个变量a、b、c、d,分别为这4个变量设置了不同类型的值,最后的4行代码使用type函数分别输出了这4个变量的类型。

     a = 40
     b = True
     c = 30.4
     d = "I love python"

     print("a的数据类型:" ,type(a))
     print("b的数据类型:" ,type(b))
     print("c的数据类型:" ,type(c))
     print("d的数据类型:" ,type(d))

运行这段代码,会输出如下内容:

     a的数据类型: <class 'int'>
     b的数据类型: <class 'bool'>
     c的数据类型: <class 'float'>
     d的数据类型: <class 'str'>

从输出结果可以看出,在为4个变量赋值时,其实变量已经创建和初始化了,同时确定了变量的数据类型。

在Python中,变量的数据类型是随时可以改变的,现在扩展这个程序,在var.py最后添加两行代码:

     a = 40
     b = True
     c = 30.4
     d = "I love python"

     print("a的数据类型:" ,type(a))
     print("b的数据类型:" ,type(b))
     print("c的数据类型:" ,type(c))
     print("d的数据类型:" ,type(d))

     d = 20
     print("d的数据类型:" ,type(d))

运行这段代码,会输出如下内容:

     a的数据类型: <class 'int'>
     b的数据类型: <class 'bool'>
     c的数据类型: <class 'float'>
     d的数据类型: <class 'str'>
     d的数据类型: <class 'int'>

从输出结果可以看出,变量的数据类型从str变成了int,所以验证了Python变量的数据类型是随时可以改变的。

2.2.2 变量的命名

Python中的变量名要遵循一定的规则,如果违反,在运行Python程序时就会引发错误 ,而按照这些规则对变量命名,不仅可以避免发生错误,还可以让程序更容易理解。读者可以参照下面的规则命名Python变量。

· 尽管Python支持Unicode ,理论上可以使用每个国家的语言作为变量名,如中文、日文、韩文等。但强烈建议不要这样做。因为这样做可能会导致乱码,以及非本语种的人无法阅读的窘境。通常的做法是变量名只由英文、数字和下画线组成。如abc、abc_、test_project都是可以被大众接受的变量名。

· 变量名不能以数字开头,只能以英文字母或下画线开头。如4a、20b是错误的变量名,程序会出错。a4、b20、_20是正确的变量名。

· 不能用某些特殊的字符作为变量名,变量名中也不能包含这些字符。如运算符号(+、0、*、/等)、比较符号(>、=、<等)、逻辑符号(&&、||、!等)都不能包含在变量名中。如a=b、a!都是错误的变量名。

· 不能用Python的关键字作为变量名,但变量名中可以包含这些关键字。如if、while、for都是错误的变量名,但ifa、awhile、forxyz是正确的变量名。

· 变量名应该用有意义的名字,除非做简单的验证和测试,否则正式的项目最好不要起像a、b、c、d、name这样的变量名,它们尽管合法,但不容易让人理解。变量名应该与实际表示的数据相关,例如productName、studentSex、phonePrice都是比较好的变量名。

· 统一变量名的命名规范。变量名的命名规范主要有3种:大驼峰、小驼峰、下画线分隔。大驼峰是组成变量名的每个英文单词首字母都大写,如ProductName;小驼峰与大驼峰类似,只是组成变量名的第1个英文单词的首字母小写,其余英文单词的首字母都大写,如productName;下画线分隔是组成变量名的所有英文单词的所有字母都小写,多个英文单词中间用下画线分隔,如product_name。Python用小驼峰和下画线分隔的方式比较多,这些命名规范并没有好坏之分,只要整个项目统一命名规范即可。

· 变量名尽量不要用容易混淆的字符和数字,如1和l, 0和O等,前者是数字1和0,后者是小写字母l和大写字母O。如果不仔细看,是很容易混淆的。尤其是其他人看自己写的程序的情况下更容易弄错,如a1和al,这两个变量在word文档里几乎是一样的,在IDE中有细微的差别,但需要仔细看才可以分辨。

2.2.3 避免弄错变量名

由于Python是动态语言,所以只有在程序运行时才能发现错误,其中一个非常容易发生的错误就是变量名写错了,代码如下:

     message='Hello Python!'
     print(mesage)

很明显,第2行代码将message写成了mesage,中间少了一个字母s。运行这段程序,就会抛出如图2-1所示的异常。

当执行到第2行代码时,Python解析器会尽可能找到mesage变量,但很可惜,没找到,所以Python解析器就会告知有一个错误,并指明错误的具体原因,也就是mesage变量没定义。Python不允许使用一个没定义的变量。

其实读者使用PyCharm开发Python程序,这种变量名写错的情况一般是可以避免的,如果使用了没定义的变量名,PyCharm会在变量名下方显示一个红色的波浪线,就表明该变量未定义,但下面的情况就不会得到任何提示了,除非程序执行到错误行,或自己读代码时发现,否则这个错误将永远隐藏在程序中。例如:

     al = 20
     a1 = "hello world"
     print(a1+ 30)

执行这段代码,会抛出如图2-2所示的异常。

图2-1 由于变量名错误抛出的异常

图2-2 不容易发现的变量名错误

本来第3行是想让al与30相加的,其中al变量的值是20,是一个整数类型。al变量的第2个字符是小写的字母l。而第2行的a1变量是字符串类型,a1的第2个字符是数字1。由于l和1非常像,所以将l写成了1,但在这种情况下,PyCharm是不会给出任何提示的,除非程序运行到第3行,否则是不会抛出任何异常的。

这里先普及一个知识点,在Python中,字符串是不能与数字直接相加的,否则会抛出异常。关于字符串的详细内容在后面的章节会讲解。

其实像前面的这段代码还好,至少程序在执行到第3行时会抛出异常,只要在测试时覆盖到这行代码,就会发现错误,但下面的代码压根就不会抛出异常,这属于100%的逻辑错误。

执行这段代码,输出的是60,但按业务逻辑,期望输出的是50,就是由于将字母l写成了数字1,所以导致了逻辑错误,但可惜的是,al和a1都是整数类型,所以程序是不会抛出任何异常的。这样的错误极难被发现,所以再强调一点,起变量名时尽可能不要用容易混淆的字符或数字,否则这样的错误在所难免。

图2-3 变量与小柜子

2.2.4 如何理解变量

尽管大家到现在为止已经学会了如何定义和使用Python变量,但对于初学者来说,对变量的概念可能还是有些模糊。

其实可以将变量想象成超市中存放物品的一个个的小柜子,如图2-3所示。

变量名相当于每个柜子的号码,变量中的值相当于柜子中存放的物品。变量的数据类型相当于柜子中可以存放物品的种类,如手机、鞋子、帽子、食品等。变量可以存储的值的大小就相当于柜子的容量。如太大的物品是无法放进较小的柜子里的(存储的值超出了变量运行的最大存储空间,如最大存储4字节的变量不能保存8字节的数据)。

按照这个比喻,可以很容易理解Python变量到底是怎么回事,读取变量中的值,就相当于根据柜子的编号找到柜子,并取出柜子中的物品 ,对变量重新赋值,就相当于根据柜子的编号找到柜子,然后向柜子中放入相应的物品。变量可以随时改变数据类型就相当于可以向柜子中放入任何种类的物品。如果不可以改变变量的数据类型,那么就相当于第1次放入物品,柜子就会自动识别物品的种类,以后就只能放这类物品了。

当然,如果从底层来阐述,柜子的编号(变量)其实相当于内存地址,而柜子中的存储空间(变量的值)相当于一段内存存储空间,不过读者在刚开始学习Python时,并不需要对这些细节有过多的了解,只需要学会使用Python变量即可。

2.3 字符串基础

字符串是Python语言中另一个重要的数据类型,在Python语言中,字符串可以使用双引号(")或单引号(')将值括起来。例如,下面都是合法的字符串值。

     s1 = "hello world"
     s2 = 'I love you.'

字符串也同样可以被print函数输出到控制台,这种用法在前面已经多次使用过了。

     print("hello world")

在前面的章节尽管已经多次使用了字符串,但只涉及了字符串的一些简单用法,如定义字符串变量、输出字符串等。本节将介绍字符串的更多用法。

2.3.1 单引号字符串和转义符

微课视频

代码位置:src\basic\quotation_marks.py

字符串可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了起来。

     >>> "Hello World"
     'Hello World'

那么用双引号和单引号括起来的字符串有什么区别?其实没有任何区别。只不过在输出单引号或双引号时方便而已。例如,在Python控制台输入'Let's go!',会抛出如下的错误。

这是因为Python解释器无法判断字符串中间的单引号是正常的字符,还是多余的单引号,所以会抛出语法错误异常。要输出单引号的方法很多,其中之一就是使用双引号将字符串括起来。

     >>> "Let's go!"
     "Let's go!"

现在输出单引号是解决了,但如何输出双引号?其实很简单,只需要用单引号将字符串括起来即可。

     >>> '我们应该在文本框中输入"Python"'
     '我们应该在文本框中输入"Python"'

现在输出单引号和输出双引号都解决了,那么如何同时输出单引号和双引号?对于这种需求,就要使用本节要介绍的另一个知识点:转义符。Python语言中的转义符是反斜杠(\)。转义符的功能是告诉Python解释器反斜杠后面的字符是字符串中的一部分,而不是用于将字符串括起来的单引号或双引号。所以如果字符串中同时包含单引号和双引号,那么转义符是必需的。

在上面这行代码中,单引号和双引号都是用的转义符,其实在这个例子中,由于字符串是由单引号括起来的,所以如果里面包含双引号,是不需要对双引号使用转义符的。

下面的例子演示了Python语言中单引号和双引号的用法,以及转义符在字符串中的应用。

     # 使用单引号的字符串,输出结果:Hello World
     print('Hello World')
     # 使用双引号的字符串,输出结果:Hello World
     print("Hello World")
     #  字符串中包含单引号,输出结果:Let's go!
     print("Let's go!")
     #  字符串中包含双引号,输出结果:"一起走天涯"
     print('"一起走天涯"')
     #  字符串中同时包含单引号和双引号,其中单引号使用了转义符,输出结果:Let's go! "一人我饮酒醉"
     print('Let\'s go! "一人我饮酒醉" ')

2.3.2 拼接字符串

微课视频

代码位置:src/basic/join_string.py

在输出字符串时,有时字符串会很长,在这种情况下,可以将字符串写成多个部分,然后拼接到一起。可以尝试下面的一种写法。

     >>> 'Hello' 'world'
     'Helloworld'

这种写法是将两个字符串挨着写到一起,字符串中间可以有0~ n 个空格。现在看这种方式能否将两个字符串变量的值组合到一起。

可以看到,如果是两个字符串类型的变量紧挨着写在一起,Python解释器就会认为是语法错误,所以这种方式实际上并不是字符串的拼接,只是一种写法而已,而且这种写法必须是两个或多个字符串值写在一起,而且不能出现变量,否则Python解释器就会认为是语法错误。

如果要连接字符串,要用加号(+),也就是字符串的加法运算。

     >>> x = 'Hello '
     >>> x + 'World'
     'Hello World'

2.3.3 保持字符串的原汁原味

微课视频

代码位置:src/basic/str_repr.py

在2.3.1节已经讲过转义符(\)的应用,其实转义符不光能输出单引号和双引号,还能控制字符串的格式,例如,使用"\n"表示换行,如果在字符串中含有"\n",那么"\n"后的所有字符都会被移到下一行。

     >>> print('Hello\nWorld')
     Hello
     World

如果要混合输出数字和字符串,并且换行,可以先用str函数将数字转换为字符串,然后在需要换行的地方加上"\n"。

     >>> print(str(1234) + "\n" + str(4321))
     1234
     4321

不过有时不希望Python解析器转义特殊字符,希望按原始字符串输出,这时需要使用repr函数。

     >>> print(repr("Hello\nWorld"))
     'Hello\nWorld'

使用repr函数输出的字符串,会使用一对单引号括起来。

其实如果只想输出"\n"或其他类似的转义符,也可以使用两个反斜杠输出"\",这样"\"后面的n就会被认为是普通的字符。

     >>> print("Hello\\nWorld")
     Hello\nWorld

除了前面介绍的repr和转义符外,在字符串前面加r也可以原样输出字符串。

     >>> print(r"Hello\nWorld")
     Hello\nWorld

现在总结一下,让一个字符串按原始内容输出(不进行转义),有如下3种方法。

· repr函数。

· 转义符(\)。

· 在字符串前面加r。

下面的例子完整地演示了str和repr函数的用法。

这段代码在使用repr函数输出的"<hello\nworld>"字符串被一对单引号括了起来,而且字符串长度是16。而使用str函数输出同样的字符串,长度是13。在str函数输出的字符串中,"\n"算一个字符,长度为1,而用repr函数输出的字符串中,"\n"是两个字符,长度为2。再加上一对单引号,所以长度是16。

2.3.4 长字符串

微课视频

代码位置:src/basic/long_string.py

使用3个单引号或双引号括起来的文本会成为一个长字符串。在长字符串中会保留原始的格式。

如果使用长字符串表示一个字符串,中间可以混合使用双引号和单引号,而不需要加转义符。

对于普通字符串来说,同样可以用多行来表示。只需要在每行后面加转义符(\),这样一来,换行符本身就"转义"了,会被自动忽略,所以最后都会变成一行字符串。

下面的代码演示了长字符串的用法。

程序运行结果如图2-4所示。

图2-4 输出长字符串

2.4 数字

数字是Python程序中最常见的元素。在Python控制台中可以直接输入用于计算的表达式(如1+2 * 3),按回车键就会输出表达式的计算结果,因此,Python控制台可以作为一个能计算表达式的计算器使用。

在Python语言中,数字分为整数和浮点数。支持基本的四则运算和一些其他的运算操作,并且可以利用一些函数在不同的进制之间进行转换,以及按一定的格式输出数字。本节会就这些知识点一一展开,深入讲解在Python语言中如何操作数字。

2.4.1 基础知识

微课视频

代码位置:src/basic/operator.py

Python语言支持四则运算(加、减、乘、除),以及圆括号运算符。在Python语言中,数字分为整数和浮点数。整数就是无小数部分的数,浮点数就是有小数部分的数。例如,下面的代码是标准的四则运算表达式。

     2 + 4
     4 * 5 + 20
     5.3 / 7
     (30 + 2) * 12

如果要计算两个数的除法,不管分子和分母是整数还是浮点数,使用除法运算符(/)的计算结果都是浮点数。例如1/2的计算结果是0.5,2/2的计算结果是1.0。要想让Python解释器执行整除操作,可以使用整除运算符,也就是两个斜杠(//)。使用整除运算符后,1 // 2的计算结果是0,2 // 2的计算结果是1。

整除运算符不仅能对整数执行整除操作,也能对浮点数执行整除操作,在执行整除操作时,分子和分母只要有一个是浮点数,那么计算结果就是浮点数。例如,1.0 // 2的计算结果是0.0,2.0 // 2的计算结果是1.0。

除了四则运算符外,Python还提供了两个特殊的运算符:%(取余运算符)和**(幂运算符)。取余运算符用于对整数和浮点数执行取余操作。例如,5 % 2的计算结果是1,而5.0 % 2的计算结果是1.0。从这点可以看出,%和//类似,只要分子和分母有一个是浮点数,计算结果就是浮点数。幂运算符用于计算一个数值的幂次方。例如,2 ** 3的计算结果是8,3.2 ** 2的计算结果是10.24。

到现在为止,一共介绍了8个运算符,它们是圆括号((…))、加(+)、减(-)、乘(*)、除(/)、整除(//)、取余(%)和幂运算符(**)。其中减号(-)也可以用作负号(一元运算符),所以现在涉及9个运算符。既然涉及这么多运算符,那么就有一个优先级的问题,也就是说,同一个表达式中包含有多个不同的运算符,需要先计算优先级高的运算符,如果优先级相同,那么就按从左向右的顺序执行。

这9个运算符的优先级顺序如表2-1所示。越靠前优先级越高,同一行的运算符的优先级相同。

表2-1 运算符优先级

下面的代码演示了Python语言中运算符的使用方法,在编写Python代码时,应该注意运算符的优先级问题。

2.4.2 大整数

对于有符号32位整数来说,可表示的最大值是2 147 483 647(2^31-1),可表示的最小值是-2 147 483 648(-2^31),如果超过这个范围,有符号32位整数就会溢出。不过在Python语言中,可以处理非常大的整数,并不受位数限制。例如,下面表达式的输出结果就超出了32位整数的范围。

再换个更大的数,看会不会溢出。

上面这行代码的输出结果如下:

     445550841564667501820426914619169074696604346410992180720624269326101090547722401
     025968047980212050759633038044296328838934443820446820117016861457004122479321483
     854917994624031530682836582400000

很显然,Python语言仍然可以正确处理2**630 * 100000的计算结果。因此,在Python语言中使用数字不需要担心溢出,因为Python语言可以处理非常大的数字,这也是很多人使用Python语言进行科学计算和数据分析的主要原因之一。

2.4.3 二进制、八进制和十六进制

微课视频

代码位置:src/basic/base.py

Python语言可以表示二进制、八进制和十六进制数。表示这3种进制的数,必须以0开头,然后分别跟着表示不同进制的字母。表示二进制的字母是b,表示八进制的字母是o(这是英文字母中小写的o,不要和数字0搞混了),表示十六进制的字母是x。因此,二进制数的正确写法是0b110011,八进制数的正确写法是0o56432,十六进制数的正确写法是0xF765A。

除了这3种进制外,前面章节一直使用的是十进制。因此,Python语言一共可以表示4种进制:二进制、八进制、十进制和十六进制。Python语言提供了一些函数用于在这4种进制数之间进行转换。

如果是从其他进制转换到十进制,需要使用int函数,该函数有两个参数,含义如下:

· 第1个参数:字符串类型,表示待转换的二进制、八进制或十六进制数。参数值只需要指定带转换的数即可,不需要使用前缀,如二进制直接指定11011,不需要指定0b11011。

· 第2个参数:数值类型,表示第1个参数值的进制,例如,如果要将二进制转换为十进制,第2个参数值就是2。

int函数返回一个数值类型,表示转换后的十进制数。

下面的代码将二进制数110011转换为十进制数,并输出返回结果。

如果要从十进制转换到其他进制,需要分别使用bin、oct和hex函数。bin函数用于将十进制数转换为二进制数;oct函数用于将十进制数转换为八进制数,hex函数用于将十进制数转换为十六进制数。这3个函数都接收一个参数,就是待转换的十进制数。不过要注意,这3个函数的参数值也可以是二进制数、八进制数和十六进制数,也就是说,这3个函数可以在二进制、八进制、十进制和十六进制数之间互转。

下面的代码将十进制数54321转换为十六进制数,并输出转换结果。

下面的代码演示了Python语言中二进制、八进制、十进制和十六进制数之间的转换。

2.4.4 数字的格式化输出

代码位置:src/basic/format.py

在输出数字时,有时需要对其进行格式化。例如,在输出12.34时,只希望保留小数点后1位数字,也就是12.3,或整数位按6位输出,不足前面补0,也就是000012.34。Python语言中提供了format函数用于对数字进行格式化。format函数有两个参数,含义如下:

· 第1个参数:要格式化的数字。

· 第2个参数:格式字符串。

format函数的返回值就是数字格式化后的字符串。

下面的代码演示了format函数在格式化数字方面的应用。

微课视频

2.5 获取用户输入

微课视频

代码位置:src/basic/input.py

要编写一个有实际价值的程序,就需要与用户交互。当然,与用户交互有很多方法,例如,GUI(图形用户接口)就是一种非常好的与用户交互的方式,不过先不讨论GUI的交互方式,本节会采用一种原始,但很有效的方式与用户交互,这就是命令行交互方式,也就是说,用户通过命令行方式输入数据,程序会读取这些数据,并做进一步的处理。

从命令行接收用户的输入数据,需要使用input函数。input函数接收一个字符串类型的参数,作为输入的提示。input函数的返回值就是用户在命令行中录入的值。不管用户录入什么数据,input函数都会以字符串形式返回。如果要获取其他类型的值,如整数、浮点数,需要用相应的函数转换。例如,字符串转换为整数的函数是int,字符串转换为浮点数的函数是float。

下面的程序要求用户在命令行中输入姓名、年龄和收入。其中年龄是整数,收入是浮点数。输入完这3个值后,会依次在控制台输出这3个值。由于年龄和收入都是数值,所以在获取用户输入值后,需要分别使用int和float函数将input函数的返回值分别转换为整数和浮点数。如果年龄和收入输入的是非数值,会抛出异常。

运行程序,分别输入姓名、年龄和收入,按回车键后,会输出如图2-5所示的内容。

图2-5 在命令行分别输入姓名、年龄和收入

2.6 注释

微课视频

代码位置:src/basic/annotation.py

任何编程语言都有注释的功能。所谓注释,就是用一段文本描述代码的作用、代码的作者或其他需要描述的东西。注释在程序编译时被忽略,也就是说,注释只在源代码中体现,编译生成的二进制文件中是没有注释的。

在Python语言中,注释分为单行注释和多行注释。单行注释用井号(#)开头,多行注释用3个引号(单引号或双引号)括起来。如果使用单行注释,井号后面的所有内容在编译程序时都会被忽略,如果使用多行注释,被引号括起来的内容在编译程序时都会被忽略。

在使用某些Python IDE时,默认会用ASCII编码格式保存源代码文件,这时如果源代码文件中含有中文,在运行Python程序时就会出错,这时需要使用注释标注当前源代码文件保存的编码格式。

用utf-8编码格式保存源代码文件:

     # coding=utf-8

用gbk编码格式保存源代码文件:

     # coding=gbk

建议读者使用utf-8编码格式保存源代码文件,因为utf-8不仅能保存中文,还可以保存其他国家的文字,如韩文、日文。所以utf-8编码格式使用更普遍。

下面的例子演示了Python语言中单行注释、多行注释的用法。

2.7 实战与演练

1.将下面的数值转成另外3种进制,并使用print函数输出转换结果。例如,如果数值是十进制,需要转换成二进制、八进制、十六进制,如果是十六进制,需要转换为二进制、八进制、十进制。

(1)12345。

(2)0xF98A。

(3)0b1100010110。

答案位置: src/basic/solution1.py

2.现在有一个变量x,值为5423.5346,使用format函数对该变量进行格式化,并使用print函数输出如下的5个格式化后的值。

(1)保留小数点后3位数字,格式化后的结果:5423.535。

(2)保留小数点后2位数字,让整数和小数部分,以及小数点一共占10位,左侧位数不够补0。格式化后的结果:0005423.53。

(3)保留小数点后2位数字,让整数和小数部分,以及小数点一共占10位,右侧位数不够补0。格式化后的结果:5423.53000。

(4)在第2个格式化结果的基础上,在千分位用逗号(,)分隔,格式化后的结果:005,423.53。

(5)保留小数点后2位数字,让整数和小数部分,以及小数点一共占10位,位数不够前后补0,格式化后的结果:05,423.530。

答案位置: src/basic/solution2.py

2.8 本章小结

本章介绍了一些Python语言的基础知识。其实核心知识点只有两个:数字和字符串。数字主要涉及一些进制之间的转换以及格式化输出数字。这些都是数字的基本操作。本章介绍的字符串操作非常基础,但很重要,尤其是转义符的应用,读者要认真阅读本章的内容。实际上,Python语言中的字符串操作非常复杂,功能也十分强大,所涉及的内容远不止本章介绍的这些知识点。在本书后面会用专门的一章详细介绍字符串的操作。 RByG+IaJ7qvR83SyvpyNt6xXj5Nn93oRi1Ze8IR6qdrN2IK5TPCxMAhc1iJ2AtIV

点击中间区域
呼出菜单
上一章
目录
下一章
×