本节详细介绍Python的语法特点,然后介绍Python中的保留字、标识符、变量、基本数据类型及数据类型间的转换,接下来介绍运算符与表达式,最后介绍通过输入和输出函数进行交互的方法。
学习Python首先需要了解它的语法特点,如注释规则、代码缩进、编码规范等。下面将详细介绍Python的这些语法特点。
在程序中,注释就是对代码的解释和说明,让他人了解该段代码实现的功能,从而帮助程序员更好地阅读代码。注释的内容将被Python解释器忽略,并不会在执行结果中体现出来。
在Python中,通常包括3种类型的注释,分别是单行注释、多行注释和中文编码声明注释。
在Python中,使用“#”作为单行注释的符号。从符号“#”开始直到换行为止,“#”后面所有的内容都作为注释的内容,并被Python解释器忽略。
例如:
# 要求输入体重,单位为kg,如65 weight=float(input("请输入您的体重:"))
在Python中,没有一个单独的多行注释标记,而是将包含在一对三引号('''……''')或者("""……""")之间,并且不属于任何语句的内容都视为注释,这样的内容将被解释器忽略。由于这样的代码可以分为多行编写,所以也称为多行注释。
语法格式如下:
''' 注释内容1 注释内容2 ...... '''
多行注释通常用来为Python文件、模块、类或者函数等添加版权、功能等信息。例如,下面代码将使用多行注释为demo.py文件添加版权、功能及修改日志等信息:
''' @版权所有:百度科技有限公司◎版权所有 @文件名:demo.py @文件功能描述:根据身高、体重计算BMI指数 @修改日期:2020年7月20日 '''
在Python中,三引号('''……''')或者("""……""")是字符串定界符。如果三引号作为语句的一部分出现时就不是注释,而是字符串,这一点要注意区分。
例如,如下所示的代码为多行注释:
'''
@文件功能描述:根据身高、体重计算BMI指数
@创建人:李明
@修改日期:2020年7月20日
'''
如下所示的代码为字符串:
print('''''根据身高、体重计算BMI指数''')
Python不像其他程序设计语言(如Java或者C语言)采用花括号({})分隔代码块,而是采用代码缩进和冒号(:)区分代码之间的层次。
在Python中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进表示一个代码块的开始,而缩进结束则表示一个代码块的结束。
例如,下面代码中的缩进为正确的缩进.
height=float(input("请输入您的身高:")) # 输入身高 weight=float(input("请输入您的体重:")) # 输入体重 bmi=weight/(height*height) # 计算BMI指数
Python对代码的缩进要求非常严格,同一个级别的代码块的缩进量必须相同。如果不采用合理的代码缩进,将抛出SyntaxError异常。例如,代码中的缩进量有的是4个空格,有的是3个空格,就会出现SyntaxError错误。
Python采用PEP8作为编码规范,PEP8中的“8”表示版本号。下面给出PEP8编码规范中的一些应该严格遵守的条目。
● 每个import语句只导入一个模块,尽量避免一次导入多个模块。推荐的写法为:
import os import sys
不推荐的写法为:
import os,sys
● 不要在行尾添加分号(;),也不要用分号将两条命令放在同一行。以下写法所示的代码为不规范的写法。
height=float(input("请输入您的身高"));
● 建议每行不超过80个字符。导入模块的语句不宜过长,注释里的URL除外。
如果导入模块的语句超过80个字符,建议使用圆括号(())将多行内容隐式地连接起来,不推荐使用反斜杠(\)进行连接。例如,如果一个字符串文本不能在一行上完全显示,那么可以使用圆括号将其分行显示,代码如下:
S =("我一直认为我是一只蜗牛。我一直在爬,也许还没有爬到金字塔的顶端。" "但是只要你在爬,就足以给自己留下令生命感动的日子。")
以下通过反斜杠(\)进行连接的做法是不推荐使用的。
S=("我一直认为我是一只蜗牛。我一直在爬,也许还没有爬到金字塔的顶端。\ 但是只要你在爬,就足以给自己留下令生命感动的日子。")
● 使用必要的空行可以增加代码的可读性。一般在顶级定义(如函数或者类的定义)之间空两行,而在方法定义之间空一行。另外,在用于分隔某些功能的位置也可以空一行。
● 通常情况下,运算符两侧、函数参数之间、圆括号两侧建议使用空格进行分隔。
● 应该避免在循环中使用“+”和“+=”运算符累加字符串。这是因为字符串是不可变的,这样做会创建不必要的临时对象。推荐将每个子字符串加入列表,然后在循环结束后使用join()方法连接列表。
● 适当使用异常处理结构提高程序容错性,但不能过多依赖异常处理结构,适当的显式判断还是有必要的。
在编写Python程序时,建议严格遵循PEP8编码规范。完整的Python编码规范请参考PEP8。
保留字是Python语言中的已经被赋予特定意义的单词。开发程序时,不可以把这些保留字作为变量、函数、类、模块和其他对象的名称来使用。Python语言中的保留字如表1.1所示。
表1.1 Python中的保留字
Python中所有保留字是区分字母大小写的。例如,if是保留字,但IF就不是保留字。
标识符可以简单地理解为一个名字,比如每个人都有自己的名字,它主要用来标识变量、函数、类、模块和其他对象的名称。
Python语言标识符命名规则如下:
● 由字母、下画线(_)和数字组成。第一个字符不能是数字,目前Python只允许使用ISO-Latin字符集中的字符A~Z和a~z。
● 不能使用Python中的保留字。
● 区分字母大小写。
在Python中,标识符中的字母是严格区分大小写的,两个同样的单词,如果大小写格式不一样,所代表的意义是完全不同的。
● Python中以下画线开头的标识符有特殊意义,一般应避免使用相似的标识符。
以单下画线开头的标识符(如_width)表示不能直接访问的类属性,也不能通过from xxx import *导入;以双下画线开头的标识符(如__add)表示类的私有成员;以双下画线开头和结尾的标识符是Python中专用的标识符,如__init__()表示构造函数。
变量是存放数据值的容器。与其他编程语言不同,Python没有声明变量的命令。首次赋值时,才会创建变量。在Python中,不需要先声明变量名及其类型,直接赋值即可创建各种类型的变量。但是变量的命名并不是任意的,应遵循以下几条规则:
● 变量名必须是一个有效的标识符。
● 变量名不能使用Python中的保留字。
● 慎用小写字母l和大写字母O。
● 应选择有意义的单词作为变量名。
为变量赋值可以通过等号(=)来实现。语法格式为:
变量名=value
例如,创建一个整型变量,并为其赋值为1024,可以使用下面的语句:
number=1024 # 创建变量number并赋值为1024,该变量为数字型
这样创建的变量就是数字型的变量。如果直接为变量赋值一个字符串,那么该变量即为字符串类型。例如下面的语句:
nickname="唐家三少" # 字符串类型的变量
另外,Python是一种动态类型的语言,也就是说,变量的类型可以随时变化。例如,在PyCharm中,创建变量nickname,首先为该变量赋值为字符串“唐家三少”,并输出该变量的类型,可以看到该变量为字符串类型;然后将该变量赋值为数值1024,并输出该变量的类型,可以看到该变量为整型。执行过程如下:
>>>nickname="唐家三少" >>>print(type(nickname)) <type'str'> >>>nickname=1024 >>>print(type(nickname)) <type'int'>
在Python语言中,使用内置函数type()可以返回变量的类型。
在Python中,允许多个变量指向同一个值。例如,将两个变量都赋值为数值2048,再分别应用内置函数id()获取变量的内存地址,将得到相同的结果。执行过程如下:
>>>no=number=1024 >>>id(no) 140206854436088 >>>id(number) 140206854436088
在Python语言中,使用内置函数id()可以返回变量所指的内存地址。
常量就是程序运行过程中值不能改变的量,比如现实生活中的居民身份证号码、数学运算中的π值等,这些都是不会发生改变的,它们都可以定义为常量。
在内存中存储的数据可以有多种类型。例如,一个人的姓名可以用字符类型存储,年龄可以使用数字类型存储,婚姻状况可以使用布尔类型存储。这里的字符类型、数字类型、布尔类型都是Python语言中提供的基本数据类型。下面将详细介绍Python语言中的基本数据类型。
在Python语言中,数字类型主要包括整数、浮点数和复数。
整数用来表示整数数值,即没有小数部分的数值。在Python语言中,整数包括正整数、负整数和0,并且它的位数是任意的(当超过计算机自身的计算功能时,会自动转用高精度计算),如果要指定一个非常大的整数,只需要写出其所有位数即可。
整数类型包括十进制整数、八进制整数、十六进制整数和二进制整数。
● 十进制整数:是我们日常生活中采用的整数,由0~9组成,进位规则为“逢十进一”。例如,下面的数值都是有效的十进制整数。
31415926537932384626 666666666666 -2018 0
● 八进制整数:由0~7组成,进位规则为“逢八进一”,并且以Oo/00开头,如Oo123(转换成十进制数为83)、-0o123(转换成十进制数为-83)。
● 十六进制整数:由0~9、A~F组成,进位规则为“逢十六进一”,并且以Ox/0X开头,如Ox25(转换成十进制数为37)、0Xb0le(转换成十进制数为45086)。
● 二进制整数:由0和1两个数组成,进位规则是“逢二进一”,如101(转换成十制数为5)、1010(转换成十进制数为10)。
浮点数由整数部分和小数部分组成,主要用于处理包含小数的数,例如:1.414、0.5、-1.732、3.1415926535897932384626等。浮点数也可以使用科学记数法表示,例如:2.7e2、-3.14e5和6.16e-2等。
Python中的复数与数学中的复数的形式完全一致,都是由实部和虚部组成,并且使用j或J表示虚部。当表示一个复数时,可以将其实部和虚部相加。例如,一个复数,实部为3.14,虚部为12.5j,则这个复数为3.14+12.5j。
字符串就是连续的字符序列,可以是计算机所能表示的一切字符的集合。在Python中,字符串属于不可变序列,通常使用单引号(' ')、双引号("")或者三引号(''''''或"""""")引起来。这3种引号形式在语义上没有差别,只是在形式上有些差别。其中单引号和双引号中的字符序列必须在同一行上,而三引号内的字符序列可以分布在连续的多行上。例如,定义3个字符串类型变量,并且应用print()函数输出,代码如下:
title='我喜欢的名言警句' # 使用单引号,字符串内容必须在同一行 mot_cn="命运给予我们的不是失望之酒,而是机会之杯。" # 使用双引号,字符串内容必须在同一行 # 使用三引号,字符串内容可以分布在多行 mot_en='''Ourdestinyoffersnotthecupofdespair, butthechanceofopportunity.''' print(title) print(mot_cn) print(mot_en)
字符串开始和结尾使用的引号形式必须一致。另外当需要表示复杂的字符串时,还可以嵌套使用引号。
例如,下面的字符串也都是合法的。
'在Python中也可以使用双引号("")定义字符串'
"'(…)nnn'也是字符串"
"""---'"_"***"""
Python中的字符串还支持转义字符。所谓转义字符是指使用反斜杠(\)对一些特殊字符进行转义。常用的转义字符如表1.2所示。
表1.2 常用的转义字符及其说明
布尔类型主要用来表示真值和假值。在Python中,标识符True和False被解释为布尔值。另外,Python中的布尔值可以转换为数值,True表示1,False表示0。
Python中的布尔类型的值可以进行数值运算,例如,False+1的结果为1。但是不建议对布尔类型的值进行数值运算。
在Python中,所有的对象都可以进行真值测试。其中,只有下面列出的几种情况得到的值为假,其他对象在if或者while语句中得到的值都为真。
● False或None,数值中的0包括0、0.0、虚数0。
● 空序列,包括字符串、空元组、空列表、空字典。
● 自定义对象的实例,该对象的_bool__方法返回False或者_len_方法返回0。
Python是动态类型的语言,也称为弱语言类型语言,不需要像Java或者C语言一样在使用变量前声明变量的类型。虽然Python不需要先声明变量的类型,但有时仍然需要用到类型转换。
在Python中,提供了如表1.3所示的函数进行数据类型的转换。
表1.3 常用类型转换函数及其作用
运算符是一些特殊的符号,主要用于数学计算、比较大小和逻辑运算等。Python的运算符主要包括算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符和位运算符。下面介绍一些常用的运算符。
算术运算符是处理四则运算的符号,在数字的处理中应用得非常多。Python中常用的算术运算符如表1.4所示。
表1.4 算术运算符
在算术运算符中使用%求余,如果除数(第二个操作数)是负数,那么取得的结果也是一个负值。
赋值运算符主要用来为变量等赋值。使用时,可以直接把基本赋值运算符“=”右边的值赋给左边的变量,也可以在进行某些运算后再赋值给左边的变量。Python中常用的赋值运算符如表1.5所示。
表1.5 常用的赋值运算符
混淆=和==是编程中最常见的错误之一。很多语言(不只是Python)都使用了这两个符号,另外很多程序员也经常会用错这两个符号。
比较运算符,也称关系运算符,用于对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回True,如果为假,则返回False。比较运算符通常用在条件语句中作为判断的依据。Python中的比较运算符如表1.6所示。
表1.6 比较运算符
逻辑运算符是对真和假两种布尔值进行运算,运算后的结果仍是一个布尔值。Python中的逻辑运算符主要包括and(逻辑与)、or(逻辑或)和not(逻辑非)。表1.7列出了逻辑运算符的用法和说明。
表1.7 逻辑运算符
使用逻辑运算符进行逻辑运算时,其运算结果如表1.8所示。
表1.8 使用逻辑运算符进行逻辑运算的结果
位运算符是把数字看作二进制数来进行计算的,因此,需要先将要执行运算的数据转换为二进制,然后才能进行执行运算。Python中的位运算符有位与(&)、位或(|)、位异或(^)、取反(~)、左移位(<<)和右移位(>>)运算符。
整型数据在内存中以二进制的形式表示,如7的32位二进制形式如下:
00000000000000000000000000000111
其中,左边最高位是符号位,若为0则表示正数,若为1则表示负数。负数采用补码表示,如-7的32位二进制形式如下:
11111111111111111111111l11111001
位与运算的运算符为“&”,运算法则是:两个操作数的二进制表示,只有对应数位都是1时,结果数位才是1,否则为0;如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
位或运算的运算符为“|”,运算法则是:两个操作数的二进制表示,只有对应数位都是0,结果数位才是0,否则为1;如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
位异或运算的运算符是“^”,运算法则是:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果为0,否则为1;若两个操作数的精度不同,则结果数的精度与精度高的操作数相同。
取反运算也称位非运算,运算符为“~”。运算法则是:将操作数中对应的二进制数1修改为0,0修改为1。
左移位运算的运算符是“<<”,运算法则是:将一个二进制操作数向左移动指定的位数,左边(高位端)溢出的位被丟弃,右边(低位端)的空位用0补充。左移位运算相当于乘以2的n次幂。
所谓运算符的优先级,是指在应用中哪一个运算符先计算,哪一个后计算,与数学的四则运算应遵循的“先乘除,后加减”是一个道理。
Python的运算符的运算规则是:优先级高的运算先执行,优先级低的运算后执行,同一优先级的操作按照从左到右的顺序进行。也可以像四则运算那样使用圆括号,括号内的运算最先执行。表1.9按从高到低的顺序列出了运算符的优先级,同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
表1.9 运算符的优先级
在编写程序时尽量使用圆括号(())来限定运算次序,避免运算次序发生错误。
从第一个Python程序开始,我们一直使用print()函数向屏幕上输出一些字符,这就是Python的基本输出函数。除了print()函数,Python还提供了一个用于进行标准输入的input()函数,用于接收用户从键盘上输入的内容。
在Python中,使用内置函数input()可以接收用户的键盘输入,基本语法格式如下:
variable=input("提示文字")
其中,variable为保存输入结果的变量,双引号内的文字用于提示要输入的内容。例如,想要接收用户输入的内容,并保存到变量tip中,可以使用下面的代码:
tip=input("请输入文字:")
在Python 3.x中,无论输入的是数字还是字符都将被作为字符串读取。如果想要接收数字,需要把接收到的字符串进行类型转换。例如,想要接收整型的数字并保存到变量age中,可以使用下面的代码:
age=int(input("请输入数字:"))
默认的情况下,在Python中使用内置的print()函数将结果输出到IDLE(Python集成开发环境)或者标准控制台上,其基本语法格式如下:
print(输出内容)
其中,输出内容可以是数字和字符串(字符串需要使用引号括起来),此类内容将直接输出,也可以是包含运算符的表达式,此类内容将输出计算结果。例如:
a=10 # 变量a,值为10 b=6 # 变量b,值为6 print(6) # 输出数字6 print(a*b) # 输出变量a*b的结果60 print(aifa>belseb) # 输出条件表达式的结果10 print("成功的唯一秘诀:坚持到最后") # 输出字符串“成功的唯一秘诀:坚持到最后”
在Python中,默认情况下,一条print()语句输出后会自动换行,如果想要一次输出多个内容,而且不换行,可以将要输出的内容使用英文半角状态的逗号分隔。例如下面的代码将在一行输出变量a和b的值:
print(a,b)#输出变量a和b,结果为106