python基础知识

计算机的冯诺依曼体系

 

 

 

 

python解释器

CPython 官方,C语言开发,最广泛的Python解释器
IPython 一个交互式、功能增强的CPython
PyPy Python语言写的Python解释器,JIT技术,动态编译Python代码
Jython Python的源代码编译成Java的字节码,跑在JVM上
IronPython 与Jython类似,运行在.Net平台上的解释器,Python代码被编译成.Net的字节码
stackless Python的增强版本解释器,不使用CPython的C的栈,采用微线程概念编程,并发编程
最常用的还是官方CPython
 

基础语法

注释

# 井号标注的文本

数字

整数int

Python3开始不再区分long、int,long被重命名为int,所以只有int类型了

进制表示:

十进制10
十六进制0x10
八进制0o10
二进制0b10

bool类型

有2个值True、False

浮点数float

1.2、3.1415、-0.12,1.46e9等价于科学计数法1.46*109
本质上使用了C语言的double类型

复数complex

1+2j或1+2J

字符串

使用 ' " 单双引号引用的字符的序列
'''和""" 单双三引号,可以跨行、可以在其中自由的使用单双引号
r前缀:在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理
f前缀:3.6版本开始,新增f前缀,格式化字符串

转义序列

\\ \t \r \n \' \"
上面每一个转义字符只代表一个字符,例如 \t 显示时占了4个字符位置,但是它是一个字符
前缀r,把里面的所有字符当普通字符对待,则转义字符就不转义了。
转义:让字符不再是它当前的意义,例如\t,t就不是当前意义字符t了,而是被\转成了tab键

缩进

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

续行

在行尾使用 \,注意\之后除了紧跟着换行之外不能有其他字符
如果使用各种括号,认为括号内是一个整体,其内部跨行不用 \

标识符

标识符

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

常量

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

字面常量

一个单独的不可变量,例如 12、"abc" 、'2341356514.03e-9'

变量

赋值后,可以改变值的标识符
标识符本质
每一个标识符对应一个具有数据结构的值,但是这个值不方便直接访问,程序员就可以通过其对应的标
识符来访问数据,标识符就是一个指代。一句话,标识符是给程序员编程使用的。
 
Python是动态语言、强类型语言。
 

False等价

 

False等价布尔值,相当于bool(value)
空容器
空集合set
空字典dict
空列表list
空元组tuple
空字符串
None
0
 

逻辑运算真值表

运算符Operator

 

算数运算符

+、-、*、/、//向下取整整除、%取模、**幂
注:在Python2中/和//都是整除。

位运算符

&位与、|位或、^异或、<<左移、>>右移
~按位取反,包括符号位

比较运算符

==、!=、>、>=、<、<=
链式比较: 4 > 3 > 2
比较运算符,返回一个bool值
思考:1 == '1' 吗? 1 > '1' 吗?

逻辑运算符

与and、或or、非not
逻辑运算符也是短路运算符
and 如果前面的表达式等价为False,后面就没有必要计算了,这个逻辑表达式最终一定等价为
False
1 and '2' and 0
0 and 'abc' and 1
or 如果前面的表达式等价为True,后面没有必要计算了,这个逻辑表达式最终一定等价为True
1 or False or None
特别注意,返回值。返回值不一定是bool型
把最频繁使用的,做最少计算就可以知道结果的条件放到前面,如果它能短路,将大大减少计算量

赋值运算符

a = min(3, 5)
+=、 -= 、*=、/=、%=、//= 等
x = y = z = 10
成员运算符in、not in

身份运算符

is 、is not

运算符优先级

 
单目运算符 > 双目运算符
算数运算符 > 位运算符 > 比较运算符 > 逻辑运算符
-3 + 2 > 5 and 'a' > 'b'
搞不清楚就使用括号。长表达式,多用括号,易懂、易读。

表达式

由数字、符号、括号、变量等的组合。有算数表达式、逻辑表达式、赋值表达式、lambda表达式等
等。
Python中,赋值即定义。Python是动态语言,只有赋值才会创建一个变量,并决定了变量的类型和
值。
如果一个变量已经定义,赋值相当于重新定义。

内建函数

 

 

print(1,2,3,sep='\n', end='***')
type(1) # 返回的是类型,不是字符串
type('abc') # 返回的是类型,不是字符串
type(int) # 返回type,意思是这个int类型由type构造出来
type(str) # 返回type,也是类型
type(type) # 也是type
print(isinstance(1, int))
print(isinstance(False, int)) # True

程序控制

顺序

按照先后顺序一条条执行
例如,先洗手,再吃饭,再洗碗

分支

根据不同的情况判断,条件满足执行某条件下的语句
例如,先洗手,如果饭没有做好,玩游戏;如果饭做好了,就吃饭;如果饭都没有做,叫外

循环

条件满足就反复执行,不满足就不执行或不再执行
例如,先洗手,看饭好了没有,没有好,一会来看一次是否好了,一会儿来看一次,直到饭
好了,才可是吃饭。这里循环的条件是饭没有好,饭没有好,就循环的来看饭好了没有
 

单分支

if condition:
代码块
if 1<2: # if True:
print('1 less than 2') # 代码块
condition必须是一个bool类型,这个地方有一个隐式转换bool(condition),相当于False等价
if 语句这行最后,会有一个冒号,冒号之后如果有多条语句的代码块,需要另起一行,并缩进
if、for、def、class等关键字后面都可以跟代码块
这些关键后面,如果有一条语句,也可以跟在这一行后面。例如 if 1>2: pass
 

多分支

if condition1:
代码块1
elif condition2:
代码块2
elif condition3:
代码块3
......
else:
代码块
a = 5
if a<0:
print('negative')
elif a==0: # 相当于 a >= 0
print('zero')
else: # 相当于 a > 0
print('positive')
多分支结构,只要有一个分支被执行,其他分支都不会被执行
前一个条件被测试过,下一个条件相当于隐含着这个条件
# 嵌套
a = 5
if a == 0:
    print('zero')
else:
    if a > 0:
        print('positive')
    else:
        print('negative')

while循环

while循环多用于死循环,或者不明确知道循环次数的场景
while cond:
    block
while True: # 死循环
    pass
a = 10
while a: # 条件满足则进入循环
    print(a)
    a -= 1
上例执行结果是什么?
为什么?
会不会打印出0?要注意边界的分析
如果a=-10可以吗?如何改?回忆一下,False等价是什么?

for语句

for element in iteratable: # 可迭代对象中有元素可以迭代,进入循环体
    block
for i in range(0, 10):
    print(i)

 

 

# 计数器
for i in range(0):
    print(i)
print('---------')
for i in range(-2):
    print(i)
print('---------')
for i in range(1):
    print(i)
range(i),i大于0,相当于计数器。
练习

打印1到10
打印10以内的奇数
打印10以内的偶数
倒着打印10以内的奇数或偶数

# 打印偶数
for i in range(0, 10):
    if i % 2 == 0 :
        print(i)
for i in range(0, 10, 2):
    print(i)
# 打印奇数
for i in range(0, 10):
    if i % 2 != 0 :
        print(i)
for i in range(1, 10, 2):
    print(i)
# 倒着打印
for i in range(8, -1 , -2):
    print(i)
continue
跳过当前循环的当次循环,继续下一次循环
for i in range(0, 10):
    if i % 2 != 0 : continue
    print(i)
for i in range(10):
    if i % 2 != 0 : 
        continue
    print(i)
for i in range(10):
    if i & 1: continue
    print(i)
break
结束当前循环
练习:计算1000以内的被7整除的前20个正整数(for循环)
# 计算1000以内的被7整除的前20个正整数
count = 0
for i in range(7, 1000, 7):
    print(i)
    count += 1
    if count >= 20:
        print(count)
        break
总结
continue和break是循环的控制语句,只影响当前循环,包括while、for循环
如果循环嵌套, continue和break也只影响语句所在的那一层循环
continue和break 只影响循环,所以 if cond: break 不是跳出if,而是终止if外的break所在的循环
分支和循环结构可以嵌套使用,可以嵌套多层。
 

else子句

如果循环正常结束,else子句会被执行,即使是可迭代对象没有什么元素可迭代
for i in range(0): # 可迭代对象没有迭代
    pass
else:
    print('ok')
for i in range(0,10):
    break
else:
    print('ok')
for i in range(0,10): 
    continue
else:
    print('ok')
有上例可知,一般情况下,循环正常执行,只要当前循环不是被break打断的,就可以执行else子句。
哪怕是range(0)也可以执行else子句。

三元表达式

在Python中,也有类似C语言的三目运算符构成的表达式,但python中的三元表达式不支持复杂的语句
真值表达式 if 条件表达式 else 假值表达式
三元表达式比较适合简化非常简单的if-else语句。
# 判断用户的输入的值,如果为空,输出"empty",否则输出该值
value = input('>>>')
if value:
    print(value)
else:
    print('empty')
value = input('>>>')
print(value if value else 'empty')

字符串拼接

str(1) + ',' + 'b' # 都转换成字符串拼接到一起
"{}-{}".format(1, 'a') # {}就是填的空,有2个,就使用2个值填充
# 在3.6后,可以使用插值
a = 100; b = 'abc'
f'{a}-{b}' # 一定要使用f前缀,在大括号中使用变量名

 动态语言的特点:赋值即定义

posted @ 2021-01-06 14:16  豆浆D  阅读(166)  评论(0编辑  收藏  举报