![]() |
2.2 Python语法基础 |
在 Python中程序运行时不会被更改的量叫作常量,比如数字 7 和字符串"abc"在运行时一直都是数字7与字符串"abc",不会被更改成其他量,它们就是常量。除此之外,我们可以定义任意字符串为指定值的常量。常量有一个特点,即一旦被绑定,就不能更改。在Python中是不能像C等编程语言一样通过const来定义常量的,在Python中可以直接创建而不需要定义。在 Python 中随着程序的运行而更改的量叫作变量,比如我们可以定义一个变量i,并将数字5赋给变量i,再将数字7赋给变量i,这时i的值就变成了7。可见,i 的值是可以更改的,像 i 这样的可以更改值的量叫作变量。变量有一个特点:既可被赋值,也可被更改。
在Python中数的类型主要有5种,分别为有符号整数型(int)、长整型(long)、浮点型(float)、布尔型(bool)和复数型(complex)。具体如下所示:
◎ 0、1、-1、1009、-290等是int型;
◎ 87887l、-90990l、234567l等是long型;
◎ 2.7788、3.277、8.88等是float型;
◎ bool型只有True和False这两种类型。
◎ 4+2j、-9+20j、56+7j等是复数型。
示例如下:
在Python中用引号引起来的字符集叫作字符串,例如'hello'、"my Python"、"2+3"等,示例如下:
注意,在Python中字符串是不支持修改的。
在 Python 字符串中使用的引号可以是单引号、双引号或三引号,但它们的使用方法不同,示例如下:
如果想在Python里输出一个"It's a dog!"字符串,则应该如何编写Python程序呢?有两种方法,一种方法是通过如上所示的单双引号间插使用,即print "It's a dog!",用双引号来包含有单引号的字符串;另一种方法是使用转义符“\”,示例如下,其中“\n”代表换行。
在Python里,如果在字符串中包含转义符‘\’,但需要将它原样保留,不进行任何处理,则还可以使用自然字符串标识,告诉 Python 在字符串中的‘\’不是转义字符,即在字符串前加上r,示例如下:
如果需要重复输出一个字符串,则除了可以手动输入,还可以使用字符串的重复运算符。比如,若要将 hello重复输出20次,则可以通过"hello"*20这种运算方法由计算机自动执行重复地输出指令,示例如下:
字符串"wangxiaochuan"中的"wang"、"xiao"等都是"wangxiaochuan"的子字符串。如果想将一个字符串中的子字符串取出来,就要进行子字符串运算。而子字符串的运算方法主要有两种,一种是索引运算法[],另一种是切片运算法[:],示例如下:
注意,Python是以0作为开始来计算位数的,所以c1[1]是“a”而不是“w”。“:”代表从第几位取到第几位,如果“:”的前后都是数字,那么其作用是“包前不包后”,c1[4:7]代表取c1的[4,5,6]位置的元素,不包括第7位的元素。
Python的基本数据类型有4种:列表、元组、集合和字典。Python中的各种库如Pandas也有自己的数据类型,但都是由最基本的列表、元组、字典等组合而成的。
在 Python 中没有数组的概念,与数组最接近的概念就是列表和元组。列表是用来存储一连串元素的容器,用[]来表示。比如,在一个班里有30个学生,我们需要将这30个学生安排到一间教室里上课,如果把这30个学生分别比作元素,那么这个教室就是数组;这30个学生是按座位坐好且有序排列的,在数组中的元素也是有序排列的,示例如下:
列表可以存放不同类型的数据,是最常用的 Python 数据类型。与字符串不同,列表元素支持改写,示例如下:
在 Python 中与数组类似的还有元组,元组中的元素也进行索引计算。列表和元组的区别在于:列表中的元素的值可以修改,而元组中的元素的值不可以修改,只可以读取;另外,列表的符号是[],而元组的符号是(),示例如下:
元组比列表更加安全,因为不能修改,所以可以安全地保存一个引用,而不用担心里面的内容被其他程序修改,从而导致逻辑错误。
在 Python 中集合主要有两个功能:一个功能是进行集合操作,另一个功能是消除重复的元素。集合的格式是set(元素),示例如下:
在Python中的字典也叫作关联数组,可以理解为列表的升级版,用大括号{}括起来,格式为{key1:value1,key2:value2,….,keyn:valuen},即:字典的每个键值(key=>value)对用冒号分割,每个对之间用逗号分隔,整个字典包括在花括号中。
如下所示,我们可以理解为字典k包含了“姓名”与“籍贯”方面的信息,也可以在字典中加入新的key(爱好):
通过k.keys()可以取到字典的key字段。Python字典包含了以下内置函数。
◎ cmp(dict1,dict2):比较两个字典元素。
◎ len(dict):计算字典元素的个数,即键的总数。
◎ str(dict):输出字典可打印的字符串表示。
◎ type(variable):返回输入的变量类型,比如,如果变量是字典,就返回字典类型。
Python字典包含了以下内置方法。
◎ dict.clear():删除字典内的所有元素。
◎ dict.copy():返回一个字典的浅复制。
◎ dict.fromkeys():创建一个新字典,将序列seq中的元素作为字典的键,将val作为字典的所有键对应的初始值。
◎ dict.get(key,default=None):返回指定键的值,如果值不在字典中,则返回default值。
◎ dict.has_key(key):如果键在字典dict中,则返回true,否则返回false。
◎ dict.items():以列表形式返回可遍历的(键,值)元组数组。
◎ dict.keys():以列表形式返回一个字典的所有键。
◎ dict.setdefault(key,default=None):和get()类似,但如果键不存在于字典中,则将会添加键并将值设为default。
◎ dict.update(dict2):把字典dict2的键/值对更新到dict里。
◎ dict.values():以列表形式返回字典中的所有值。
我们在 Python 中编程时使用的名称叫作标识符,变量和常量就是标识符的一种。在Python中标识符的命名是有规则的,按正确命名规则命名的能使用的标识符叫作有效标识符,不能使用的标识符叫作无效标识符。
有效标识符的命名遵循以下规范。
◎ 标识符的第1个字符必须是字母或下画线,不能出现数字或其他字符。
◎ 标识符除第1个字符外,其他部分可以是字母、下画线或数字。
◎ 标识符是大小写敏感的,比如,name与Name是不同的标识符。
Python 中的关键字是指系统自带的具备特定含义的标识符。常用的 Python 关键字主要有:and、elif、global、or、else、pass、break、continue、import、class、return、for 和while。现在,查看具体的Python关键字:
Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆对象。正因为如此,在 Python 中创建一个类和对象是很容易的,当然,如果习惯面向过程或者函数的写法也是可以的,在Python中没有硬性的限制。
Python的面向对象特征如下。
在面向对象程序设计中的术语对象(Object)基本上可以看作数据(特性)及由一系列可以存取、操作这些数据的方法所组成的集合。传统意义上的“程序=数据结构+算法”被封装“掩盖”,并简化为“程序=对象+消息”。对象是类的实例,类的抽象则需要经过封装。封装可以让调用者直接使用对象而不用关心对象是如何构建的。
我们的直觉是,继承是一种复用代码的行为。我们可以将继承理解为,它是以普通的类为基础建立的专门的类对象,子类和它继承的父类是IS-A的关系。
不同于 C#,Python 是支持多重类继承的(C#可继承自多个 Interface,但最多继承自一个类)。多重继承机制有时很好用,但是它容易让事情变得复杂。
多态意味着可以对不同的对象使用同样的操作,但它们可能会以多种形态呈现结果。
在Python中一切皆对象,这意味着在Python中定义的一个数字或字符串都是对象,都可以直接使用其方法,示例如下:
Python中的逻辑行主要指一段代码在逻辑上的行数,而物理行指的是我们实际看到的行数,示例如下:
在 Python 中一个物理行一般可以包含多个逻辑行,在一个物理行中编写多个逻辑行时,逻辑行与逻辑行之间用分号隔开。在每个逻辑行的后面必须有一个分号,但是我们在编写程序时,如果一个逻辑行占了一个物理行最后的位置,则这个逻辑行可以省略分号。
在 Python 中对逻辑行行首的空白是有规定的,逻辑行行首的空白不对,就会导致程序执行出错。与其他语言相比,这是一个很重要的不同点,示例如下:
在Python中对缩进的空白是有要求的,示例如下:
在Jupyter Notebook中可以通过Tab键完成右缩进,通过Shift+Tab键完成左缩进。
在 Python 中一般通过#进行注释,从#开始一直到一行(物理行)结束的部分都是注释。