Python解释器

  • > 官方CPython

    C语言开发,最广泛的Python解释器

  • > IPython

    一个交互式、功能增强的Cpython

  • > PyPy

    Python语言写的Python解释器,JIT技术,动态编译Python代码

  • > Jython

    Python的源代码编译成Java的字节码,跑在JVM上

  • > IronPython

    与Jython类似,运行在.Net平台上的解释器,Python代码被编译成.Net的字节码


Python基础语法

  • > 注释———— # 标注的文本
  • > 数字:

    整数,不区分long和int
    进制0xa、0o10、0b10
    bool,2个值True、False

  • > 浮点数

    1.2、3.1415、-0.12,1.46e9等价于1.46*10**9

  • > 字符串

    使用 ' " 单双引号引用的字符的序列
    ''' """ 单双三引号,可以跨行、可以在其中自由的使用单双引号
    在字符吕上前面加上r或R前缀,表示该字符串不做特殊的处理


基础语法

  • > 转义序列

    \ \t \r \n \' \"
    前缀r,把里面所有的字符当普通字符对待

  • > 缩进

    未使用C等语言的花括号,而是采用缩进的方式表示层次关系
    约定使用4个空格缩进

  • > 续行

    在行尾使用\
    如果使用各种括号,认为括号内是一个整体,内部跨行不用\

  • > 标识符

    (1) 一个名字,用来指代一个值
    (2) 只能字母、下划线和数字
    (3) 只能以字母或下划线开头
    (4) 不能是python的关键字,例如def、class就不能作为标识符
    (5) Python是大小写敏感的
    约定:
    不允许使唤用中文;
    不允许使用歧义单词,例如class_
    在python中不要随便使用下划线开头的表示符

  • > 常量

    一旦赋值就不能改变的标识符;
    python中无法定义常量;

  • > 字面常量

    一个单独的量,例如12、"abc"

  • > 变量

    赋值后,可以改变值的标识符


运算符Operator

算数运算符:

+   -   *   /    %   **
自然除 / 结果是浮点数, 整除// 。 注: 2.x 中/ 和// 都是整除
  • > 位运算符

    & | ~ ^ << >>
    常用方式: 乘除2的倍数,32//4 相当于 32 >> 2


原码、反码、补码,负数表示法

  • > 原码

    5 => 0b101 , 1 => 0b1,-1 => -0b1,bin(-1)

  • > 反码

    正数的反码与原码相同;负数的反码符号位不变其余按位取反

  • > 补码

    正数的补码与原码相同;负数的补码符号位不变其余按位取反后+1

  • > 负数表示法

    数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法是转换成加法;
    负数在计算机中使用补码存储,-1的补码为1111 1111
    5 -1 => 5+(-1)直觉上是0b101-0b1,其实计算机中是0b101+0b11111111,溢出位舍弃


运算符

  • > 比较运算符

    == != > < <= >=
    返回一个bool值

  • > 逻辑运算符

    与或非 and or not
    短路运算符
    and 如果第一个表达式为False,后面就没有必要计算了,这个逻辑表达式一定是False
    or 如果第一个表达式为True,后面没有必要计算了,这个逻辑表达式一定是True

  • > 赋值运算符

    a = min(3, 5)
    += -= *= /= %= 等
    x = y = z = 10

  • > 成员运算符

    in 、not in

  • > 身份运算符

    is、is not

运算符优先级(由高到低)

运算符 描述 运算符 描述
‘expr’ 字符串转换 x+y, x-y 加,减
{key: expr,...} 字典 x<< y, x >> y 移位
[expr1,expr2...] 列表 x&y 按位与
(expr1,expr2...) 元组 x ^ y 按位异或
function(expr,...) 函数调用 “x(管道符)y” 按位或
x[index:index] 切片 x< y,x <= y.. 比较
x[index] 下标索引取值 x is y ,x is not y 等同测试
x.attribute 属性引用 x in y ,x not in y 成员判断
~x 按位取反 not x 逻辑否
+x, -x 正,负 x and y 逻辑与
x ** y x or y 逻辑或
x *y,x/y,x%y 乘,除,取模 lambda arg,...:expr lambda匿名函数

表达式Expression

  • > 由数字、符号、括号、变量等的组合

    算数表达式
    逻辑表达式
    赋值表达式
    python中,即赋值定义,如果一个变量已经定义,赋值相当于重新定义


内存管理

  • > 变量无须事先声明,也不需要指定类型

    动态语言的特性

  • > 编程中一般无须关心变量的存亡,也不用关心内存的管理
  • > python使用引用计数记录所有变量的引用数

    当变量引用数变为0,它就可以被垃圾回收GC;
    计数增加:赋值给其它变量就增加引用计数,例如x = 3; y = x
    计数减少:
    函数运行结束时,局部变量就会被自动销毁;
    变量被赋值给其它对象。例如x = 3;y = x ; x = 4

  • > 有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,看需求;

程序控制

  • > 顺序

    按照先后顺序一条条执行;

  • > 分支

    根据不同的情况判断,条件满足执行某条件下的语句

  • > 循环

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

单分支结构

if语句

if condition:
    代码块

condition必须是一个bool类型,这个地方有一个隐式转换bool(condtion)

代码块类似于if语句的冒号后面的就是一个语句块
在if、for、def、class等

真值表

对象/常量
" "
"string"
0
>= 1
<= -1
( )空元组
[ ]空列表
{ }空字典
None

多分支结构

if condition1:
    代码块1
elif condition2:
    代码块2
elif condition3:
    代码块3
......
else:
    代码块

分支嵌套

嵌套结构,可以是分支、循环的嵌套
可以互相嵌套多层

例:
score = 80
if score < 0:
    print('wrong')
else:
    if score == 0:
            print('egg')
        elif score <= 100:
            print('right')
        else:
            print('too big')

循环---while-for 语句*

while语法

while condition:
    block

#当条件满足即condition为True,进入循环体,执行block;

for 语法

for element in iteratable:
    block

#当可迭代对象中有元素可以迭代,进入循环体,执行block

循环continue、break语句

  • > continue

    中断当前循环的当次执行,继续下一次循环;

  • > break

    终止当前循环

  • > 总结:

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