Ch02Python语言基础•本章要点:Python程序概述Python对象和引用标识符及其命名规则变量和赋值语句表达式和运算符语句函数和模块类和对象模块和包Python程序概述•【例2.1】已知三角形的三条边,求三角形的面积(area.py)。提示:假设三条边长分别为a、b和c,则三角形的面积s=,其中,h为三角形周长的一半•Python程序构成:模块、语句、表达式和对象)ch(*b)h(*)ah(*hPython对象和引用•数据表示为对象–对象本质上是一个内存块,拥有特定的值,支持特定类型的运算操作•Python3中,一切皆为对象–每个对象由标识(identity)、类型(type)和值(value)标识Python中的对象•标识(identity)用于唯一标识一个对象,通常对应于对象在计算机内存中的位置。使用内置函数id(obj1)可返回对象obj1的标识•通过内置的id()函数,可以获取一个对象唯一的id标识(CPython的实现为内存存放位置)•类型(type)用于表示对象所属的数据类型(类),数据类型(类)用于限定对象的取值范围,以及允许执行的处理操作。使用内置函数type(obj1)可以返回对象obj1所属的数据类型–通过内置的type()函数,可以判断一个对象的类型•值(value)用于表示对象的数据类型的值。使用内置函数print(obj1)可返回对象obj1的值•【例2.2】使用内置函数type()、id()和print()查看对象•【例2.3】查看Python内置函数对象创建实例对象•使用字面量创建实例对象–12、101等表示int数据类型的值;0.17、3.14等表示float数据类型的值;True和False表示bool数据类型的值;'Hello,World'、'张三'等表示str数据类型的值–【例2.4】使用字面量创建实例对象•使用类对象创建实例对象–【例2.5】使用类对象创建实例对象数据类型•Python数据类型定义为一个值的集合以及定义在这个值集上的一组运算操作•每个对象存储一个值,例如,int类型的对象可以存储值1234、99或1333•一个对象上可执行且只允许执行其对应数据类型定义的操作–两个int对象可执行乘法运算,但两个str对象则不允许执行乘法运算变量和对象的引用•Python对象是位于计算机内存中的一个内存数据块•为了引用对象,必须通过赋值语句,把对象赋值给变量(也称之为把对象绑定到变量)•指向对象的引用即变量•【例2.6】使用赋值语句把对象绑定到变量Python是动态类型语言•即变量不需要显式声明数据类型•根据变量的赋值,Python解释器自动确定其数据类型•通过标识符和赋值运算符(=),可以指定某个变量指向某个对象,即引用该对象•【例2.7】变量的动态类型示例Python是强类型语言•即每个变量指向的对象均属于某个数据类型,即只支持该类型允许的运算操作•【例2.8】变量的强数据类型示例对象内存示意图(1)•Python程序运行时,在内存中会创建各种对象(位于堆内存中),通过赋值语句,将对象绑定到变量(位于栈内存中),通过变量引用对象,进行各种操作•多个变量可以引用同一个对象•如果一个对象不再被任何有效作用域中的变量引用,则会通过自动垃圾回收机制,回收该对象占用的内存对象内存示意图(2)•【例2.9】变量增量运算示例以及相应的对象内存示意图•第一条语句,创建一个值100的int对象,并绑定到变量i;第二条语句,先计算表达式i+1的值,然后创建一个值为101的int对象,并绑定到变量i对象内存示意图(3)•【例2.10】交换两个变量的示例以及相应的对象内存示意图对象的值比较(==)和引用判别(is)•==运算符判断两个变量指向的对象的值是否相同•is运算符判断两个变量是否指向同一对象•【例2.11】对象的值比较(==)和引用判别(is)示例不可变对象(immutable)和可变对象(mutable)•不可变对象一旦创建,其值就不能被修改,例如:int、str、complex等•可变对象的值可以被修改–Python对象的可变性取决于其数据类型的设计,即是否允许改变其值•【例2.12】不可变对象示例•【例2.13】不可变对象示例标识符及其命名规则•标识符是变量、函数、类、模块和其他对象的名称•标识符的第一个字符必须是字母、下划线(“_”),其后的字符可以是字母、下划线或数字•一些特殊的名称,如if、for等保留关键字,不能作为标识符•例如,a_int、a_float、str1、_strname、func1为正确的变量名;而99var、It'sOK、for(关键字)为错误的变量名标识符注意事项•(1)Python标识符区分大小写。例如,ABC和abc视为不同的名称•(2)以双下划线开始和结束的名称通常具有特殊的含义。例如,__init__为类的构造函数,一般应避免使用•(3)避免使用Python预定义标识符名作为自定义标识符名。例如:NotImplemented、Ellipsis、int、float、list、str、tuple等保留关键字•关键字即预定义保留标识符•关键字不能在程序中用作标识符,否则会产生编译错误•【例2.14】使用Python帮助系统查看关键字Python预定义标识符•Python语言包含许多预定义内置类、异常、函数等,例如,float、ArithmeticError、print等•用户应该避免使用Python预定义标识符名作为自定义标识符名•使用Python的内置函数dir(__builtins__),可以查看所有内置的异常名、函数名等Python语言遵循的命名规则变量和赋值语句•对象是某个类(类型)的实例,对象由唯一的id标识•对象可以通过标识符来引用,对象引用即指向具体对象实例的标识符,也称之为“变量”•变量的声明和赋值•【例2.15】变量的声明和赋值示例链式赋值语句•链式赋值用于为多个变量赋值同一个值•【例2.16】链式赋值语句示例复合赋值语句•【例2.17】复合赋值示例删除变量(del)•del语句删除不再使用的变量•【例2.18】删除变量(del)示例系列解包赋值•将系列数据类型解包为对应相同个数的变量•【例2.19】删除系列解包示例•【例2.20】使用系列解包实现变量交换常量•Python语言不支持常量,即没有语法规则限制改变一个常量的值•Python语言使用约定,声明在程序运行过程中不会改变的变量为常量,通常使用全大写字母(可以使用下划线增加可阅读性)表示常量名•【例2.21】常量示例表达式和运算符•表达式的组成–操作数、运算符和圆括号按一定规则组成表达式•运算符的优先级控制各个运算符的计算顺序•【例2.22】表达式示例表达式的书写规则•表达式从左到右在同一个基准上书写。例如,数学公式a2+b2应该写为:a**2+b**2•②乘号不能省略,例如,数学公式ab(表示a乘以b)应写为:a*b•③括号必须成对出现,而且只能使用圆括号;圆括号可以嵌套使用运算符•运算符用于在表达式中对一个或多个操作数进行计算并返回结果值•表达式计算顺序取决于运算符的结合顺序和优先级•可以使用圆括号“()”强制改变运算顺序•【例2.24】表达式中运算符的优先级示例Python运算符及其优先级Python语句•语句是Python程序的过程构造块,用于定义函数、定义类、创建对象、变量赋值、调用函数、控制分支、创建循环等•Python语句分为简单语句和复合语句–简单语句包括:表达式语句、赋值语句、assert语句、pass空语句、del语句、return语句、yield语句、raise语句、break语句、continue语句、import语句、global语句、nonlocal语句等–复合语句包括:if语句、while语句、for语句、try语句、with语句、函数定义、类定义等•【例2.25】Python语句示例(statement.py):输入圆的半径r,计算并输出圆的周长和面积Python语句的书写规则•(1)使用换行符分隔,一般情况下,一行一条语句•(2)从第一列开始,前面不能有任何空格,否则会产生语法错误。注意,注释语句可以从任意位置开始;复合语句构造体必须缩进•(3)反斜杠(\)用于一个代码跨越多行的情况。如果语句太长,可以使用续行符(\)•(4)分号(;)用于在一行书写多条语句复合语句及其缩进书写规则•复合语句(条件语句、循环语句、函数定义和类定义,例如if、for、while、def、class等)由头部语句(headerline)和构造体语句块(suites)组成•构造体语句块由一条或多条语句组成•(1)头部语句由相应的关键字(例如,if)开始,构造体语句块则为下一行开始的一行或多行缩进代码•(2)通常缩进是相对头部语句缩进四个空格,也可以是任意空格,但同一构造体代码块的多条语句缩进的空格数必须一致对齐。如果语句不缩进,或缩进不一致,将导致编译错误•(3)如果条件语句、循环语句、函数定义和类定义比较短,可以放在同一行注释语句•以符号“#”开始,到行末结束。Python注释语句可以出现在任何位置•Python解释器将忽略所有的注释语句,注释语句不会影响程序的执行结果•【例2.26】注释语句示例空语句pass•表示一个空的代码块•【例2.27】空语句示例函数和模块•函数是可以重复调用的代码块•函数的创建和调用•声明创建函数时,可以声明函数的参数,即形式参数,简称形参;调用函数时,需要提供函数需要的参数的值,即实际参数,简称实参•函数可以使用return返回值•【例2.28】声明和调用函数示例(sayHello.py)•【例2.29】声明和调用函数getValue(b,r,n),根据本金b、年利率r和年数n,计算最终收益v内置函数•如dir()、type()、id()、help()、len()等•【例2.30】内置函数使用示例模块函数•通过import语句,可以导入模块module,然后使用module.function(arguments)的形式调用模块中的函数•【例2.31】模块的导入示例1•【例2.32】模块的导入示例2函数API•Python语言提供了海量的内置函数、标准库函数、第三方模块函数•函数的调用方法由应用程序编程接口(API)确定Python典型的函数调用类和对象•创建类对象•实例对象的创建和调用•【例2.33】类和对象示例(Person.py):定义类Person,创建其对象,并调用对象方法模块和包•包含Python代码的源文件(通常包含用户自定义的变量、函数和类)称之为模块,其扩展名为.py•功能相近的模块可以组织成包,包是模块的层次性组织结构•通过import语句,可以导入模块,并使用其定义的功能•【例2.34】模块和包示例(module1.py):求解一元二次方程x2+5x+6=0实验和习题•上机实践1~5•复习题–单选题–填空题–思考题