首页 > 代码库 > [PY3]——基本语法

[PY3]——基本语法

Python3基本语法-xmind图

技术分享

 

 

 


常量/变量
1.常量:一旦赋值就不可再改变。不能对它重新赋值。python不存在常量
2.字面常量:一个单独出现的量,未赋值给任何变量或常量
3.变量:

i=3
print(i)
3

 

 


类型系统
1.python是动态类型语言:指的是变量可以重新赋值为其他类型

In [5]: i=4;type(i)
Out[5]: int
In [6]: i=4;type(i)
Out[6]: str

2.python是强类型语言:强类型指的是不同类型之间不能相互计算

In [7]: 4+4
TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str‘

3.python中一切都是引用,所以一切都是指针

4.python的基本类型:
(1)int整型:python里面可以说int型没有溢出,而只受限于物理内存

In [8]: i=1000000000000000000000000000000000000000000000000000000000000000000000
   ...: 000000000000000000000000000000000000000000000000000000000000000000000000
In [9]: type(i)
Out[9]: int
In [10]: i**2
Out[10]: 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(2)float浮点型:(py3里面没有double类型),浮点型会损失精度

In [11]: type(1.0)
Out[11]: float
In [12]: type(3.14159)
Out[12]: float

(3)bool布尔型:True Flase
(4)none:None指的是没有指向任何内存

 

 


运算符
1.算术运算符:

# 算术运算符只能对int和float运算,int会隐式转换成float
# +  加
    In [5]: 1+1.0
    Out[5]: 2.0

# -  减
    In [6]: 1-2
    Out[6]: -1

# *  乘
    In [11]: 2*3
    Out[11]: 6

# /  自然除(结果都是float型)
    In [1]: 3/2
    Out[1]: 1.5
    In [2]: type(3/2)
    Out[2]: float

