Python的表达式和语句、优先级、对象引用计数
表达式:表达式表达的是某件事,由值、变量和运算符组成的。它是由一个或多个操作数以及0个或0个以上的运算符组成的序列。
语句:语句表达的是做某件事,它是以分号(;)结尾的单行代码或者是语句块中一系列的单行语句。
优先级:Python语句或程序中运算执行的先后顺序
引用计数:用于查看某个对象的引用计数
Python的表达式
1、Python中的常用的表达式操作符:
算数运算:x + y, x - y,x * y, x / y, x // y, x % y
逻辑运算:x or y, x and y, not x
成员关系运算:x in y, x not in y
对象实例测试:x is y, x not is y
比较运算:x < y, x > y, x <= y, x >= y, x == y, x != y
位运算:x | y, x & y, x ^ y, x << y, x >> y
一元运算:-x, +x, ~x:
幂运算:x ** y
索引和分片:x[i], x[i:j], x[i:j:stride]
调用:x(...)
取属性:x.attribute
元组:(...)
序列:[...]
字典:{...}
三元选择表达式:x if y else z
匿名函数:lambda args: expression
生成器函数发送协议:yield x
Python语句
1、赋值语句:赋值语句有两个作用,一是建立新的变量,二是将值赋予变量。任意变量在使用时,都必须赋值,否则将触发异常。
python会在首次给变量赋值时创建变量名并建立对象引用。
1)、隐式赋值:import, from, def, class, for, 函数参数
In [8]: import sys
In [9]: sys.getrefcount(num1)
Out[9]: 4
In [10]: def printName():
print name
2)、元组和列表分解赋值:当赋值符号(=)的左侧为元组或列表时,Python会按照位置把右边的对象和左边的目标自左而右逐一进行配对;
而个数不同时会触发异常,此时可以切片的方式进行;
In [1]: l1 = ('Sun','Sat','Mon')
In [2]: x,y,z = l1
In [3]: print x
Sun
In [4]: print y
Sat
3)、多重目标赋值
In [5]: num1 = num2 = num3 =666
In [6]: print num1
666
In [7]: print num2
666
4)、增强赋值: +=, -=, *=, /=, //=, %=,
In [10]: a = 3
In [11]: a += 1
In [12]: print a
4
2、其它常见语句说明:
import语句 :模块导入
模块属性导入语句:import * from module:
In [1]: from random importchoice,randint,random
调用语句:
In [2]: i1 = mymod.MyClass('Field')
print语句: 打印对象
条件判断语句:if/elif/else:
In [3]: A = 6;B = 9
In [4]: maxnum = A if A > B else B
序列迭代语句:for/else:
普通循环语句:while/else:
语句内可用参数:
pass:占位符
break:跳出最内层的循环
continue:跳到所处的最近层循环的开始出
函数定义语句:def:
参数返回:return:
In [5]: def f2(x,y): return x + y
In [6]: f2(222,444)
Out[6]: 66
生成器函数语句:yield:
In [7]: f1 = lambda x,y: x + y
In [8]: f1(222,444)
Out[8]: 666
globalx: 命名空间,全局变量
异常触发语句:raise:
类定义语句:class MyClass:
异常捕获语句:try/except/finally:
删除引用:del:
调试检查语句:assert:
环境管理器:with/as:
Python中运算优先级
以下为优先级顺序,从上往下优先级降低,具有相同优先权的运算符从左到右进行计算
序列类型:(...), [...], {...}
索引和切片:s[i], s[i:j]
取属性:s.attribute
对象方法:s(...)
一元运算:+x, -x, ~x
乘幂运算:x ** y
算数乘除、取余、取模运算:*, /, //, %
算数加减运算:+, -
位移运算:<<, >>
按位与:&
按位抑或:^
按位或:|
比较运算:<, <=, >, >=, ==, !=
对象实例测试运算:is, not is
成员关系运算:in, not in
非:not
与:and
或:or
匿名函数:lambda
Python中对象引用计数:sys.getrefcount()
Python增加对象的引用计数场景:
对象创建时;
将对象添加进容器时;类似list.append()
当对象被当作参数传递给函数时
为对象创建另外变量名
Python减少对象的引用计数场景:
引用此对象的某变量名被显式销毁:del x
给引用此对象的某变量名重新赋值
从容器中移除对象时,类似list.pop()
容器本身被销毁