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

1.3 Python语言基础

学习Python编程时,首先需要了解一些基本知识,包括Python编码规范、基本数据类型、常量和变量、基本运算符、表达式以及基本输入/输出等。下面介绍这些内容。

1.3.1 Python编码规范

编码规范是使用Python语言编写程序代码时应遵循的命名规则、代码缩进、代码和语句的分隔方法等。良好的编码规范有助于提高代码的可读性,便于代码的修改和维护。

1.标识符命名规则

标识符用于表示常量、变量、函数以及类型等程序要素的名称。在Python中,标识符由字母、汉字、数字和下画线(_)组成,但不能以数字开头,也不能与关键字同名,标识符中使用的字母是区分大小写的。例如,var_a、var_b和User_ID都是合法的标识符,3-user和5student则不是;username、Username和UserName表示不同的标识符。

关键字是Python语言事先定义的一些具有特定含义的标识符,也称之为保留字。由于这些关键字具有特定含义,因此它们不能作为普通的标识符来使用,否则会出现语法错误。

2.代码缩进

在Python程序中,代码缩进代表代码块的作用域,如果一个代码块包含两个或更多语句,则这些语句必须具有相同的缩进量。编写代码时,建议使用4个空格来生成缩进。如果程序代码中使用了错误的代码缩进,程序运行时将会发出IndentationError错误的信息。

使用IDLE或PyCharm等工具编写代码时,编辑器会根据所输入的代码层次关系自动生成代码缩进,以提高编码效率。

3.使用分号

在Python程序中,允许在行尾添加分号,但并不建议添加分号,也不要在同一行中通过使用分号来分隔两条语句,建议每条语句单独占一行。

4.超长语句的续行

编写Python程序时,建议每行一般不要超过80个字符。对于超长语句,建议使用圆括号来连接行,允许但不提倡使用反斜线(\)来连接行。

在以“#”字符开始的注释中,即便是超过80个字符,也要将长的URL(统一资源定位符)或长的导入模块语句(import)放在同一行内。

5.使用圆括号

圆括号可用于长语句的续行,但不建议使用不必要的括号。

6.使用空行

不同函数或语句块之间可以使用空行来分隔,以区分两段功能或含义不同的代码,从而提高代码的可读性。

7.使用空格

对于赋值运算符、比较运算符和逻辑运算符,在运算符两侧各加一个空格,可使代码看起来更清晰。对于算术运算符,可以按个人习惯来决定是否使用空格。不建议在逗号、分号、冒号前面添加空格,但建议在它们后面添加空格,除非它们位于行尾。

8.使用注释

在 Python 程序中,注释分为单行注释和多行注释。单行注释也称为行内注释,它与语句在同一行中,注释以“#”字符开始直到行尾结束,“#”字符右边的内容在程序执行时被忽略。多行注释也称为批量注释,多行注释的内容可以有多行,这些内容必须包含在一对三引号内。三引号可以是3个单引号(′′′ ′′′),也可以是3个双引号(″″″ ″″″)。

【例1.2】 查看所有Python关键字。

【算法分析】

在Python中,可以使用import语句导入所需要的模块,其实质就是在一个文件中导入另一个文件,以便读取所导入文件的内容。在本例中,利用import语句导入Python的keyword模块,该模块中有两个成员,即kwlist变量和iskeyword函数,其中kwlist包含了所有的Python关键字,而iskeyword则可用来判定某一个字符串是否为关键字。利用import语句导入一个模块后,再引用该模块中的变量和函数,需要在变量或函数名前面冠以模块名和英文句点。例如,在本例中以keyword.kwlist作为print()函数的参数,其中keyword为模块名,kwlist为变量名,其值是一个列表。

【程序代码】

【运行结果】

1.3.2 基本数据类型

Python提供的基本数据类型包括数值类型、字符串类型、布尔类型和空值等。

1.数值类型

数值类型用于存储数值,数值类型数据可以参与算术运算。数值类型包括整型、浮点型和复数型。

