Python学习笔记二:编程基础概念
- Python 程序的构成
- Python文件的创建和执行
- 代码的组织和缩进
- 使用注释
- 使用\行连接符
- 对象
- 引用
- Python 是动态类型语言
- Python 是强类型语言
- 标识符
- 基本用法
- Python 标识符命名规则
- 变量和简单赋值语句
- 变量的声明和赋值
- 删除变量和垃圾回收机制
- 链式赋值
- 系列解包赋值
- 常量
- 同一运算符
- is与==区别
- 整数缓存问题
- 总结
- 基础运算符
- 复合赋值运算符
- 运算符优先级问题
Python 程序的构成
- Python 程序由模块组成。一个模块对应Python源文件,一般后缀名是:py。
- 模块由语句组成。运行Python 程序时,按照模块中语句的顺序依次执行。
- 语句是 Python 程序的构建单元,用于创建对象、变量赋值、调用函数、控制语句等。
Python文件的创建和执行
前面使用的假护士环境,每次只能执行一条语句;我了编写多条语句实现复杂的逻辑,本章开始我们通过创建Python 文件,并执行该文件。
在IDLE 环境中,我们可以以通过 File -->new 创建 Python 文件,并可编辑该文件内容。我们也可以通过 FIle–>save/save as 保存文件。一般保存成扩展名为py的文件。
需要执行编辑好的文件。可以用快捷键 F5 或者点击 Run --> Run module。
代码的组织和缩进
很多编程语言通过字符(例如:花括号{})、关键字(例如:begin/end)来划分代码块。同时,在配合代码的缩进增加可读性。“龟叔”设计 Python 语言时,直接通过缩进来组织代码块,“缩进”成为了Python语法强制的规定。
缩进时,几个空格都是允许的,但是数目必须统一。我们通常采用“四个空格”表示一个缩进。
同时,也要避免 “tab制表符”或者tab与空格混合的缩进风格。目前,常用的编辑器一般设置成:tab制表符就是4个空格。
Python 官方推荐的 PEP-8 代码风格详细说明,有兴趣的同学可以参考:
https://www.python.org/dev/peps/pep-0008/
使用注释
注释是程序中会被 Python解释器忽略的一段文本。程序员可以通过注释记录的任意想写的内容,通常是关于代码的说明。
Python中的注释只有单行注释,使用 # 开始直到行结束的部分。
>>> # 注释是个好习惯,方便自己方便他人
>>> a = [10,20,30] #生成一个列表对象,变量a引用了这个变量
使用\行连接符
一行程序长度是灭有限制的,但是为了可读性更强,通常将一行比较长的程序分为多行。这是,我们可以使用\行连接符,把它放在结束的地方。Python 解释器仍然将它们解释为同一行。
>>> a = [10,20,30,40,\
50,60,70,\
80,90,100]
>>> a
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
>>> a = ‘abcdefghijklmnopqrstuvwxyz’
>>> b = 'abcdefg\
hijklmn\
opqrst\
uvwxyz’
>>> a
‘abcdefghijklmnopqrstuvwxyz’
>>> b
‘abcdefghijklmnopqrstuvwxyz’
对象
Python 中, 一切皆对象。每个对象由:标识(identity)、类型(type)、value(值)组成。
- 标识用于唯一标识对象,通常对应于对象在计算机内存中的地址。使用内置函数id(obj)可返回对象obj的标识。
- 类型用于表示对象存储的“数据”的类型。类型可以限制对象的取值分为一级可执行的操作。可以使用type(obj)获得对象的所属类型。
- 是表示对象所存储的数据的信息。使用 print(obj)可以直接打印出值。
对象的本质就是:一个内存块,拥有特定的值,支持特定类型的相关操作。
引用
在Python 中,变量也称为:对象的引用。因为,变量存储的就是对象的地址。
变量通过地址引用了“对象”。
变量位于: 栈内存(压栈出栈等细节,后续在介绍)。
对象位于: 堆内存。
Python 是动态类型语言
变量不需要显式声明类型。根据变量引用的对象,Python 解释器自动确定数据类型。
Python 是强类型语言
每个对象偶有数据类型,只支持该类型支持的操作。
标识符
基本用法
标识符:用于变量、函数、类、模块等的名称。标识符有如下特定的规则:
- 区分大小写。
- 第一个字符不许是子母、下划线。其后的字符是:子母、数字、下划线
- 不能使用关键字。比如:if、or、while 等
- 以上下划线开头和即为的名称通常有特殊的含义,尽量避免这种写法。比如:__int__是类的构造函数。
【操作】Python 帮助系统查看关键字
注:无需刻意去呗关键字,后面都会学习。
Python 标识符命名规则
开发中,我们通常约定俗称遵守如下规则:
变量和简单赋值语句
变量的声明和赋值
变量的声明和赋值用于将一个变量绑定到一个对象上,格式如下:
变量名 = 表达式
最简单的表达式是字面量。比如: a = 123。运行过场中,解释器先运行右边的表达式,生成一个表达式运算结构的对象,然后,将这个对象地址复制给左边的变量。
【操作】变量在使用前必须先被初始化(先被赋值)
>>> my_name
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
my_name
NameError: name 'my_name' is not defined
变量 my_name 在被使用前未做赋值,因此报错:‘my_name’ is not defined。
删除变量和垃圾回收机制
可以通过 del 语句伤处不在使用的变量。
【操作】删除变量示例
>>> a=123
>>> del a
>>> x
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
x
NameError: name 'x' is not defined
如果对象没有变量引用,就会被垃圾回收器回收,清空内存空间。
链式赋值
链式赋值用于同一个对象赋值给多个变量。
x=y=123;相当于 x=123;y=123
系列解包赋值
系列数据赋值给对应相同个数的变量(个数不许保持一致)>>> a,b,c=4,5,6 相当于:a=4;b=5;c=6
【操作】使用系列解包赋值实现变量交换
>>> a,b=1,2
>>> a,b=b,a
>>> print(a,b)
2 1
常量
Python不支持常量,即没有语法规则改变一个常量的值。我们只能约定常量的命名规则,以及在程序的逻辑上不对常量的值作出修改。
>>> MAX_SPEED = 120
>>> print(MAX_SPEED)
120
>>> MAX_SPEED = 140 #实际是可以改的。只能逻辑上不做修改。
>>> print(MAX_SPEED)
140
同一运算符
同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址。
is与==区别
is用于判断两个变量引用对象是否为同一个,即比较对象的地址。
== 用于判断引用变量引用对象的值是否相等。默认调用对象的 :eq()方法。
整数缓存问题
Python 仅仅对比较小的整数对象进行缓存(范围为【-5,256】)缓存起来,而并非是所有整数对象。需要注意的是,这仅仅是在命令行中执行,而在Pycharm 或者 保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化范围是【-5,任意正整数】。
总结
- is 比较两个对象的id 值是否相等,是否指向同一个内存地址;
- == 比较的是两个对象的内用是否相等,值是否相等。
- 小整数对象【-5,256】在全局解释器范围内被放入缓存供重复使用;
- is 运算符比 == 效率高,在变量和None 进行比较时,应该使用 is。
【操作】同一运算符 测试
>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False
>>> id(a)
46764560
>>> id(b)
46765216
>>> c = 10
>>> d = 10
>>> c is d
True
>>> id(c)
1388831648
>>> id(d)
1388831648
基础运算符
我们在前面讲解了 “+”、“-”、“*”、“/”、“//”、“%”等运算符,这里我们继续讲解一些运算符,并进行学习和测试。
- 比较运算符 可以连用,并且含义和我们日常使用完全一致。
>>> a = 4
>>> 3<a<10 p="" #关系运算符可以连用<="">
True
- 位操作
>>> a = 0b11001
>>> b = 0b01000
>>> c = a|b
>>> bin(c) #bin()可以将数字转成二进制表示
'0b11001'
>>> bin(c&b)
'0b1000'
>>> bin(c^b)
'0b10001'
>>> a = 3
>>> a<<2 #左移1位相当于乘以2.左移2位,相当于乘以4
12
>>> a = 8
>>> a>>1 #右移1位相当于除以2.
- 加法操作
(1)数字相加 3+2==>5
(2)字符串拼接 “3”+“2”==>“32”
(3)列表、元组等合并 [10,20,30]+[5,10,100] ==> [10,20,30,5,10,100] - 乘法操作
(1)数字相乘 3*2==>6
(2)字符串 复制 “sxt”*3 ==> “sxtsxtsxt”
(3)列表、元组等复制[10,20,30]*3 ⇒ [10,20,30,10,20,30,10,20,30]
复合赋值运算符
复合赋值可以让程序桁架精炼,提高效率。
注意:与C 和 Java 不一样,Python 不支持自增(++)和自减(–)
运算符优先级问题
如下优先级,从高到低。
实际使用中,记住如下简单的规则即可,复杂的表达式一定要使用小括号组织。
- 乘除优先加减
- 位运算和算术运算符>比较运算符>逻辑运算符
【操作】使用 python 表示数学表达式:
(5+10x)/5-13(y-1)(a+b)/x+9(5/x+(12+x)/y)