注释:#标注的文本;

 

数字:

整数,不区分longint,进制:0xa0o100b10

浮点数,1.4be9等价于1.46*10^9

复数:1+2ja+bj);

 

字符串:

使用'''引用的字符的序列;

'''""",可跨行,可在其中自由的使用单双引号;

在字符串前加上rR前缀,表示该字符串不作特殊处理,前缀r会把里面的所有字符当普通字符对待;

转义序列:

\\

\t

\r

\n

\'

\"

 

缩进:

约定使用4个空格;

未使用c语言的花括号,而是采用缩进的方式表示层次关系;

 

续行:

在行尾使用\

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

 

标识符:

一个名字,用来指定一个值;

只能字母、下划线、数字;

只能以字母或下划线开头;

不能是python的关键字,如defclass等;

大小写敏感;

约定:不允许使用中文;不允许使用歧义单词,如class_;在python中不要随便使用下划线开头的标识符;

 

常量:

一旦赋值就不能改变值的标识符;

python中无法定义常量;

 

字面常量:

一个单独的量,如12'abc''234123.03e-9'

 

变量:

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

 

 

python的语言类型:

python是动态语言、强类型语言;

2基础语法_基础语法

 

静态编译语言:

事先声明变量类型,类型不能改变;

编译时检查;

 

动态编译语言:

不用事先声明类型,随时可赋值为其它类型;

编程时不知道是什么类型,很难推断;

 

注:

赋值即定义(动态语言与静态语言的差别);

 

强类型语言:

不同类型之间操作,必须先强制类型转换为同一类型,print('a' + 1)

 

弱类型语言:

不同类型之间可以操作,自动隐式转换,jsconsole.log(1 + 'a')

 

 

operator运算符:

算术运算符:

+-*/%**

/自然除结果为浮点数,//整除结果为整数;

2.*版本中///都是整除;

2**32**0.5开方;

 

位运算符:

&|~^<<>>

常用方式:乘除2的倍数,32//4相当于32>>2

例:120xc0o140b1100

规律:~n的结果为-(n+1)

 

注:

8421-->2^3,2^2,2^1,2^0

 

例:

~12,按位取反;

12-->0b00001100

取反后0b11110011   #符号位为1则计算机认为是负数,负数的补码是符号位不变,其余按位取反后加1;此处取反为未知数X的补码形式;

取反后0b10001100

10b10001101-->-13

 

原码:

5-->0b1011-->0b1-1-->-0b1bin(-1)

 

反码:

正数的反码,与原码相同;

负数的反码,符号位不变,其余按位取反;

 

补码:

正数的补码,与原码相同;

负数的补码,符号位不变,其余按位取反后加1

 

例:

-7的补码:

-7-->0b10000111

取反0b11111000

10b11111001

 

例:

-64的补码:

-64-->0b11000000

取反0b10111111

10b11000000

 

负数表示法:

数字电路的cpu中的运算器实现了加法器,但是没有减法器,减法是转换成加法;

负数在计算机中使用补码存储,-1-0b1)的补码为11111111-1在内存中0xff

5-1-->5+(-1),直觉上是0b101-0b1,其实计算机上是0b101+0b11111111,溢出位舍弃;

10^910^-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语句,elifN次;

 

分支嵌套:

可以是分支、循环的嵌套;

可互相嵌套多层;

 

类三目运算符:

真值 if 条件 else 假值   #如果语句简单(不超过3行),可用类三目运算符;

python中没有三目运算符;

 

 

循环:

while condition:   #conditionTrue进入循环体,执行block

         block

while True:为死循环,while False:无用语句;

 

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

         block

range函数,前包后不包,[0,10)

 

continue语句:

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

whilefor中都可用;

例:

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)