1)整型数据(int)。整型数据即整数,没有小数部分,但可以有正负号。在Python 3.x中,整型数据的值在计算机内的表示不是固定长度的,在内存容量允许的前提下,整型数据的取值范围几乎涵盖了所有整数,这为大数据处理带来了便利。

在Python中,整数常量可以用十进制、二进制、八进制和十六进制来表示。

十进制整数的表示形式与数学中相同,例如123、-326、0、2018等。

二进制整数用0b或0B作为前缀,只有0和1两个数码,例如0B1010、0B1110011等。

八进制整数用0o或0O作为前缀,一共有8个数码,即0~7,例如0o367、0o777等。

十六进制整数用0x或0X作为前缀,一共有16个数码,即数字0~9和小写字母a~f或大写字母A~F,例如0xcccc、0x3abcfed等。

2)浮点型数据(float)。浮点数表示一个实数。对于浮点数,Python 3.x默认提供17位有效数字的精度。浮点数有两种表示形式,即十进制小数形式和指数形式。

十进制小数形式由数字和小数点组成,例如1.23、3.1415926、0.0、186.0等。此外,十进制小数允许小数点后面没有任何数字,这表示小数部分为0,例如123.表示123.0。

指数形式是用科学计数法表示浮点数,用字母e或E表示以10为底数的指数。字母e之前为数字部分,可以带有小数部分,之后为指数部分,必须为整数,数字部分和指数部分必须同时出现。例如,3.6e123表示3.6×10 123 ,2.39e-9表示2.39×10- 9

3)复数型数据(complex)。复数是Python内置的数据类型。复数的表示形式为 a + b j,其中 a 为复数的实部, b 为复数的虚部,j表示虚数单位(表示-1的平方根),字母j也可以写成大写形式J。在Python语言中,可以使用real和imag属性来获取一个复数的实部和虚部。

【例1.3 】 输出各种数值类型常量。

【算法分析】

在Python中,可以使用内置函数type(obj)来检查参数obj的数据类型;对于整数、浮点数和复数,该函数的返回值分别为“<class′int′>”、“<class′float′>”和“<class′complex′>”。

【程序代码】

print(123456789)

#十进制整数

print(0b110111010101011)

#二进制整数

print(0o126731777)

#八进制整数

print(0x123456789abcdef)

#十六进制整数

print(type(123))

#查看整数的数据类型

print(123.456)

#十进制小数的浮点数

print(3.2e10)

#指数形式的浮点数

print(type(1.23))

#查看浮点数的数据类型

print(3+4j)

#复数

print((3+4j).real)

#查看复数的实部

print((3+4j).imag)

#查看复数的虚部

print(type(5+6j))

#查看复数的数据类型

【运行结果】

123456789

28331

22787071

81985529216486895

<class′int′>

123.456

32000000000.0

<class′float′>

(3+4j)

3.0

4.0

<class′complex′>

2.字符串类型

字符串是使用单引号、双引号或三引号(3个单引号或3个双引号)括起来的任意文本。例如,′′,′Python′,′He said,″hello!″′,″″,″It′s right.″,′′′中国梦′′′等,其中 ′′ 和 ″″ 表示空字符串。三引号常用于定义文档字符串,文档字符串可以通过对象的__doc__属性来提取。

使用何种符号作为定界符可以根据需要来选择。如果字符串内容中包含双引号,则可以使用单引号作为定界符,反之亦然。使用单引号或双引号括起来的字符串只能是单行的,如果字符串是多行的,则需要使用三引号括起来。

在Python中,字符串是不可变对象,即字符串中的字符不能被改变。每当修改字符串时系统都将生成一个新的字符串对象。

转义字符是一些特殊字符,它们以反斜杠(\)开头,后面跟一个或多个字符。转义字符具有特定的含义,不同于字符本来的意义。例如,转义字符“\n”表示按〈Enter〉键换行,转义字符“\t”表示水平制表符(Tab)。常用的转义字符详见表1-1。

