执行Python命令的两种方式

1. 交互式模式下执行

安装好了Python程序以后,在windows的命令行或linux、mac的终端界面输入python命令即可进入python的交互模式,在这个模式里输入python语句,按回车即可返回执行结果。一般用于调试。

2. 脚本执行

在.py文件中写好python语句,然后使用python script.py这样的格式来执行python脚本,或者在linux平台上给脚本添加可执行权限,使用绝对路径或相对路径的方式来执行脚本。


Python程序的执行流程

我们编写的.py文件称为python脚本,在我们使用python命令执行python脚本的时候,python解释器首先将python脚本中的语句翻译成一组字节码命令,保存在脚本相同目录下的__pycache__目录下,以.pyc结尾的文件中,然后再将python字节码发送到PVM(Python virtual machine,python虚拟机)中,由PVM执行并返回最终的结果。PVM是Python程序的一部分。

Python程序的基本概念

1. 程序由模块构成

2. 模块包含语句

3. 语句包含表达式

4. 表达式建立并处理对象


一. 内置对象

数字、字符串、列表、字典、元组、文件、集合、其他类型(type,None、bool)、编程单元类型(函数、模块、类)、与实现相关的类型(编译的代码堆栈跟踪traceback)。

内置对象的特点:

  • 内置对象使程序更容易编写,对于简单的任务,使用内置类型就可以完成工作。

  • 内置对象是扩展的组件,可以使用内置数据类型来组合出更复杂的数据类型。

  • 内置对象比自定义的数据结构更有效率,内置对象一般用C语言实现,效率更高。

  • 内置对象是语言标准的一部分,因此对不同平台的兼容性更好。


常见的内置对象

1. 数字

Python支持的数字类型有整数、浮点数、复数、八进制数、固定精度的十进制数、十六进制数、带分子和分母的有理分数等。某些特定的数字可能需要特定的模块或第三方库的支持。

数字里的常用模块math、random,前者用来提供数字里常见的常量例如pi、e等,后者用于提供随机数生成器和随机数选择器。


2. 字符串

用来记录文本信息,再Python中作为序列的一个子集,支持序列的常见操作,例如len()函数、索引、分片等。

字符串的一个重要特性——不可变性,创建后就不能就地改变

字符串自带的一些常见方法:find()、replace()、split()、rstrip()、格式化操作等。

r开头的字符串表示字符串自身,没有特殊含义,转义字符在这样的字符串中不起作用。

u开头的字符串表示unicode字符串,Python3.x默认支持Unicode字符串,不需要加u。

re模块用于处理字符串的模式匹配。


3. 列表

列表是这个语言提供的最通用的序列,是一个任意类型的对象的位置相关的有序集合,没用固定大小,大小可变,可根据索引对元素复制,支持各种列表的方法进行调用。

支持常见序列操作,例如索引、分片等。

列表自带方法append()、sort()、reverse()、pop()等。


4. 字典

字典不是序列,而是一种映射,通过键来进行存储,将键映射到值。字典的键具有唯一性,而键对应的值可以是多种的对象,例如字符串、数字、列表、集合,甚至是字典本身。


5. 元组

相当于不可变列表,也是一种序列,但是具有不可变性。也支持混合和嵌套多种元素。


6. 文件

在Python中,文件被当作对象来处理。文件对象是Python代码对电脑上外部文件的主要接口。没有特定的常量语法创建文件。要创建一个文件对象,需要调用处理文件对象的open函数并传给它一个文件名文件处理模式字符串

文件对象支持的方法read、readline、readlines、write、writelines、seek、close等。

额外的类文件工具:管道(PIPE)、先进先出队列(FIFO)、套接字(socket)、通过键访问文件、对象持久、基于描述符的文件、关系数据库和面向对象数据库接口。


7. 集合

不是映射也不是序列,是唯一的不可变的对象的无序集合。通过调用内置函数set函数创建,或者使用Python3.0中新的集合常量和表达式创建,支持一般的数学集合操作,集合更像是一个无值的字典的键。

X = set('spam')

Y = {'h', 'a', 'm'}

上面是两种创建集合的方式。

这些对象很多都支持对象特有的方法,具体内容会在单独介绍对象时讲解。在python命令行界面中,有几个命令可以用来查看对象的帮助信息,分别时:

  • dir(obj) 方法可以看到对象的所有属性

  • ord(obj)方法查看对象的ASCII编码

  • help(obj)或 help(obj.fn) 查看对象的帮助信息或者对象方法的帮助信息。

上面介绍的都是Python核心对象类型,以及可以对它们进行的一些简单操作。


二、动态类型

