一、基础语法
- 注释:# 标注的文本
- 数字
- 整数:不区分long和int
- 进制0xa,0o10,0b10
- bool:True False
- 浮点数:小数
- 复数:1=2j
- 字符串
- 使用 ' " 单引号双引号引用字符串的序列
- '''和"""可以跨行,可以在其中自由使用单双引号
- 在字符串前面加r或者R前缀,表示该字符串不做特殊的处理
- 转义序列
- \\ \t \r \n \' \"
- 前缀r,把里面所有的字符当做普通字符串处理
- 缩进
- 不使用C等语言的花括号,而是采用缩进表示层次关系
- 约定使用4个空格缩进
- 续行
- 在行尾使用\
- 如果使用各种括号,认为括号内是一个整体,内部跨行不用\
- 标识符
约定:
不允许使用中文
不允许使用歧义单词,例如class_
在Python中不随便使用下划线开头的标识符
- 常量
- 一旦赋值就不能改变值的标识符
- Python中无法定义常量
- 字面常量
- 一个单独的量,例如12,'abc'
- 变量
- 赋值后可以改变值的标识符
二、Python的语言类型
- Python是动态语言,强类型语言
- 静态编译语言
- 事先声明变量类型,类型不能在改变
- 编译时检查
- 动态编译语言
- 不用事先声明变量类型,随时可以复制为其他类型
- 编程时不知道是什么类型,很难推断
- 强类型语言
- 不同类型之间操作,必须强制类型转换为同一类型。print('Fly'+2)
- 弱类型语言
- 不同类型间可以操作,自动隐式转换
三、运算符
- 算数运算符
- + - * / % **
- 自然数除/结果是浮点数,整除//。注:2.X中/和//都是整除
- 位运算符
- & | ~ ^ << >>
- 常用方式:乘除2的倍数,32//4 相当于32>>2
- ~12 = -13
- 比较运算符
- == != > < >= <=
- 返回一个bool
- 1<'1' 1=='1'
- 链式比较操作符
- 4>3>2
- 逻辑运算符
- 与或非 and or not
- 短路运算符
- and 如果第一个表达式为False,后边就没有必要计算,这个逻辑表达式一定是False
- or 如果第一个表达式是True,后面没有必要计算,这个逻辑表达式一定是True
- 赋值运算符
- a = min(1.10)
- += -= *= /= %=
- x=y=z=100
- 成员运算符
- in, not in
- 身份运算符
- is, is not
运算符优先级(由高到低)
运算符 | 描述 |
'expr' | 字符串转换 |
{key:expr,……} | 字典 |
[expr1,expr2……] | 列表 |
fun(expr,……) | 函数调用 |
x[index:index] | 切片 |
x[index] | 列表索引取值 |
x.attribute | 属性调用 |
~x | 按位取反 |
+x,-x | 正,负 |
x**y | 幂 |
x*y,x/y,x%y | 乘,除,取模 |
x+y,x-y | 加,减 |
x<<y,x>>y | 移位 |
X&Y | 按位与 |
x^y | 按位异或 |
x|y | 按位或 |
x<y,x>y,x!=y…… | 比较 |
x is y,x is not y | 等同测试 |
x in y, x not in y | 成员判断 |
not x | 逻辑否 |
x and y | 逻辑与 |
x or y | 逻辑或 |
lambda arg,……:expr | 匿名函数 |
- 算数运算符>位于运算符>身份运算符>成员运算符>逻辑运算符
- 记不住,用括号
- 长表达式多用括号
四、表达式
- 由数字,符号,括号,变量等的组合
- 算数表达式
- 逻辑表达式
- 赋值表达式
- Python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义
五、内存管理
- 变量无需事先声明,也不需指定类型
- 动态语言的特性
- 编程中一般无需关心变量的存亡,也不需要关心内存的管理
- Python中使用引用计数记录所有对象的引用数
- 当对象引用数变为0时,它就可以被垃圾回收GC
- 计数增加:赋值给其它变量就增加引用计数
- 计数减少:
- 函数运行结束时,局部变量就会自动被销毁,对象引用计数减少
- 变量被赋值给其它对象。例如x=3;y=x;x=4
- 有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不是放内存,看需求
六、分支
单分支
- if 语句
if condition:
代码块
condition必须是bool类型,这个地方有一个隐式转换bool(condition)if 1<2:
print('少的')
真值表
对象/常量 | 值 |
""空字符串 | 假 |
"string" | 真 |
0 | 假 |
>=1 | 真 |
<=-1 | 真 |
()空元组 | 假 |
[]空列表 | 假 |
{}空字典 | 假 |
None | 假 |
多分支
- if....elif....else语句
if codition1:
代码块1
elif codintion2:
代码块2
....
else:
代码块
a = 5
if a<0:
print('negative')
elif a==0:
print('zero')
else:
print('positive')
分支嵌套
score = 80
if score < 0:
print('wrong')
else:
if score == 0:
print('egg')
elif score <= 100:
print('right')
else:
print('too dog')
嵌套结构可以是分支,循环的嵌套,可以互相嵌套多层
七、循环
while语句
- 语法
while condition:
block- 当条件满足,即condition为True,进入循环体,执行block
flag = 10
while flag:
print(flag)
flag -= 1
for语句
- 语法
for ele in iterable:
block- 当可迭代对象中有元素可以迭代,进入循环体,执行block
- range函数
flag = 10
for i in range(10):
print(i+1)
for i in range(10):
print(10-i)
continue语句
- 中断当前循环的当次执行,继续下一次循环
- 举例:计算10以内的偶数
for i in range(10):
if not i%2:
print(i)
for i in range(0, 10, 2):
print(i)
for i in range(0,10):
if i&1:
continue
print(i)
break语句
- 终止当前循环
- 举例:计算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只影响语句所在的那一层循环
- continue和break不是跳出语句块,所以if cond:break 不是跳出if, 而是终止if外的break所在的循环
循环else子句
- 语法
while condition:
block
else:
block
for element in iteratable:
block
else:
block
- 如果循环正常执行结束,就执行else子句;如果使用break终止,else子句不会执行
评论 (0)