home1.gif


一. 入门语法

基本概念和语法,包括注释、缩进、续行、标识符、变量等。

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 *


  • 算数运算符
  1. +、 -、 、 /、 %、 *
  2. 自然除 / 结果是浮点数,整除为 // 。
  • 位运算符
  1. &、 |、 ~、 ^、 << 、>>
  2. 常用方式:乘除2的倍数,如 32//4 相当于 32 >> 2
  • 比较运算符
  1. ==、!=、>、<、 <=、 >=;
  2. 返回一个bool值;
  • 逻辑运算符
  1. 与、或、非(and or not)
  2. 短路运算符

and,若第一个表达式为 False,后面就没有必要计算了,整个逻辑表达式是 False;
or,若第一个表达式为 True,同理,整个表达式就是 True;

  • 赋值运算符
  1. 就是 =,如 a = min(3, 5)
  2. 还有如,+=、-=、*=、/=、%=;
  • 成员运算符
  1. in、not in
  • 身份运算符
  1. 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<>y 移位
15 x&y 按位与
16 x^y 按位异或
17 x|y 按位或
18 x=y, x>y 比较
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 使用引用计数记录所有变量的引用数
    1. 当变量引用数变为 0 ,它就可以被 垃圾回收GC
    2. 计数增加:
      1. 赋值给其他变量就增加引用计数。如x=3,y=x,即对象3先被x引用,而后y又引用了3,故计数加1
    3. 计数减少:
      1. 函数运行结束时,局部变量就会被自动销毁,对象引用计数也会减少
      2. 变量被赋值给其他对象,引用计数也会减少。如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

goon.gif

二. 程序控制


  • 顺序结构

按照先后顺序一条条执行语句

  • 分支结构

根据不同的情况判断,条件满足就执行其下的语句。如 if 语句

  • 循环结构

条件满足就反复执行,不满足就不执行或不再执行

1. 单分支结构 - if 语句

  1. if condition:
  2. code_block #代码块

【实例 1】输入三条边长,如果能构成三角形就计算周长和面积

  1. a, b, c = input("请输入三条边长长度,空格隔开:").strip().split()
  2. a, b, c = int(a), int(b), int(c)
  3. if a + b > c and a + c > b and b + c > a:
  4. print('周长:%d' % (a + b + c))
  5. p = (a + b + c) / 2
  6. area = (p * (p - a) * (p - b) * (p - c)) ** 0.5
  7. print('面积:%d' % (area))
  8. else:
  9. print('不能构成三角形')

2. 多分支结构 - if…elif…else 语句

  1. if condition_1:
  2. code_block_1
  3. elif condition_2:
  4. code_block_2
  5. ...
  6. else:
  7. code_block

【实例 2】英制单位英寸与公制单位厘米的转换

  1. value = float(input("请输入长度:"))
  2. unit = input("请输入单位 in/cm:")
  3. if unit == 'in' or unit == "英寸":
  4. print("%f 英寸== %f 厘米"%(value, value * 2.54))
  5. elif unit == 'cm' or unit == '厘米':
  6. print("%f 英寸== %f 厘米"%(value, value / 2.54))
  7. else:
  8. print("请输入有效的单位")

3. 嵌套结构 - if…elif…else 语句

  1. if condition_1:
  2. code_block_1
  3. else:
  4. if condition_2:
  5. code_block_2
  6. elif condition_3:
  7. code_block_3
  8. else:
  9. code_block_4

【实例 3】百分制成绩转换为等级制成绩

  1. score = int(input("请输入成绩:"))
  2. if score >= 90:
  3. grade = 'A'
  4. elif score >=80:
  5. grade = 'B'
  6. elif score >= 70:
  7. grade = 'C'
  8. elif score >= 60:
  9. grade = 'D'
  10. else:
  11. grade = 'E'
  12. print("对应的等级是:", grade)

嵌套结构,除了可以是分支的嵌套,还可以是循环的嵌套。

3. 循环结构 - while 语句

当条件condition满足为True,进入循环体,执行code_block

  1. while condition:
  2. code_block

【实例1】打印 10~1 的数字

  1. flag = 10
  2. while flag:
  3. print(flag)
  4. flag -= 1

4. 循环结构 - for 语句 *

在遍历可迭代对象中的元素时,进入循环体,执行 code_block

  1. for element in iteratable:
  2. code_block

【实例2】打印 1~10

  1. for i in range(10):
  2. print(i+1)

5. 循环结构 - continue 语句

continue语句,中断当前循环的当次执行,继续下一次循环。

【实例3】计算10以内的偶数

  1. for i in range(10):
  2. if not i % 2:
  3. continue
  4. print(i)

6. 循环结构 - break 语句

break语句,终止当前的循环(即终止整个的循环)。

【实例4】计算1000以内被7整除的前20个数

  1. count = 0
  2. for i in range(0, 1000, 7):
  3. print(i)
  4. count += 1
  5. if count >= 20:
  6. break

小结:

  • continue 和 break 是循环的控制语句,只影响当前循环,包括while、for循环
  • continue 和 break 不是跳出语句块,所以 if cond: break 不是跳出 if,而是终止 if 外的 break 所在的循环
  • 如果循环嵌套,continue 和 break 也只是影响语句所在的那一层循环

7. 循环结构 - else 子句

语法,else 子句在循环结构中的用法

  1. # while 语句
  2. while condition:
  3. code_block
  4. else:
  5. code_block
  6. # for 语句
  7. for element in iterable:
  8. code_block
  9. else:
  10. code_block

如果循环正常的执行结束,就执行else子句;如果使用 break 终止,else 子句不会执行。

end1.gif