表1-1 常用转义字符

如果不想让转义字符生效,可使用 r 或 R 来定义原始字符串,以显示字符串原来的意思。例如,用print()函数输出“r″\t\n″”时将得到“\t\n”。

【例1.4】 在字符串中使用转义字符。

【算法分析】

利用print()函数输出多个字符串时,可以用sep参数指定不同输出项之间的分隔符,该参数的默认值为空格。若要将数据显示在不同的行,可将sep参数设置为转义字符“\n”;若要以水平制表符来分隔各个输出项,可将sep参数设置为转义字符“\t”。

【程序代码】

#在字符串中使用转义字符\n和\t

print(″编程语言排行榜:\nPython\tC\tJava\tC++″)

#使用单引号定义字符串

s1=′Python程序设计′

#检查字符串的数据类型

print(type(s1))

#在字符串中使用双引号

print(″\″class\″ 是Python语言中的关键字。″)

#使用三引号定义字符串

s2=″″″

白日依山尽,黄河入海流。

欲穷千里目,更上一层楼。

″″″

print(s2)

【运行结果】

编程语言排行榜:

Python C Java C++

<class′str′>

″class″ 是Python语言中的关键字。

白日依山尽,黄河入海流。

欲穷千里目,更上一层楼。

3.布尔类型

布尔(bool)类型数据常用于描述逻辑判断的结果。布尔类型数据只有两个值,即逻辑真和逻辑假,分别用True和False表示。将其他类型的数据转换为布尔值时,数值0(包括整数0和浮点数0.0)、空字符串、空值(None)以及空集合均被视为False,其他值均被视为True。

4.空值

在Python中,空值是一个特殊值,用None来表示。

1.3.3 常量和变量

变量用于存储程序中使用的各种数据,对应于计算机内存中的一块区域。变量通过唯一的标识符(即变量名)来表示,并且可以通过各种运算符对变量的值进行操作。

Python是一种动态类型的编程语言,不需要显式地声明变量的数据类型,可以直接对变量赋值,然后在程序中使用它。Python中的所有数据均被抽象为对象,通过赋值语句将变量指向特定的对象,使变量与对象关联起来。当对变量重新赋值时,并不会修改对象的值,而是重新创建一个对象并使其与变量关联起来。因此,在Python中,对于同一个变量可以先后使用不同的数据类型对其进行赋值。

变量是在首次使用赋值语句对其赋值时创建起来的。赋值语句的一般语法格式如下:

变量=表达式

在上述语法中,等号(=)称为赋值号;赋值号左边必须是变量,其右边则为表达式。进行赋值操作时,首先计算表达式的值并创建一个数据对象,然后使变量指向该数据对象。

变量中存放的并不是该数据对象的值,而是该数据对象的内存地址。这种通过内存地址间接访问数据对象的方式称为引用。使用内置函数id()可以获取由变量引用的内存地址。

通过变量之间的赋值可以使两个变量引用相同的对象,而使用身份运算符is则可以判定两个变量是否引用了同一个对象。

创建变量时,操作系统将为变量分配内存空间。对于已经存在的变量,可以使用del运算符将其删除,以释放所占用的内存空间。

常量是指首次赋值后保持固定不变的值的量,例如123、″Python″、True等。在Python中没有命名的常量,通常用一个不改变值的变量来表示常量,例如用PI=3.14来定义圆周率。

【例1.5 】 创建和检测变量。

【算法分析】

通过对一个变量赋值可以定义变量,然后使用另一个值重新对变量赋值,此时将创建另一个对象;使用一个变量对另一个变量赋值后,使用is运算符可以判定两个变量引用的是不是相同的对象。默认情况下,使用print()函数输出数据后将会自动换行,如果不希望换行,则可以将end参数设置为空字符串。

【程序代码】

x=123

print(″变量x\n\t引用的值:″,end=″″)

print(x)

