一. 入门语法
基本概念和语法,包括注释、缩进、续行、标识符、变量等。
1. 基本概念
- 注释:
- 数字(数值型)
- 整型 (即整数,不区分 int 和 long,统一是 long;子类型bool类型,True/False 2个值)
- 浮点型 (即小数)
- 复数
- 字符串
- 单/双引号(’,”)包围或说引用的字符的序列
- 单/双三引号( ‘’’,”””)引用的字符串,可跨行,其内可使用单/双引号
- 在字符串前加 r/R 后,该字符串不作特殊处理,如 r”http://www.baidu.com“
- 转义字符
- \ \t \r \n \’ \”
- 前面加 r/R ,字符串里的转义字符失效,均当普通字符处理
- 缩进
- 采用缩进的方式表示层次关系;约定使用4个空格缩进
- 续行
- 行尾使用 \;如果使用各种括号,则其内不用换行符 \
- 标识符
- 一个名字,用来指代一个值
- 只能由字母、下划线和数字组成,且不能以数字开头
- 不能是 python 关键字,如def class 等
- 大小写敏感
- 注意:不要随意使用下划线开头的标识符,因其有特殊含义
- 常量
- 常量是一个一旦赋值就不能改变值的标识符,而 python 中无法定义常量
- 字面常量:一个单独的值,如 12,”abc” 等
- 变量
- 是一种存储数据的载体;也是一个标识符,其允许复制后可以改变值
- 空值
- 在 Python 中,用 None 来表示空值
变量的命名
- [规定] 变量名由字母、数字、下划线_构成,数字不能开头;
- [规定] 大小写敏感;
- [规定] 不能使用关键字(python保留字);
- [PEP8] 小写字母拼写,多个单词用下划线_连接;
- [PEP8] 单下划线开头的变量,表示私有变量/方法,其他实例对象不能访问,from..import..不会导入;
- [PEP8] 双下划线开头的变量,表示类私有变量/方法,其他对象(包括子对象)不能访问;
给变量命名时最好做到见名知意。
- python 的语言类型
- python 是动态语言,强类型语言
扩展:程序与指令 计算机硬件系统基本由五大部件构成:运算器、控制器、存储器、输入设备和输出设备,这也是冯诺依曼体系计算机。其中,运算器+控制器=中央处理器即CPU。CPU的功能就是执行运算、控制指令、处理数据。
指令:就是放在存储器中一串二进制码,这串码规定了机器的某些动作。 程序:就是指令的集合,只不过这些指令是按照一定的顺序排列的,程序运行的过程就是计算机按照这个顺序来执行的过程,这也就是计算机工作的过程。
2. 运算符 operator *
- 算数运算符
- +、 -、 、 /、 %、 *
- 自然除 / 结果是浮点数,整除为 // 。
- 位运算符
- &、 |、 ~、 ^、 << 、>>
- 常用方式:乘除2的倍数,如 32//4 相当于 32 >> 2
- 比较运算符
- ==、!=、>、<、 <=、 >=;
- 返回一个bool值;
- 逻辑运算符
- 与、或、非(and or not)
- 短路运算符
and,若第一个表达式为 False,后面就没有必要计算了,整个逻辑表达式是 False;
or,若第一个表达式为 True,同理,整个表达式就是 True;
- 赋值运算符
- 就是 =,如 a = min(3, 5)
- 还有如,+=、-=、*=、/=、%=;
- 成员运算符
- in、not in
- 身份运算符
- is、is not
运算符优先级: 算数运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
运算符优先级(由高到低,表达式expression简写为expr) | ||
---|---|---|
优先级 | 运算符 | 描述 |
1 | ‘expr’ | 字符串转换 |
2 | {key: expr, …} | 字典 |
3 | [expr1, expr2, …] | 列表 |
4 | (expr1, expr2, …) | 元组 |
5 | function(expr, …) | 函数调用 |
6 | x[index:index] | 切片 |
7 | x[index] | 下标索引取值 |
8 | x.attribute | 属性引用 |
9 | ~x | 按位取反 |
10 | +x,-x | 正,负 |
11 | x**y | 幂 |
12 | x*y, x/y,x%y | 乘,除,取模 |
13 | x+y,x-y | 加,减 |
14 | x< |
移位 |
15 | x&y | 按位与 |
16 | x^y | 按位异或 |
17 | x|y | 按位或 |
18 | x |
比较 |
19 | x is y, x is not y | 等同测试 |
20 | x in y, x not in y | 成员判断 |
21 | not x | 逻辑否 |
22 | x and y | 逻辑与 |
23 | x or y | 逻辑或 |
24 | lambda arg, …: expr | Lambda匿名函数 |
3. 表达式 expression
表达式是由数字、符号、括号、变量等的组合。
- 算数表达式
- 逻辑表达式
- 赋值表达式
在python 中,赋值即定义。 如果一个变量已定义,当它再次赋值时相当于其重新被定义。
4. 内存管理 *
Python 编程中,一般(在不考虑性能的情况下)无须关心变量的存亡,也不用关心内存的管理。
由于 Python 是动态编译语言,故其变量无须事先声明,也不需要指定类型。
- Python 使用引用计数记录所有变量的引用数
- 当变量引用数变为 0 ,它就可以被 垃圾回收GC
- 计数增加:
- 赋值给其他变量就增加引用计数。如x=3,y=x,即对象3先被x引用,而后y又引用了3,故计数加1
- 计数减少:
- 函数运行结束时,局部变量就会被自动销毁,对象引用计数也会减少
- 变量被赋值给其他对象,引用计数也会减少。如x=3;y=x;x=4,x引用了对象4,计数加1,而对象3的计数则减少了
注意:性能调优,考虑变量引用问题,需要具体看需求,前期无需考虑。
GC (Garbage collection,即垃圾回收机制)
Python 中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。引用计数最大缺陷就是循环引用的问题,所以 Python 引进了辅助方法。在 Python 中,如果一个对象的引用计数为 0,Python 虚拟机就会回收这个对象的内存。点击查看详细介绍
5. True/False (真/假值)
- True 真值:
“string”、非0为真 (一个空格也是一个字符串,为真值)
- False 假值:
“”、0、()空元组、[]空列表、{}空字典、None
二. 程序控制
- 顺序结构
按照先后顺序一条条执行语句
- 分支结构
根据不同的情况判断,条件满足就执行其下的语句。如 if 语句
- 循环结构
条件满足就反复执行,不满足就不执行或不再执行
1. 单分支结构 - if 语句
if condition:
code_block #代码块
【实例 1】输入三条边长,如果能构成三角形就计算周长和面积
a, b, c = input("请输入三条边长长度,空格隔开:").strip().split()
a, b, c = int(a), int(b), int(c)
if a + b > c and a + c > b and b + c > a:
print('周长:%d' % (a + b + c))
p = (a + b + c) / 2
area = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print('面积:%d' % (area))
else:
print('不能构成三角形')
2. 多分支结构 - if…elif…else 语句
if condition_1:
code_block_1
elif condition_2:
code_block_2
...
else:
code_block
【实例 2】英制单位英寸与公制单位厘米的转换
value = float(input("请输入长度:"))
unit = input("请输入单位 in/cm:")
if unit == 'in' or unit == "英寸":
print("%f 英寸== %f 厘米"%(value, value * 2.54))
elif unit == 'cm' or unit == '厘米':
print("%f 英寸== %f 厘米"%(value, value / 2.54))
else:
print("请输入有效的单位")
3. 嵌套结构 - if…elif…else 语句
if condition_1:
code_block_1
else:
if condition_2:
code_block_2
elif condition_3:
code_block_3
else:
code_block_4
【实例 3】百分制成绩转换为等级制成绩
score = int(input("请输入成绩:"))
if score >= 90:
grade = 'A'
elif score >=80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'E'
print("对应的等级是:", grade)
嵌套结构,除了可以是分支的嵌套,还可以是循环的嵌套。
3. 循环结构 - while 语句
当条件condition满足为True,进入循环体,执行code_block
while condition:
code_block
【实例1】打印 10~1 的数字
flag = 10
while flag:
print(flag)
flag -= 1
4. 循环结构 - for 语句 *
在遍历可迭代对象中的元素时,进入循环体,执行 code_block
for element in iteratable:
code_block
【实例2】打印 1~10
for i in range(10):
print(i+1)
5. 循环结构 - continue 语句
continue语句,中断当前循环的当次执行,继续下一次循环。
【实例3】计算10以内的偶数
for i in range(10):
if not i % 2:
continue
print(i)
6. 循环结构 - break 语句
break语句,终止当前的循环(即终止整个的循环)。
【实例4】计算1000以内被7整除的前20个数
count = 0
for i in range(0, 1000, 7):
print(i)
count += 1
if count >= 20:
break
小结:
- continue 和 break 是循环的控制语句,只影响当前循环,包括while、for循环
- continue 和 break 不是跳出语句块,所以 if cond: break 不是跳出 if,而是终止 if 外的 break 所在的循环
- 如果循环嵌套,continue 和 break 也只是影响语句所在的那一层循环
7. 循环结构 - else 子句
语法,else 子句在循环结构中的用法
# while 语句
while condition:
code_block
else:
code_block
# for 语句
for element in iterable:
code_block
else:
code_block
如果循环正常的执行结束,就执行else子句;如果使用 break 终止,else 子句不会执行。