在最开始,我记录一个内容:TPU,TPU是谷歌生产的专用于tensor计算的处理器。下面进入正式部分
条件判断与三元表达式
python中只有if,if else,if elif,if elif else这几种组合,判断的条件不是None,0,False就可以执行;如果借助elif就可以实现多分支判断:
#条件判断 if else
age=66
if age<18:
print('young boy')
else:
print('adults')
#多分支判断 if elif
age=66
if age<18:
print('young boy')
elif age>18 and age<60:
pringt('adults')
elif age>60:
print('others')
关于三元表达式,a if condition else b
,它只是一个表达式,如果条件不是None或者0,False,就返回a,否则返回b
三元表达式通常用于条件判断的场景:
a=1 if b>6 else 3
注意,不能按照if else的习惯,写成a=1 if b>6 else a=3
,因为1 if b>6 else 3本身就是一个表达式
循环与循环控制
循环指的是for循环,while循环,控制是break,continue关键字的使用,只需要记住以下几点:
1.for循环:可设置迭代次数的循环
2.while循环:条件循环,不能设置迭代次数
3.break:终止整个循环
4.continue:跳过本次循环
迭代器和生成器
迭代器和生成器在以往困惑了我很久,因此我在这里特别记录一下这个部分
在了解迭代器之前,先明白什么是可迭代对象,一般来说,当创建了一个列表,集合,字典时,就生成了一个容器,比如:
一个列表[1,2,3,4]
就是一个容器,这就是一个可迭代对象,所谓可迭代对象指可通过for循环遍历的对象。注意,目前这个容器并不能自己遍历自己(通过对象自身的方法来遍历自己,一般这个方法指的就是__next__)。到这里,就该说出迭代器和可迭代对象的区别了,迭代器是具有__next__方法的可迭代对象。
通过iter()方法进行类型转换后,可以将可迭代对象变成迭代器。在原文档中,可迭代对象叫做iterable,迭代器叫做iterator,迭代器的__next__方法也有特点:只能迭代一次,不能返回到以前的索引,下面是相关实例,助于理解:
#迭代器与可迭代对象的区别,迭代器多了一个方法__next__
print("This is iterator")
li=iter([1,2,3])
print(next(li))
print("for循环开始")
for i in li:
print(i)
print("This is iterable")
lis=[1,2,3]
for i in lis:
print(i)
for i in lis:
print(i)
对于生成器,生成器必然是一个迭代器,生成器这个对象有两种实现方式:第一种是用生成器表达式实现;第二种方式是由生成器函数实现
生成器表达式类似列表生成式,只是将[…]中括号换成(…)小括号,例如:
>>> li=(x for x in range(30) if x%3==0)
>>> li
<generator object <genexpr> at 0x7f79e7581d60>
用函数实现的生成器就是函数中使用了yield关键字,这就是为什么看到yield总会牵扯到生成器这个对象的原因:
#生成器函数(带yield关键字的函数)实现生成器
def func(n):
for i in range(n):
yield i**2
gen=func(6)
print(gen)
print(next(gen))
print("借助for循环")
for item in gen:
print(item)
正如gen=func(6)的声明,gen就是一个生成器,结果如下:
异常与调试
调试BUG,BUG的意思是昆虫,那为什么要叫找BUG,其实背后有个有趣的故事
在早期,人们使用继电器编程,美国的一名海军当时正在为完成一项任务进行编程,机器刚开始还好好的,但过了一会就出现了故障,每个实验人员都觉得很奇怪,这名海军爬上机器,在线路之中发现了飞蛾,飞蛾由于光和热的吸引,靠近继电器后被烧死,导致一组继电器短路,于是这名海军为机器调试取了一个形象的名字:找昆虫,也就是找BUG
发现异常有助于我们调试代码,使程序更稳定,在python中,常见异常如下:
NameError: 访问到没有声明的变量
ZeroDivisionError: 除数是0
SyntaxError: 语法错误
IndexError: 索引超出范围
KeyError :请求一个不存在的字典关键字
IOError: 输入输出错误,例如读文件,但文件不存在
AttributeError: 访问到未知的对象属性
ValueError: 传给函数的参数类型不正确,例如给数值型参数传递了字符串
通常,我们将有疑惑的代码放入try下,except会捕获对应的异常,并执行对应指令:
try:
code
except ValueError:
print("值错误")
except NameError:
print("名称错误")
else:
print("状态良好")
除了系统发现异常,也可以通过关键字raise手动抛出异常:
def addfunc(a,b):
if type(a)!=type(b):
raise ValueError('类型错误')
return a+b
addfunc(5,'a')