print(″\t内存地址:″,end=″″)

print(id(x))

print(″\t数据类型:″,end=″″)

print(type(x))

x=″Python″

print(″变量x\n\t引用的值:″,end=″″)

print(x)

print(″\t内存地址:″,end=″″)

print(id(x))

print(″\t数据类型:″,end=″″)

print(type(x))

y=x

print(″变量y\n\t引用的值:″,end=″″)

print(y)

print(″\t内存地址:″,end=″″)

print(id(x))

print(″\t数据类型:″,end=″″)

print(type(y))

if x is y:

print(″变量x和y引用的是相同的对象″)

【运行结果】

变量x

引用的值:123

内存地址:1863351584

数据类型:<class′int′>

变量x

引用的值:Python

内存地址:2218650007904

数据类型:<class′str′>

变量y

引用的值:Python

内存地址:2218650007904

数据类型:<class′str′>

变量x和y引用的是相同的对象

当通过赋值创建变量时,Python会根据表达式的值来确定变量的数据类型。使用type()函数可以检测变量的数据类型。在实际应用中,还可以根据需要对变量进行类型转换,此时将产生一个目标类型的新对象。变量的类型转换可以通过下列类型转换函数来实现。

1)int(),用于将其他数据类型转换为整数。

2)float(),用于将其他数据类型转换为浮点数。

3)round(),用于按“四舍六入五留双”的规则将浮点数转换为整数。例如,round(1.23)的值为1,round(1.5)和round(2.5)的值均为2。

4)str(),用于将其他数据类型转换为字符串。

5)bool(),用于将其他数据类型转换为布尔型,其转换规则是将数字0和空字符串转换为False,将所有非0数字和非空字符串转换为True。

6)chr()和ord(),用于在整数与字符之间进行相互转换。chr()函数是按ASCII码将一个整数转换为对应的字符,ord()函数则将字符转换为对应的ASCII码或Unicode码。

【例1.6 】 变量的数据类型转换。

【算法分析】

可以通过调用类型转换函数来实现变量的数据类型转换,例如将一个浮点型变量转换为整型、字符串或布尔型,可以通过调用ord()函数以求出字符的ASCII码或Unicode码。

【程序代码】

x=123.456

print(″变量x\n\t转换为整数:″,end=″″)

print(int(x))

print(″\t四舍六入五留双:″,end=″″)

print(round(x))

print(″\t转换为字符串:″,end=″″)

print(str(x))

print(″\t转换为布尔值:″,end=″″)

print(bool(x))

y=″A″

print(″变量y\n\t字符:″,end=″″)

print(y)

print(″\tASCII码:″,end=″″)

print(ord(y))

z=″汉″

print(″变量z\n\t字符:″,end=″″)

print(z)

print(″\tUnicode码:″,end=″″)

print(ord(z))

【运行结果】

变量x

转换为整数:123

四舍六入五留双:123

转换为字符串:123.456

转换为布尔值:True

变量y

字符:A

ASCII码:65

变量z

字符:汉

Unicode码:27721

1.3.4 运算符

运算符用于指定对数据进行何种运算。Python提供了丰富的运算符,按照功能可分为算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、身份运算符以及成员运算符等;按照操作数的数目可分为单目运算符、双目运算符以及三目运算符。运算符具有不同的优先级(从高到低)和结合性(从左到右或从右到左),在不用圆括号的情况下优先级和结合性决定了运算的先后次序。

1.算术运算符

算术运算符可以用于对操作数进行算术运算,其运算结果是数值类型。Python提供的各种算术运算符详见表1-2。

表1-2 算术运算符

(续)

2.关系运算符

关系运算符亦称比较运算符,用于比较两个操作数的大小,其运算结果是一个布尔值。关系运算符的操作数可以是数字或字符串。若操作数是字符串,系统则会从左向右逐个比较每个字符的Unicode码,直到出现不同的字符或字符串为止。所有关系运算符详见表1-3。

表1-3 关系运算符