1. 常量/变量

  • 字面常量

  • 变量,是一个指针,指向一块分配好的内存。

    • 变量的创建,给变量赋值时即创建了该对象

    • 变量的类型(type),变量没有类型,类型是和变量相关联的对象的属性。变量的指针指向不同的对象时,就关联到不同类型的对象上。

    • 变量的命名规则

    1. 只能包含字母、数字和下划线

    2. 只能以字母或者下划线开头

    3. 不能是Python解释器的保留字

对象的垃圾收集:当没有指针指向一个对象时,对象的引用计数器就会置零,此时对象所占用的内存空间就会放入到自由内存空间,等待后面的对象使用。这个机制的好处是不用考虑释放内存空间。

对象的引用:将一个不可变对象,如数字、字符串赋值给一个变量时,改变对象,比如说将数字+1,或者将字符串加上一个新的字符串,此时实际执行的是生成一个新的数字对象或字符串对象,然后将变量的指针重新指向新的对象。

共享引用:将一个可变对象赋值给变量时,改变可变对象时,并不会改变这个变量的指针指向。因此当两个相同的变量指向同一个可变对象时,其中一个变量进行了修改对象的操作,另一个变量的值也会发生改变。例如:

>>>L1=[1,2,3]

>>>L2=L1

>>>L2[0]=24

>>>L2

[24,2,3]

>>>L1

[24,2,3]

此时如果不想因为L2改变了列表的值而导致L1也发生改变,应该使用拷贝(copy和deepcopy方法)。在列表中讲到该知识点。


is和 '==',只有两个变量的指针指向同一块内存时,两个变量才是is关系,没有指向同一块内存,但是两个变量指向的对象完全相同,此时两个变量才是 '==' 关系。

补充内容:变量与对象之间的关系

  • 变量是一个系统表元素,拥有指向对象的连接的空间,即保存指针的空间。

  • 对象是系统分配的一块内存,有足够的空间去表示它们所代表的值,一个对象都有两个标准的头部信息,一个类型标识符去标识这个对象的类型,一个引用计数器,来决定是不是可以回收这个对象

  • 引用是自动形成的从变量到对象的指针s


2. 运算符/表达式

算术运算符:+、-、*、/(py2和py3中意义不一样)、//、%、**;

比较运算符:>,<,=,!=,>=,<=,==;

逻辑运算符:and、or、not

  • 参与运算的成员只能是bool类型,或者可以隐式转换为bool类型的类型(0,1);

  • and两正得正,两负得负,一正一负均为负

  • or 两正得正,两负得负,一正一负均为负

  • not 正得负,负得正

  • 短路操作:总是从左到右的计算,一旦能够决定表达式最终的值,将立刻停止计算并返回。即当使用and操作符时,左边的值为负则立即结束运算,使用or操作符时,当左边为正时,立即结束运算。当这种情况下需要运算操作符两边的表达式时,可以将运算符两边的表达式用临时变量代替。

位运算符:

  • bin(num) 返回num的二进制表示

  • &(按位与)、|(按位或)、^(按位异或,同为1或同为0时为0,不同时为1)、~(按位取反~x=-(x+1))

  • >>,<<(左移和右移操作符)

其他运算符:

  • 赋值运算符=

  • 成员运算符in(内置数据结构的内容)

  • 身份运算符is、is not(面向对象的内容)

运算符的优先级:运算符根据优先级来计算。

  • 算术运算符高于比较运算符

  • 比较运算符高于逻辑运算符

表示式是由常量/变量和运算符组成的公式。


3. 程序控制结构

顺序结构:自上而下执行的表达式组合;

分支结构:

  • 单分支:if condition: block

  • 双分支:if....else....

  • 多分支:if...elif...else

分支结构里永远只有一个分支会被执行

循环结构:

  • for element in iterator: block

  • while condition: block

  • break、continue,break用于提前结束循环,continue用于跳过当前循环剩下的部分。

* 循环体中绝对不要修改可迭代对象。

for _ in range(0,3)  #表示不使用 _ 这个变量,只是进行三次循环。

嵌套结构:if、for、while等多种结构结合的结构。

0、空的内置结构、None bool的结构都是False,非0、非空的内置结构都是True


本节知识点:

1. 知道Python中常见的内置类型和这些内置类型常用的方法(len、索引、分片等)。

2. 掌握Python中创建变量的规则,变量引用不同对象时,变量和对象之间的关系。包括以下几点:

  • 变量命名规则

  • 变量引用不可变对象时,更改对象之后,变量指针的变化

  • 变量引用可变对象时,更改对象之后,变量和对象的关系。

3. 熟悉简单的运算符操作。

4. 熟悉Python中基本的控制结构。