Python是一种脚本语言,它的代码需要在专门的解释器环境下运行,并且Python提供了两种运行方式:一种是在交互式解释器环境下运行语句,另一种是使用Python脚本运行语句。
进入Python的交互式解释器环境非常简单,直接在命令行中输入python,然后按回车键即可,如图2-1所示。
图2-1 Python解释器命令行
在进入Python的交互式环境之后,就可以输入并执行Python语句了。例如,著名的“Hello World”语句在Python中的语法格式如下。
print "Hello World"
执行效果如图2-2所示。
图2-2 Python执行语句
如果希望使用Python脚本的方式来执行语句,那么需要先新建一个空白的文档,并输入下面的代码。
print "Hello, Python!"
最后将文档保存为以.py结尾的Python脚本文件,如test.py。之后就可以执行这个Python脚本,在命令行输入如下命令即可。
python test.py
运行效果如图2-3所示。
图2-3 Python脚本执行
注意 执行上述代码时,请确保Python已经安装完成,并已配置好环境变量。在执行脚本文件的时候,需要先进入Python脚本文件所在的目录。
Python的语法格式比较简单,它不像C、C++、Java那样使用{}来标识代码块。Python直接使用缩进作为代码块标识,缩进的方式可以是两个空格、4个空格、一个Tab等。通常推荐的是以4个空格来作为一个缩进。如果习惯使用Tab来缩进的话,那么可以设置IDE的1个Tab代表4个空格。
值得注意的是,并不是所有的Python缩进都会被视为代码块。只有那些以冒号结尾的语句之后的缩进才被认为是代码块。一个典型的Python脚本语法如下所示。
从上述代码中可以发现,Python的控制语句是不需要包含在()之中的,这也是与Java等编译型语言不一样的地方。
在Python的语法中使用“#”开头的内容来表示注释。如果是多行注释,则可以直接使用三个引号来表示,代码如下。
在Python中一条语句默认以新的换行来表示结束。除此之外,还可以以分号来显式地表示结束。更可以通过“\”作为续行符来跨行表示一条语句。示例如下。
最后,Python标识符是由字母、数字、下画线组成。所有标识符可以包括英文、数字以及下画线(_),但不能以数字开头。典型的示例如下。
##正确的示例 abc123_ = 'right' ABC_123 = 'right' _foo = 'foo' __foo = 'foo2' __init__ = '__init__' ##错误的示例 123abc_ = 'wrong'
其中,以下画线开头的标识符是有特殊意义的。以单下画线开头(如_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用from xxx import *而导入;以双下画线开头的(如__foo)代表类的私有成员;以双下画线开头和结尾的(如__foo__)代表Python里特殊方法专用的标识,如__init__()代表类的构造函数。
注意 Python中的标识符是区分大小写的。大小写不同的标识符表示的是不同的内容。
变量是计算机语言中不可缺少的一个名词,它属于标识符的一种。正如在数学中变量可以代表任意数字一样,在Python中变量可以用来代表任意类型的对象。每当我们给一个变量赋值的时候,这个变量就代表了这个特定的对象。变量创建和赋值语句如下。
a = 1 b = 'abc'
在Python中创建变量不需要像Java等语言那样,先申明一个变量并指定变量类型。因为Python中变量本身是无类型区分的,所以可以直接创建并赋以任意类型的值。另外,Python中所有的数据类型都是基于Object对象的,从这个角度也可以理解Python的变量可以进行任意类型赋值,因为本质上变量指向的都是一个对象。
Python中的变量不区分类型,但变量所赋予的数据却是有类型区分的。Python常见的数据类型如下。
1.字符串
字符串是由数字、字母、符号等组成的一串用引号括起来的内容。其常见的内容形式如下。
'hello world' "i am 5 years old" '''my name is jack''' """i am string"""
上面的几种形式都是正常的字符串,因为在Python中规定了单引号、双引号和三引号都是可以用来定义字符串的。还可以把字符串赋值给变量,代码如下。
a = ' i am 5 years old ' print a
在Python解释器环境中执行上述两条语句,最终的命令行会输出,如图2-4所示。
图2-4 Python变量打印
2.整型
整型就是数学中的整数类型,包括正整数、负整数和零,如1、100、0、-20等。Python中整型所能支持的范围与计算机的位数有关。例如,32位的机器其整数范围在-2 31 ~2 31 -1次,即-2147483648到2147483647之间。
与字符串一样,整型也可以赋值给变量。方式如下。
n = -1 m = 100 k = 0
此外,整型和字符串之间还可以进行类型转换。所有的整型都可以转换成字符串类型,我们所要做的就是调用一下str函数。在解释器环境下输入如下命令。
str(100)
执行后将得到一个字符串的内容,如图2-5所示。
图2-5 Python类型转换
3.长整型
长整型就是比整型更大更长的整型,即超出整型范围的整型数字都属于长整型。例如,32位机器下的2147483648、-2147483649。在Python中定义长整型有两种方式:一种是显式的定义,另一种是隐式的定义。具体如下所示。
上面定义的三个变量内容所属的类型都是长整型。有些读者可能会想到以大小写L结尾的显式定义,可以很方便地知道是长整型,而以隐式方式定义的数字怎么快速地确定它的类型呢?答案是使用type函数来查看变量值的类型,使用方式如下。
解释器环境下执行上述命令后的效果如图2-6所示。
图2-6 Python变量类型查看1
4.浮点型
浮点型对应的是数学中的小数,例如,1.23、3.1415、-20.37。除了常规的小数表示法之外,在Python中还可以使用科学计数法来表示浮点数。例如,1.23也可以表示为12.3乘以10 -1 ,具体表示为12.3e-1。浮点型的数值赋值方式如下。
f = 1.23 type(f) f1 = 12.3e-1 type(f1) f2 = 1.0 type(f2)
上述语句在解释器环境执行的效果如图2-7所示。
图2-7 Python变量类型查看2
5.布尔型
布尔型数据在程序中只有两个值,即真和非真。在Python中使用True表示真,False表示非真。布尔值可以通过直接赋值的方式获得,如下所示。
a = True b = False
或者是通过布尔运算获得布尔数值,如下所示。
布尔数值通常会在条件判断中使用。在2.2节的控制语句中,将介绍如何使用布尔值进行条件判断。
提示 虽然布尔值只有True和False,但在条件判断表达式中其他类型的数据也有布尔值的等效作用。例如,字符串中的空串、整型中的0对应的布尔值为False,其他数值都对应True。
6.空值
空值在Python中是指没有任何内容的值,它既不是0也不是空串,可以直接理解为空。在Python中使用None来表示,它在条件判断表达式中与False有等效的值。空值通常只能通过赋值来获得。方式如下。
a = None
运算符指的是可以对操作数进行运算的操作符。例如,2+3中的+就是运算符,而2和3就是操作数。在Python中像这样的运算符有很多,并且可以分为不同的类。主要的运算符分类如下所示。
1.算术运算符
算术运算符是指可以进行算术运算的操作符。Python中算术运算符有如下几种。
在上面所列的运算符中,只有/和//运算符需要注意。/运算符在整数除以整数的情况下结果也会是整数,想要得到小数部分的数据,则要替换其中任意一个整数为对应的浮点型,如下所示。
5 / 2 = 2 5.0 / 2 = 2.5 5 / 2.0 = 2.5 5.0 / 2.0 = 2.5
//运算符也被叫作地板除运算符,它永远只会返回商数中的整数部分,效果如下。
2 // 4 = 0 4 // 2 = 2 5 // 2 = 2 5 // 2.0 = 2.0 5.0 // 2 = 2.0
2.比较运算符
比较运算符主要用于对操作数进行比较。Python中比较运算符有如下几种。
经过比较运算符操作后得到的结果为布尔型。即其运算结果只有True和False这两种,当比较条件满足运算符时结果为True,否则为False。
3.逻辑运算符
逻辑运算符主要用来做逻辑运算,即对真和假做逻辑运算。运算符有如下几类。
提示 在Python中有一个惰性计算的概念,其中的一种支持方式就是逻辑或运算符。具体而言就是在使用or运算符时,如果其左侧的操作数为True则会直接返回结果,不再对其右侧操作数进行检查。因为在该条件下不论右侧是否为True,返回的结果都将为True,所以右侧的检测可以省略掉。
4.位运算符
位运算符用于对操作数进行二进制按位运算。在计算中任何的数最终都会以二进制的方式表示,而我们通常所用到的十进制数也一样可以用二进制表示。例如,十进制中的12对应二进制的1100,十进制的20对应二进制中的10100。那么当我们使用位运算符对12和20进行位运算时,实际上就是对1100和10100进行位运算。位运算有如下几类。
位运算符运算样例结果如下。
5.赋值运算符
赋值运算符主要用于把表达式的运算结果或数值赋值为变量。Python中支持的赋值运算符如下。
6.成员运算符
成员运算符用于测试集合对象中是否包括特定的成员。支持该运算符的集合包括:字符串、元组、列表、字典、集合(set)等。成员运算符分类如下。
成员运算符的使用样例如下。
7.身份运算符
身份运算符用于比较两个对象是否为相同的存储单元。所谓的相同存储单元即同一个内存存储地址。如果用身份运算符确认了存储单元相同,则比较的两个对象即为同一个对象。身份运算符的种类如下。
身份运算符的使用样例如下。
8.运算符优先级
前面已经学习了Python中的运算符成员。它们不仅分门别类还可以同时使用出现在表达式中,而当它们同时使用时就会有优先级顺序的问题。同其他语言一样,在Python中不同运算符之间也会有不同的优先级顺序。具体的顺序由高到低排列如下。
上面的运算符中,相同优先级的运算符其优先级顺序按照从左至右先出现先运算的原则。例如,+和-的优先级相同,则先在左侧出现的优先级更高。
除了上面所列出的默认优先级之外,如果想提升某些运算符的优先级,可以使用()来实现。例如,*的优先级高于+的优先级,正常结果如下。
x = 2 + 3 * 5 #=> 17
如果提升了+运算符的优先级,则结果会不一样,如下所示。
x = (2 + 3) * 5 #=> 25
9.表达式
所谓的表达式就是指使用各种运算符和操作数组成的算术式。最常见的表达式形式如下。
与其他语言不同的是,Python中除了可以支持上面列出的普通表达式之外,还支持具有特定功能的表达式,它们分别如下。
这些表达式具有一些不一样的功能,由于部分知识点还没有讲到,将会在后面的章节中一一介绍。