3.逻辑运算符

逻辑运算符用于布尔值的运算,包括逻辑与、逻辑或和逻辑非。其中逻辑与和逻辑或是双目运算符,逻辑非是单目运算符。Python提供的逻辑运算符详见表1-4。

表1-4 逻辑运算符

4.位运算符

位运算符用于对数字的二进制位进行运算。位运算符包括左移运算符(<<)、右移运算符(>>)、按位与运算符(&)、按位或运算符(|)、按位异或运算符(^)以及按位取反运算符(~),这些运算符的功能和应用示例详见表1-5。

表1-5 位运算符

(续)

5.身份运算符

身份运算符用于比较两个对象的内存地址是否相同,这些运算符的功能和应用示例详见表1-6。

表1-6 身份运算符

6.成员运算符

成员运算符用于判定对象是否存在于字符串等序列中,其功能和应用示例详见表1-7。

表1-7 成员运算符

【例1.7 】 各种基本运算符的应用。

【算法分析】

使用各种基本运算符时,需要注意操作数和运算结果的数据类型。算术运算的操作数(运算对象)和结果都是数值类型;关系运算的操作数可以是数值和字符串,运算结果则是布尔型;逻辑运算的操作数和结果都是布尔型;身份运算和成员运算的结果都是布尔型。

【程序代码】

#创建变量

x=5

y=3

#算术运算

print(″x=″,x,″,y=″,y,sep=″″)

print(″x+y=″,x+y,sep=″″)

print(″x-y=″,x-y,sep=″″)

print(″x*y=″,x*y,sep=″″)

print(″x/y=″,x/y,sep=″″)

