注释:#标注的文本;
数字:
整数,不区分long和int,进制:0xa、0o10、0b10;
浮点数,1.4be9等价于1.46*10^9;
复数:1+2j(a+bj);
字符串:
使用'、''引用的字符的序列;
'''、""",可跨行,可在其中自由的使用单双引号;
在字符串前加上r或R前缀,表示该字符串不作特殊处理,前缀r会把里面的所有字符当普通字符对待;
转义序列:
\\
\t
\r
\n
\'
\"
缩进:
约定使用4个空格;
未使用c语言的花括号,而是采用缩进的方式表示层次关系;
续行:
在行尾使用\;
如果使用各种括号,认为括号内是一个整体,内部跨行不用\;
标识符:
一个名字,用来指定一个值;
只能字母、下划线、数字;
只能以字母或下划线开头;
不能是python的关键字,如def、class等;
大小写敏感;
约定:不允许使用中文;不允许使用歧义单词,如class_;在python中不要随便使用下划线开头的标识符;
常量:
一旦赋值就不能改变值的标识符;
python中无法定义常量;
字面常量:
一个单独的量,如12、'abc'、'234123.03e-9';
变量:
赋值后,可以改变值的标识符;
python的语言类型:
python是动态语言、强类型语言;
静态编译语言:
事先声明变量类型,类型不能改变;
编译时检查;
动态编译语言:
不用事先声明类型,随时可赋值为其它类型;
编程时不知道是什么类型,很难推断;
注:
赋值即定义(动态语言与静态语言的差别);
强类型语言:
不同类型之间操作,必须先强制类型转换为同一类型,print('a' + 1);
弱类型语言:
不同类型之间可以操作,自动隐式转换,js中console.log(1 + 'a');
operator运算符:
算术运算符:
+-*/%,**;
/自然除结果为浮点数,//整除结果为整数;
2.*版本中/和//都是整除;
2**3,2**0.5开方;
位运算符:
&|~^<<>>;
常用方式:乘除2的倍数,32//4相当于32>>2;
例:12,0xc,0o14,0b1100;
规律:~n的结果为-(n+1);
注:
8421-->2^3,2^2,2^1,2^0
例:
~12,按位取反;
12-->0b00001100
取反后0b11110011 #符号位为1则计算机认为是负数,负数的补码是符号位不变,其余按位取反后加1;此处取反为未知数X的补码形式;
取反后0b10001100
加1为0b10001101-->-13
原码:
5-->0b101,1-->0b1,-1-->-0b1,bin(-1);
反码:
正数的反码,与原码相同;
负数的反码,符号位不变,其余按位取反;
补码:
正数的补码,与原码相同;
负数的补码,符号位不变,其余按位取反后加1;
例:
-7的补码:
-7-->0b10000111
取反0b11111000
加1为0b11111001
例:
-64的补码:
-64-->0b11000000
取反0b10111111
加1为0b11000000
负数表示法:
数字电路的cpu中的运算器实现了加法器,但是没有减法器,减法是转换成加法;
负数在计算机中使用补码存储,-1(-0b1)的补码为11111111,-1在内存中0xff;
5-1-->5+(-1),直觉上是0b101-0b1,其实计算机上是0b101+0b11111111,溢出位舍弃;
10^9和10^-9结果?
例:
10^9,^为异或,异或相同为0不同为1:
10-->00001010
9-->00001001
结果为00000011-->3
例:
10^-9:
10-->00001010
-9-->10001001
结果为10000011-->131
比较运算符:
==,!=,<,>,<=,>=;
返回bool值;
1 < '1',不能比较,不可以用<、>、<=、>=比较不同类型;
1 == '1',==或!=可以比较不同类型,返回False;
逻辑运算符:
and,位相乘;
or,位相加;
not,非;
短路运算符:
and,如果第一个表达式为False(乘法中的0),后面就没有必要计算了,这个逻辑表达式一定False;
or,如果第一个表达为True(加法中的1),后面就没有必要计算了,这个逻辑表达式一定True;
赋值运算符:
a=min(3,5);
+=、-=、*=、/=、%=;
python中没有++,--;
x=y=z=10,坑,少用;
成员运算符:
in
not in
身份运算符:
is
is not
运算符优先级:
算术运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符;
单目运算符优先级 > 双目运算符;
记不住,用括号;
长表达式用括号,多用括号,易懂易读;
expression表达式:
由数字、符号、括号、变量等的组合;
算术表达式;
逻辑表达式;
赋值表达式,python中赋值即定义(排错用),如果一个变量已经定义,赋值相当于重新定义;
内存管理:
变量无须事先声明,也不需要指定类型(动态语言的特性);
编程中一般无须关心变量的存亡,也不用关心内存的管理;
python使用引用计数记录所有变量的引用数(引用计数机制);
当变量引用计数变为0,它就可以被GC;
计数增加,赋值给其它变量就增加引用计数,如x=3;y=x;
计数减少,函数运行结束时,局部变量就会被自动销毁,对象引用计数减少;变量被赋值给其它对象,如x=3;y=x;x=4;
有关性能时,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,看需求;
程序控制:
顺序,按先后顺序一条条执行,如先洗手再吃饭再洗碗;
分支,根据不同的情况判断,条件满足执行某条件下的语句,如先洗手,如果饭没做好,玩游戏,如果饭做好了,就吃饭,如果饭都没有做,叫外卖;
循环,条件满足就反复执行,不满足就不执行或不再执行,如先洗手,看饭做好了没有,没有好,一会来看一次是否好了,一会再来看一次,直到饭做好了,才可以吃饭,这里的循环条件是饭没有好,饭没有好,就循环的来看饭好了没有;
单分支结构:
if condition: #condition必须是一个bool类型,此处有一个隐式转换bool(condition)
block #冒号后面就是一个代码块,在if/for/def/class等后面
真值表:
"" | False |
"string" | True |
0 | False |
>=1 | True |
<=-1 | False |
() | False |
[] | False |
{} | False |
None | False |
多分支结构:
if...elif...else语句,elif可N次;
分支嵌套:
可以是分支、循环的嵌套;
可互相嵌套多层;
类三目运算符:
真值 if 条件 else 假值 #如果语句简单(不超过3行),可用类三目运算符;
python中没有三目运算符;
循环:
while condition: #condition为True进入循环体,执行block
block
while True:为死循环,while False:无用语句;
for element in interable: #当可迭代对象中有元素可以迭代,进入循环体,执行block
block
range函数,前包后不包,[0,10);
continue语句:
中断当前循环的当次执行,继续下一次循环;
在while和for中都可用;
例:
for i in range(10):
if i%2 == 0:
continue
print(i)
同
for i in range(10):
if i%2 == 0:
continue
else:
print(i)
最好使用第一种;
break语句:
终止当前循环;
else子句:
如果循环正常的执行结束,就执行else子句;
如果使用break终止,else子句不会执行;
注:
n=1
for i in range(1,10): #此处i可用_替代,表示不关心此变量,仅作为循环次数使用
n=(n+1)*2
print(n)