Python 基础 11-Python 技术领域
Python 技术领域
- 网站 Web 开发
- App 后端开发
- DevOps 运维开发:运维专业知识、一些第三方工具的使用
- 爬虫开发:beautiful soap/Scrapy
- 黑客技术: 计算机基础原理、黑客工具使用
- 数据科学:取数据、展示数据
try:
一段可能出错的代码 # 一般容易出错的场景:网络请求、读写写入、处理与外部系统的交互
except ValueError as e: # 把 ValueError 类型的异常对象赋值给变量 e
print(e) # 处理这个异常,当使用 print 打印 e 这个异常对象时,e 这个变量变成字符串,包含描述信息
except Exception:
处理其余所有的异常
else:
没有异常时的处理代码
except 捕获异常的语句可以有任意多个,同 else 语句一起是互斥的。
try:
一段可能出错的代码
finally:
最后一定会执行的代码, # 无论前面代码是否出错,最后一定会执行的代码,
例如 f.close() # 常用场景是关闭网络、关闭文件等
rasie e
捕获到异常时,如果不想处理,想让更外层代码知道(因为代码是通过函数一层层调用的), 可以使用 rasie 语句来抛出异常到外层。
try:
int("a")
except ValueError as e:
print(e)
raise(e)
poem = '''\
Programming is fun,
When the work is done.
If you wanna make your work also fun:
Use Python!
'''
f = open('poem.txt', 'w') # 打开文件的方式:r/w/a,open 方法返回值是一个文件描述符,赋值给 f
# 文件描述符可以理解成一个表示文件的对象
f.write(poem) # write text to file
f.close() # close the file,打开文件后一定要关闭,如果不关闭,会占用系统的文件描述符资源
f = open('poem.txt') # 默认为 r 模式
while True:
line = f.readline()
if len(line) == 0: # 空行表示读取结束
break
print(line, end = "") # print 内容后面默认会增加一个 \n,这里 end 禁止结尾增加 \n,改为增加 ""
f.close() # close the file
使用 with 语句后,不用使用 close 方法关闭文件了。
poem = '''\
Programming is fun,
When the work is done.
If you wanna make your work also fun:
Use Python!
'''
# 写入文件
with open('poem.txt', 'w') as f:
f.write(poem)
# 读取文件
with open('poem.txt') as f:
while True:
line = f.readline()
if len(line) == 0:
break
print(line, end = "")
之前我们学习了函数和模块等组织代码的方式,但随着代码的增多,函数和模块还是不够用。
根据有项研究,如果代码超过 10000 行,如果只用函数和模块来组织代码,那么程序员将很难掌控代码。
所以在大型项目中,为了更好地组织代码,会使用类和对象。
类和对象之间的关系非常相似于概念和实体的关系。
class Cat(object): # 定义概念 猫: PS: 注意使用 class 关键词,Python 3 中不需要"(object)"
leg_cnt = 4 # 腿数 = 4 PS: 可以做为类属性
def __init__(self, cat_name): # 定义 创建过程(实体,猫名): PS: 实例的创建过程,类的实例化,第一个参数 self 是必须的,
# self 可以理解为类实例化时的已经存在的初始实体对象,很多属性还没有被设置
self.name = cat_name # 实体.名字 = 猫名 PS: 给实体设置 name 属性,同时将传入的参数 cat_name 赋值给它
# name 这个变量是附属于 self 实例的(self.name),不能够直接使用 name 变量
def change_name(self, cat_name): # 定义 改名字(实体,猫名): PS: 类里面的函数就叫类的方法,第一个参数是 self,类的方法实际上定义类这个概念能做什么
self.name = cat_name # 实体.名字 = 猫名
def climb(self): # 定义 爬树(实体):
print("cat %s climb a tree" % # 输出 (猫爬了树)
self.name)
tom = Cat("Tom") # 类的实例化,Cat 实例化后赋值给 tom 这个变量,tom 是一只真正的猫,它的名字叫"Tom"
tom.chang_name("ATom") # tom 改名字为 "ATom"
tom.climb() # tom 去爬树
tom.leg_cnt == 4 # True tom 的腿数是 4
继承的类叫做子类。
class PersianCat(Cat): # 定义概念 波斯猫(继承猫):
def __init(self, cat_name): # 定义 创建过程(实体,猫名):
super(PersianCat, self).__init__(cat_name) # 执行猫的创建过程(猫名),Python 3 中"PersianCat, self"可不写
def jump(self): # 定义 跳(实体):
print("try jump") # 打印 ("try jump")
jack = PersianCat("jack") # jack 是一只真实的波斯猫
jack.jump() # jack 跳
jack.climb() # jack 爬树
字典表示的是一种映射关系。 以下就是一个字典。
{
"123": 123,
456: "hello"
}
冒号左边称为键(Key),它是一个常量,右边称为值(Value)。
a = {"123": 123, 456: "hello"}
a["123"] # 字典取值,得 123
a[456] = "world" # 字典设置值
字符串其实是一个特殊的列表,列表中的每个元素是一个字符
a = "hello lilei"
a[:5] # "hello",字符串本质上是常量,可以查询,不能修改
a = "hello %s" % "lilei" # %s 为占位符
a = "%s %s" % ("hello", "lilei")
a = "%(verb)s %(name)s" % {"verb": "hello", "name": "lilei"} # 给占位符起名
当一个函数返回多个值的时候,它实际上返回了一个元组。
一个元组中的多个元素分别赋值给对应的变量称为解包。
如下:
a, b = (1, 2) # 元组解包
param = (1, 2) # 定义一个元组
add(*param) 与 add(1, 2)一样,*param 对应到了位置参数
可以使用字典来对应关键字参数
param = {"a": 1, "b": 2} # 定义一个字典
add(**param) 与 add(a = 1, b = 2)一样,**param 对应到了关键字参数