print(″x//y=″,x//y,sep=″″)

print(″x%y=″,x%y,sep=″″)

print(″x**y=″,x**y,sep=″″)

#关系运算

print(″x==y返回″,x==y,sep=″″)

print(″x>y返回″,x>y,sep=″″)

print(″x>=y返回″,x>=y,sep=″″)

print(″x<y返回″,x<y,sep=″″)

print(″x<=y返回″,x<=y,sep=″″)

print(″x!=y返回″,x!=y,sep=″″)

#逻辑运算

print(″x>y and y<2返回″,x>y and y<2,sep=″″)

print(″x>y or y<2返回″,x>y or y<2,sep=″″)

print(″not(x>y)返回″,not(x>y),sep=″″)

#身份运算

print(″x is y返回″,x is y,sep=″″)

#成员运算

print(″y in′Python′返回″,y in′Python′,sep=″″)

【运行结果】

x=5,y=3

x+y=8

x-y=2

x*y=15

x/y=1.6666666666666667

x//y=1

x%y=2

x**y=125

x==y返回False

x>y返回True

x>=y返回True

x<y返回False

x<=y返回False

x!=y返回True

x>y and y<2返回False

x>y or y<2返回True

not(x>y)返回False

x is y返回False

′y′in′Python′返回True

1.3.5 表达式

表达式是运算符和运算对象组成的有意义的组合,运算对象亦称为操作数,它可以是常量、变量,也可以是函数的返回值。通过运算符对表达式中的值进行若干次运算,最终得到表达式的返回值。

按照运算符的种类,可将表达式分为算术表达式、关系表达式、逻辑表达式以及测试表达式等。多种运算符混合运算可形成复合表达式,此时系统会按照运算符的优先级和结合性依次进行运算。如果需要,用户也可以使用圆括号来改变运算顺序。

常见的运算符按照优先级从低到高的顺序排列(同一行优先级相同)如下。

很多运算对操作数的类型是有要求的。例如,加法运算要求两个操作数类型必须相同,若操作数类型不一致,则可能会发生隐式类型转换。例如,在整数与浮点数相加时,整数会隐式转换为浮点数。若操作数类型差别比较大,则不会发生隐式类型转换,在这种情况下就需要进行显式类型转换。在整数与字符串相加时,根据需要可以将整数转换为字符串,然后进行字符串连接;或者将字符串转换为整数,然后进行整数相加。

表达式的返回值类型由操作数和运算符共同决定。关系、逻辑和测试表达式的值必为布尔值,连接(+)和重复(*)字符串的结合还是字符串,对两个整数进行算术运算结果可能是整数或浮点数,对两个浮点数进行算术运算结果还是浮点数。

【例1.8 】 对于给定的 a b c ,求解二次方程 ax 2 + bx + c =0。

【算法分析】

从数学中可以知道,二次方程 ax 2 + bx + c =0的根可以利用以下求根公式进行计算:

为此,可将 a b c 的值代入求根公式,从而构造出算术表达式。由于Python支持复数数据类型,所以系统可以在复数范围内求解,不需要判断是否存在实数根。

【程序代码】

#设置二次项系数a、一次项系数b和常数项c的值

a=6

b=2

c=5

#利用求根公式计算二次方程的两个根

x1=(-b+(b*b-4*a*c)**0.5)/(2*a)

x2=(-b-(b*b-4*a*c)**0.5)/(2*a)

print(″当a=6,b=2,c=5时,二次方程的两个根如下:″)

print(″x1=″,x1,sep=″″)

print(″x2=″,x2,sep=″″)

【运行结果】

当a=6,b=2,c=5时,二次方程的两个根如下:

x1=(-0.1666666666666666+0.8975274678557507j)

x2=(-0.1666666666666667-0.8975274678557507j)

习题1

一、选择题

1.Python语言的第一个版本发布于()。

A.1980年

B.1990年

C.1995年

D.2000年

2.在使用Python程序时可以利用()模块来访问Access数据库。

A.sqlite3

B.pymysql

B.win32.client

D.pymssql

3.Python命令行终端python.exe的提示符是()。

A.>

B.?

C.$

D.>>>

4.在Python Shell中运行当前打开的程序,可以按下()键。

A.F2

B.F4

C.F5

D.F8

5.在下列各项中,()不是合法的Python标识符。

A.username

B.3_user_name

C.Username

D.user_name

6.在Python程序中,多行注释可以包含在一对()内。

A.#

B.

C.″(双引号)

D.′′′(三引号)

7.文档字符串可以通过对象的()属性来提取。

A.__doc__

B._doc_

C.doc

D.__doc

8.要将字符转换为对应的ASCII码或Unicode码,可以使用()函数。

A.round()

B.ord()

C.chr()

D.str()

二、判断题

1.()使用Python 2.x编写的程序可以在Python 3.0上正常运行。

2.()Python有交互式和脚本式两种编程模式。

3.()Python是一种编译型语言,Python程序必须编译成二进制代码才能运行。

4.()在Python程序中,一个代码块包含的多个语句可以具有不同的缩进量。

5.()在Python程序中,每条语句末尾必须添加分号。

6.()使用keyword模块中的kwlist变量可以查看全部Python关键字。

7.()在Python 3.x中,只要内存容量允许,整型数据的取值范围几乎可以涵盖所有整数。

8.()在Python中,复数的表示形式为 a + b i,其中 a 为实部, b 为虚部,i表示虚数单位。

9.()在Python中,字符串中的字符可以被改变。

10.()将其他类型的数据转换为布尔值时,数值0(含整数0和浮点数0.0)空字符串、空值(None)以及空集合被视为False,其他值均被视为True。

11.()使用内置函数id()可以获取由变量引用的内存地址。

12.()使用delete运算符可以删除已经存在的变量,以释放所占用的内存空间。

三、编程题

1.在IDLE中输入一条语句,以显示Tim Peters编写的“Python之禅”。

2.在IDLE中输入语句,以查看所有Python关键字。

3.对于给定的 a b c ,编写程序求解二次方程 ax 2 + bx + c =0。 qz891uiRq55TklMysuAQsvTRhC2V5CTXPy3WRz3jz0/lCyG1h0NL9AWXIIyMQLlc

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