# // 取整除(结果取整故都是int型)
    In [3]: 3//2
    Out[3]: 1
    In [4]: type(3//2)
    Out[4]: int

# ** 求幂
    In [12]: 2**3
    Out[12]: 8

# %  取模
    In [19]: 4%3
    Out[19]: 1

2. 比较运算符

# 比较运算返回值都是bool型
#    >   大于
#    <   小于
#    == 等于
#    !=  不等于
#    >= 大于等于
#    <= 小于等于
In [20]: type(1>2)
Out[20]: bool

In [21]: 1>2
Out[21]: False

In [22]: 1<2
Out[22]: True

In [23]: 1!=2
Out[23]: True

3. 逻辑运算符

# or  或
# and 且
# not 非
# 逻辑运算符的操作数与返回值都是bool类型
In [24]: True or False
Out[24]: True

In [25]: True and False
Out[25]: False

In [26]: not True
Out[26]: False

In [27]: type(True or False)
Out[27]: bool

# 所有参与逻辑运算的操作数都会隐式转换成bool类型,其中0和None会隐式转换为False、非0则隐式转换为True
In [31]: 0 or 1  //0=Flase or 1=True
Out[31]: 1       //非0=True

# 逻辑运算的短路操作:从左到右执行,当左边的计算已经可以直接得出结果时,将停止计算,提前返回
In [32]: def true():
             print(True)
             return True
In [34]: def false():
             print(False)
             return False
         
In [35]: true() or false()    
True                           //or运算时左边为true已可以得到结果,故只执行了true()
Out[35]: True

In [36]: false() and true()
False                         //and运算时左边为false已可以得到结果,故只执行了false()
Out[36]: False

In [37]: false() or true()   //左边还不能得到结果的时候,true()和false()都执行了
False
True
Out[37]: True

4. 成员运算符

#用于判断一个元素是否在容器中(和集合类型有关)
# in       在
# not in 不在
In [43]: 3 in [1,2,3,5]
Out[43]: True

In [46]: a not in love python
Out[46]: True

In [47]: 10 in (0,2,8,11)
Out[47]: False

In [44]: 10 in {0,2,8,11}
Out[44]: False

# 集合的成员运算远高于其他线性结构做成员运算

# 列子1:
In [49]: lst=list(range(1000000));
In [50]: s=set(range(1000000));

In [51]: %%timeit
    ...: -1 in lst
100 loops, best of 3: 13.1 ms per loop

In [52]: %%timeit
    ...: -1 in s
The slowest run took 28.53 times longer than the fastest. This could mean that an intermediate result is being cached.
10000000 loops, best of 3: 44.6 ns per loop

#例子2:
In [53]: lst2=list(range(100))
In [54]: s2=set(range(100))

In [55]: %%timeit
    ...: -1 in lst2
1000000 loops, best of 3: 1.36 us per loop

In [56]: %%timeit
    ...: -1 in s2
The slowest run took 26.28 times longer than the fastest. This could mean that an intermediate result is being cached.
10000000 loops, best of 3: 46.3 ns per loop

# 通过下面的例子我们可以得到如下结论:
# 做成员运算时,
#   *集合的时间复杂度是O(1),其效率和集合的规模无关 ==>当规模大时我们转化为集合来做运算效率会高很多
#   *线性结构的复杂度是O(n),其效率和列表的规模有关 ==>当规模小时其实线性结构的效率未必不会更好

5. 身份运算符

# 面向对象

6. 位运算符

# 位运算符是直接操作二进制的
# <<
# >>
# &
# |
# ^

7. 赋值运算符    

# 赋值运算符是可以和算术运算符、比较运算符、位运算符一起使用   
In [12]: a=1+2;print(a);type(a)
3
int

In [13]: a=1>2;print(a);type(a)
False
bool

In [14]: a=True or False;print(a);type(a)
True
bool

8. 运算符优先级
    算术运算符>比较运算符>逻辑运算符
    可以通过使用括号来改变优先级

 

 


程序结构

1. 顺序结构

2. 分支结构

(1)单分支                                                                                              (2)双分支                                                            

 技术分享                              技术分享

(3)多分支

技术分享

# 单分支    
开始

if 条件:

操作

结束
In [1]: a=5 In [2]: if a<10: print(a less then 10) # 双分支双分支结构里,永远只有一个分支会被执行
开始

if 条件:

操作1

else:

操作2

结束
In [3]: a=5 In [4]: if a<10: print(a,less then 10) else: print(a,great then 10) # 多分支多分支结构里,永远只有0个或1个分支会执行条件只能是bool类型或者是可以隐式转化为bool类型的 In [5]: a=50 In [6]: if a<10: print(a<10) elif a<20: print(a<20) elif a<30: print(a<30) else print(a>30)

3. 循环

(1)while循环                                                            (2)for in循环

技术分享                       技术分享

# 一定要有某种机制修改调制使其退出循环,通常是在循环体里修改条件
# for in 循环里永远不要修改可迭代对象()
# 如何选择使用哪种循环?
对已知的可迭代对象做遍历,选择for in
对未知的条件做循环,选择while
# while循环
开始

while 条件:

操作

结束
In [18]: i=0 In [19]: while i<10: print(i) i+=2 0 2 4 6 8 # for in循环
开始

for 元素 in 可迭代对象:

操作

结束
In [62]: for i in range(0,10,2): print(i) 0 2 4 6 8

4. 提前终止与跳过

# break 和 continue只针对最近的一层
# break和continue只能用在循环里

# break
In [66]: for i in range(0,3):
    ...:     for j in range(0,5):
    ...:         if j>2:
    ...:             break
    ...:         print(i={},j={}.format(i,j))
    ...:
i=0,j=0
i=0,j=1
i=0,j=2
i=1,j=0
i=1,j=1
i=1,j=2
i=2,j=0
i=2,j=1
i=2,j=2

# continue
In [67]: for i in range(0,3):
    ...:     for j in range(0,5):
    ...:         if j!=2:
    ...:             continue
    ...:         print(i={},j={}.format(i,j))
    ...:
i=0,j=2
i=1,j=2
i=2,j=2

5. else子句(python中else可以和循环语句一起使用)

# 当循环没有被break(被中断/提前退出)时,会执行else子句
In [68]: for i in range(0,5):
    ...:     pass
    ...: else:
    ...:     print(not exit)
    ...:
not exit

In [69]: for i in range(0,5):
    ...:     continue
    ...: else:
    ...:     print(not exit)
    ...:
not exit

In [70]: for i in range(0,5):
    ...:     break
    ...: else:
    ...:     print(not exit)
    ...:

 




[PY3]——基本语法