当前位置:   article > 正文

python基础_for t in range

for t in range

python 笔记

  • 注释/取消多行代码快捷键

    • 选中需要注释/取消注释的所有代码

    • 按快捷键:windows系统(同时按一下键:”ctrl / + “或 ”ctr ?“)

1 if条件语句

1.1 if 单分支 :

  1. """
  2.   语法格式:
  3.   if 条件判断:
  4.       条件代码块
  5. """

1.2 if多分支 :

  1. """
  2.   #语法格式:
  3.   if 条件1:
  4.       代码块1
  5.   elif 条件2:
  6.       代码块2
  7.   else:
  8.       代码块n
  9. """

1.3 条件判断说明

  • 表达式 : 比较表达式

  • 单一的值 : 字符串,数字,None,序列

2 循环语句

2.1 循环语句定义

  1. # for循环:语法格式
  2. """
  3. for x in seq:
  4.   print("xxx")
  5. """
  6. # while循环:语法格式
  7. """
  8. while 条件判断:
  9.   代码块
  10. """
  11. # range()
  12. """
  13.   range(start,end,step)
  14.   start : 开始位置 ,默认从0开始
  15.   end : 结束位置
  16.   step : 步长 ,默认步长是1
  17. """

2.2 思考总结

2.2.1 for 与 while

  1. - for 循环的结束条件是将序列中的所有元素都取完,结束循环
  2. - while循环的结束条件是判断语句为False时,结束循环

2.2.2 break 与 continue

  1. - break
  2.   1.break 语句可用于跳出循环。
  3.   2.break 所在的循环体已经结束。
  4. - continue
  5.   1.continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。
  6.   2.continue 所在的循环体并没有结束。

2.2.3 for in 与 for in range()

  1. -for in range([start], stop, [step])
  2.   1.在一个范围内历遍
  3.   2.返回等差数列。构建等差数列,起点是start,终点是stop,但不包含stop,公差是step。
  4.   3.start和step是可选项,没给出start时,从0开始;没给出step时,默认公差为1。
  5. -for in
  6.   in : 判断一个元素是否在另外一个元素中
  7.   for in是直接历遍一个数据组

2.2.4 is 与 ==

  1. - is : 判断两个对象的引用地址是否相等,例如:id()
  2. - == : 比较两个对象的内容是否相等

3 列表:顺序存储

  1. # 定义 : lst = [] or list()
  2. # eg :
  3. lst = [1,2,4]
  4. # 常用的方法
  5. # 添加元素:append(x)
  6. # 插入元素 : insert(index,x)
  7. # 删除元素: clear()
  8. # 修改元素 : lst[1] = 'abc'
  9. # 获取元素 : lst[1]

4 元组:顺序存储

  • 元组定义:tp = ()

  • 元组特点:元组定义后就不能修改

5 字典:无序存储

  1. - 特征
  2. - 键必须是唯一的
  3. - 值可以是任何数据类型
  4. - 定义字典
  5. - d = {key1:value1,key2:value2}
  6. - 字典常用方法
  7. - 修改字典中元素:dt2['name1']= 'lxg'
  8. - 增加字典中元素:dt2['name3']= 'lhz'
  9. - 获取字典中key对应的值:get(key)或dt2['name1' 不同如下:
  10. ```python
  11. #若key不存在返回none
  12. #print("获取字典中zhangsan的值:",dt3.get('zhang'))
  13. #若不存在则程序报错
  14. #print("获取dt2中的值:",dt2['name9'])
  15. ```

 

  1. - 获取字典中偶有的键值对:dt3.items(),例如:
  2. ```python
  3. for key,value in dt3.items():
  4. print("key=",key,"value=",value)
  5. ```
  6. - 获取字典中所有的键:dt3.keys()
  7. - 获取字典中所有的值:dt3.values()
  8. - 更新一组字典中的键值对:dt3.update(dt2)

6 字符串格式化:str

6.1 %方式

  1. #%s:格式化字符串
  2. #%d:格式化整数
  3. #%f:格式化浮点数
  4. #例:
  5. print("我的名字叫:%s"%"李桥红")
  6. print("他的年龄是%d" % 25)
  7. print("他今天花了%.2f钱" % 238.9)

6.2 format()方式

  • 普通: - “{}”.format("传入的字符串")

  • 位置参数:

    • “{0},{1},{2},……”.format("位置0的值","位置1的值”,"位置2的值",……)

           print("我的名字:{0},年龄{1},现居城市:{2}".format('李桥红',25,"北京"))
  • 关键字参数:可更换位置 - “{x},{y},{z},……”.format(x="位置0的值",z="位置1的值”,y="位置2的值",……)

            print("我的名字:{x},年龄{y},现居城市:{z}".format(y=25,z="北京",x='李桥红'))
  • 组合使用:位置参数必须放在关键字前面

            print("我的名字:{0},年龄{y},现居城市:{1}".format('李桥红',"北京",y=25))

7 序列中的通用操作

  • 序列中的通用操作:索引,切片,相加,相乘,检查成员

  • 序列包括:列表,元组,字典,字符串,其中字典不支持索引,切片、相加和相乘操作

7.1 索引

  1. lst = ['red',10,3,29,'yy']
  2. print("获取第二个元素:",lst[1]) #从左往右取,从0开始
  3. print("获取第二个元素:",lst[-4]) #从右往左取,从-1开始

7.2 切片

  1. #2.切片:lst[start:end:step] (类似于range),start默认0,step默认1,end默认为列表长度
  2. lst5 = ['red','green','blue','black','gold','orange']
  3. print("获取第3~5个元素:",lst5[2:5])
  4. print("获取奇数的值:",lst5[0:6:2]) #lst5[0:6:2]等价于lst5[:6:2]
  5. print("获取第3个及后面的元素:",lst5[2::]) #冒号不能省略,lst5[2::]等价于lst5[2:]
  6. print("将列表中的元素进行翻转:",lst5[::-1])

7.3 相加/相乘

  1. #3.相加/相乘
  2. #相乘:列表中的内容需被赋值n次
  3. a_lst = ['a']
  4. b_lst = ['b']
  5. print("两个列表相加:",a_lst+b_lst)
  6. print("两个列表相乘:",a_lst*3)

7.4 检查成员

  1. #检查成员:in
  2. print("检查成员:",'glod' in lst5)
  3. print("检查成员:",'glod' in lst)

8 列表推导式

  1. 序列:字典,元组,字符串以及range()方法,for循环体被优先执行
  2. 表达式:+,-,*,%,|
  3. 两个for循环后面的for循环是内嵌循环体

8.1 [表达式 for 变量 in 序列 ]

  1. #需求:生成一个存放着1~10的列表
  2. #常规写法
  3. lst = []
  4. for t in range(1,11):
  5. lst.append(t)
  6. print(lst)
  7. #列表推导式:expB for x in iterable expA
  8. #expB:对x运算,如加减乘除以及条件判断
  9. #for x in iterable:循环序列
  10. #expA:条件筛选或再次循环
  11. #执行顺序:循环体————条件筛选————对x运算
  12. print([x for x in range(1,11)])

8.2 [表达式 for 变量 in 序列 if 条件]

  1. # 生成一个列表,列表中存放着1~10的数,输出偶数的值*2
  2. lst = [1,3,6,8,5,3,7,5,9,10,11,60,13,14]
  3. lst1 = []
  4. #传统方法
  5. for i in lst:
  6. while i % 2 == 0 :
  7. lst1.append(i+2)
  8. i += 1
  9. print(lst1)
  10. print('*'*70+'传统方法:生成列表且偶数+2')
  11. #列表推导式
  12. print([x*2 for x in lst if x % 2==0])
  13. print('*'*70+'列表推导式:生成列表且偶数*2')

8.3 [表达式 for 变量 in 序列 for 变量2 in 序列]

  1. # 将两次循环的值连接起来放在列表中
  2. # 常规写法
  3. a = 'abc'
  4. b = '123'
  5. c = []
  6. for x in a:
  7. for y in b:
  8. c.append(x+str(y))
  9. print(c)
  10. a = [3,4,5]
  11. b = ['h','j','l']
  12. lst = []
  13. for x in a:
  14. for y in b:
  15. lst.append(y+str(x))
  16. print(lst)
  17. #列表推导式
  18. print([y+str(x) for x in a for y in b])

9 函数

9.1 函数定义

  1. """
  2. def 函数名字(参数列表):
  3. 函数体
  4. """
  5. #定义一个加法函数:
  6. # 参数列表数量可以没有,也可以是多个,形参不能是具体的值
  7. def add(a,b):
  8. c = a + b
  9. print(c)
  10. # 使用函数:add(a,b) ,a和b也可以是序列
  11. # 其中3是a的实参,4是b的实参
  12. add('e','d')
  13. print('*'*60+'函数使用:函数名字(参数列表)')

9.2 return语句的3种返回方式

return返回none(默认)

  1. # return返回none(默认)
  2. def add_default(a1,b1):
  3. c1 = a1 +b1
  4. print(add_default(3,8))
  5. print('*'*60+'reurn值:none')

return返回表达式

  1. # return返回表达式
  2. #方式1
  3. def add_expression01(a2,b2):
  4. return a2+b2
  5. print(add_expression01(5.4, 1))

return返回多个值

  1. #return返回多个值
  2. def calc(a4,b4):
  3. add = a4 + b4
  4. min = a4 - b4
  5. cf = a4 * b4
  6. div = a4 / b4
  7. return add,min,cf,div
  8. print(calc(4,8))
  9. print('*'*60+'reurn值:多个值')

9.3 定义函数时有/无返回值(return)的区别

  1. def add(a,b):
  2. a + b
  3. def add_expression01(a2,b2):
  4. return a2+b2
  5. # 无return返回的是none
  6. print("无return语句函数add()返回:",add(3,7))
  7. # 有return返回的是函数运行结果
  8. result = add_expression01(4,2)
  9. print("有return语句函数add1()返回:",result)
  10. print('*'*60+'有/无return的区别')

9.4 参数类型

9.4.1 无默认参数

  1. def student_lesson(name,programing_language,parameter_type):
  2. z = "姓名:{},编程语言:《{}》,参数类型:({})".format(name,programing_language,parameter_type)
  3. return z
  4. #1.位置参数
  5. '''位置参数:不可可以交换位置且实参必须按照形参格式输入,即,不能多也不能少实参'''
  6. print(student_lesson('李桥红',"python_01","位置参数"))
  7. #2.关键字参数传入方式:
  8. '''关键字参数:可以交换位置'''
  9. print(student_lesson(name='李慧',programing_language="python_02",parameter_type="关键字参数"))
  10. #3. 位置参数和关键字参数 混合使用:
  11. '''关键字参数必须放在最后,否则程序报错'''
  12. print(student_lesson('李丹',parameter_type='位置参数和关键字参数 混合使用',programing_language='python_03'))

9.4.2 有默认参数

  1. ''''查找学生信息'''
  2. name = input("姓 名:")
  3. sno = input("学 号:")
  4. def check_stu_msg(name,sno,school="tjcu"):
  5. student_information = ("学生信息表 \n姓名:{} \t学号:{} \t学校:{}".format(name,sno,school))
  6. return student_information
  7. print(check_stu_msg(name,sno))

优化程序:对实参进行过滤操作并给出提示

  1. print('*'*20+"对姓名和学号进行判断过滤")
  2. name1 = input("姓 名:")
  3. sno1 = int(input("学 号:"))
  4. def check_stu_filter_msg(name1,sno1,school1="tjcu"):
  5. """
  6. 实现思路:当输入的x和y是非整数或非浮点数,返回提示信息
  7. 若输入的是整数或浮点数,则进行相加操作
  8. :param : int or float
  9. :param b: int or float
  10. :return: student_information
  11. 判断两个类型是否相同推荐使用 isinstance(),类似 type()
  12. (name1 >= u'一' and name1<=u'龥'):name为中文名
  13. (name1 >= u'A' and name1<=u'Z') or (name1 >= u'a' and name1<=u'z'):name为英文名
  14. """
  15. if not ((name1 >= u'一' and name1<=u'龥') or (name1 >= u'A' and name1<=u'Z') or (name1 >= u'a' and name1<=u'z')):
  16. return '姓名应为汉字或英文字母'
  17. if not (isinstance(sno1,float) or len(str(sno1)) < 9):
  18. return '输入的参数sno要求必须是整数且学号长度小于9'
  19. student_information = ("学生信息表 \n姓名:{} \t学号:{} \t学校:{}".format(name1,sno1,school1))
  20. return student_information
  21. print(check_stu_filter_msg(name1,sno1))

9.4.3 可变化参数

  1. #5.可变化参数
  2. #语法格式:
  3. def 函数名(位置参数1,位置参数2,*列表):
  4. print(type(列表))
  5. print(列表) #列表名为元组
  6. for x in 列表:
  7. print(x,end=' ') #end=' ':输出显示在同一行
  8. print(函数名(1,2,3,4,5))

列表形式:*args

  1. #实现add方法可以接受任意数据相加
  2. def add(x,y,*args):
  3. sum = 0
  4. for z in args:
  5. sum += z
  6. sum = sum + x + y
  7. return sum
  8. #1.直接传入实际参数
  9. print(add(1,2,3,4,5,6,7))
  10. #2.在窗口依次输入6个数据并将其以列表的形式传入add方法中,最后输出6个数据之和
  11. def lst_input():
  12. i = 0
  13. lst = []
  14. print("请依次输入6个数据")
  15. while i <= 5:
  16. a = int(input("\t \t请第{}输入数据:".format(i)))
  17. lst.append(a)
  18. i += 1
  19. return lst
  20. print("输入所有数据之和:",add(3,5,*lst_input()))

字典形式:**kwargs

  1. #6.可变参数:字典形式
  2. def show_Dict(**kwargs):
  3. print(kwargs)
  4. #通过关键字传入
  5. print(show_Dict())
  6. print(show_Dict(key1='abc',key2='123'))
  7. #通过字典形式传入
  8. dt = {'key1':'abc','key':'123'}
  9. print(show_Dict(**dt))

10 面向对象

面向对象将现实的事物抽象出来,然后抽象成 类 ( class ),给类定义属性和方法后,再将类实例化成 实 例 ( instance ) ,通过访问实例的属性和调用方法来进行使用。

  • 类:通过定义的class + 类名

  • 属性:类中的所有变量称为属性

  • 类中所有的函数统称为方法

  • 对象:创建的类并不能直接使用,只有通过类创建出的实例(又称对象)才能使用

  1. #类的语法格式:
  2. class ClassName():
  3. # 属性 >= 0
  4. # 方法 >= 0
  5. # 例: 抽象设计出一个电梯类
  6. class Elevator():
  7. # 属性(变量)
  8. button = "开门" # 1)按钮
  9. max_people_nums = 15 # 2) 荷载人数
  10. floor = 9 # 3) 层数
  11. # 方法(函数)
  12. def open(self):
  13. print("开门") # 1.开门
  14. def close(self):
  15. print("关门") # 2. 关门
  16. def run(self,nums):
  17. print("我要去{}层".format(nums)) # 3. 升降
  18. #创建实例对象:et(实例可自定义)
  19. et = Elevator()
  20. #实例et(et,也使用其他实例)需要实现电梯的升降功能
  21. et.run(6)

10.1 初始化数据:init(self,...)

  • 初始化数据:将类中的部分属性设置为默认参数值

  1. """
  2. 1. 初始化数据:将类中的部分属性设置为默认值
  3. 2. pthon的构造方法格式:
  4. def __init__(self,……):
  5. 代码块
  6. 3. 优点:每次生实例成对象时会自动调用此方法
  7. 4. 特点:
  8. ① __init__方法的第一参数永远是self,表示创建的类实例本身
  9. ② 不能传入空的参数了,必须传入与__init__方法匹配的参数,其中self不需要传
  10. """

例:创建学生类,要求有属性:姓名和年级 ; 方法有:学习的方法,打印学生的上课情况

  1. # 例: 创建学生类,要求有属性:姓名和年级 ; 方法有:学习的方法,打印学生的上课情况
  2. # 1.定义类
  3. class Students():
  4. # 2. 定义属性
  5. name = ""
  6. grade = ""
  7. # 3. 构造方法:初始化数据
  8. def __init__(self,name,grade):
  9. # 从构造方法中获取的参数值赋值给类student()中对应的属性
  10. self.name = name
  11. self.grade = grade
  12. # 4. 定义方法
  13. def study(self):
  14. print("{}现在上{}年级".format(self.name,self.grade))
  15. # 5. 初始化对象:创建实例对象时确定参数值并入到构造方法__init__(self,name,grade)中
  16. # 例1:此例中的对象实例(zhangsan)的属性值(name=张三,grade=3)
  17. zhangsan = Students('张三',3)
  18. zhangsan.study()
  19. # 例2:此例中的对象实例(lisi)的属性值(name=李四,grade=6)
  20. lisi = Students('李四',6)
  21. lisi.study()

10.2 self作用

  1. 不同的对象实例使用着相同的类(可理解为模板),但是不同的对象实例的属性以及方法不相同,所以python使用self来区分不同的对象实例。

  2. python规定,类内的方法,至少要包括一个参数,这个参数名就是self.当然如果你改成其它的名称也不会报错,

  • 举例如下

  1. #定义一个students类
  2. class Students():
  3. #打印出不同的实例对象对应的内存地址值
  4. def show_self(self):
  5. print("当前对象的值:{}".format(self))
  6. #创建第一个实例对象
  7. zhangsan = Students()
  8. '''zhangsan的实例对象值'''
  9. zhangsan.show_self()
  10. #创建第二个实例对象
  11. lisi = Students()
  12. '''zhangsan的实例对象值'''
  13. lisi.show_self()
  • 运行结果

  1. 当前对象的值:<__main__.Students object at 0x038A6310>
  2. 当前对象的值:<__main__.Students object at 0x03A07250>

11 变量:

  1. """
  2. 1. 变量的分类:
  3. (1)类变量
  4. 所有类的实例化对象都同时共享类变量,属于类的公共资源数据。
  5. 类方法的调用方式有 2 种,既可以使用类名直接调用,也可以使用类的实例化对象调用。
  6. (2)实例变量
  7. 实例变量指的是在任意类方法内部,以“self.变量名”的方式定义的变量,其特点是只作用于调用方法的对象。
  8. 实例变量只能通过对象名访问,无法通过类名访问。
  9. (3)局部变量
  10. 局部变量直接在方法内定义的变量且以“变量名=值”的方式进行定义
  11. 局部变量的使用范围也仅限于所定义的方法内
  12. 2. 访问变量:使用点号 . 来访问对象的属性
  13. (1) 使用实例对象
  14. lqh.Inst_var(25,90)
  15. (2) 使用类名:增删改查
  16. Students.age = 7 # 添加一个 'age' 属性
  17. Students.age = 8 # 修改 'age' 属性
  18. del Students.age # 删除 'age' 属性
  19. (3) 使用pthon函数:增删改查
  20. hasattr(Students, 'age') # 如果存在 'age' 属性返回 True。
  21. getattr(Students, 'age') # 返回 'age' 属性的值
  22. setattr(Students, 'age', 8) # 添加属性 'age' 值为 8
  23. delattr(Students, 'age') # 删除属性 'age'
  24. """

11.1 定义类:students()

  1. #定义一个students类
  2. class Students():
  3. #定义类变量:name和grade
  4. name = ""
  5. def Inst_var(self,age,grade):
  6. #定义实例变量:age
  7. self.age = age
  8. self.grade = grade
  9. print("类方法1 ;类变量:名字(name)={} 实例变量(age)={}".format(self.name,self.grade,self.age))
  10. def local_var(self,sno):
  11. #定义局部变量:sno
  12. sno = sno
  13. print("类方法2 :局部变量(sno)={} 多个方法可引用实例变量(age)={} ".format(sno,self.age))
  14. def show_self(self):
  15. return self
  16. lqh = Students()
  17. lzh = Students()

11.2 访问类变量:

11.2.1 使用实例对象

  1. lqh.name = '李桥红'
  2. lzh.name = '李智慧'
  3. lqh.grade = 6
  4. lqh.Inst_var(25,90)
  5. print("=="*30+"类的实例")

11.2.2 使用类名:增删改查

  1. # ① 添加一个 'warning' = 1
  2. Students.Instance_object_value = lqh.show_self()
  3. print("添加属性;对象实例={},name={}:".format(Students.Instance_object_value,lqh.name))
  4. # ② 访问类的属性:用点号 . 来访问对象的属性
  5. print("获取实例对象值=",Students.Instance_object_value)
  6. # ③ 修改 'warning' = 0
  7. Students.Instance_object_value = lzh.show_self()
  8. print("修改属性;对象实例={},name={}:".format(Students.Instance_object_value,lzh.name))
  9. # ④ 删除 'warning' 属性
  10. del Students.Instance_object_value
  11. print("=="*30+"类的属性")

11.2.3 使用pthon函数:增删改查

  1. for i in [0,1]:
  2. if i:
  3. #删除属性:'max_people_nums
  4. delattr(Students, 'grade_01')
  5. #检查是否存在属性:warning_01
  6. print("属性grade_01不存在,grade_01=",hasattr(Students, 'grade_01'))
  7. # 创建一个新属性:max_people_nums = 5
  8. setattr(Students, 'grade_01', 5)
  9. # 访问对象的属性值:max_people_nums
  10. print("删除属性grade_01=", getattr(Students, 'grade_01'))
  11. else:
  12. #创建属性:'max_people_nums', 7
  13. setattr(Students, 'grade_01', 7)
  14. #检查是否存在属性:warning_01
  15. print("属性warning_01存在,warning=",hasattr(Students, 'grade_01'))
  16. # 访问对象的属性值:max_people_nums
  17. print("读取属性grade_01=", getattr(Students, 'grade_01'))
  18. # 修改对象的属性:max_people_nums=18
  19. setattr(Students, 'grade_01', 18)
  20. # 访问对象的属性值:max_people_nums
  21. print("修改属性grade_01=", getattr(Students, 'grade_01'))
  22. print("=="*30+"pthon函数的方式")

11.3 访问实例变量:必须使用正确的实例对象

lzh.Inst_var(20,80)

11.4 访问局部变量:仅在方法内使用

  1. lqh.local_var(2015)
  2. lzh.local_var(2016)
 

12 封装:公有/私有

  1. 类的私有属性
  2. __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs
  3. 类的私有方法
  4. __private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods
  5. 注:
  6. __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
  7. _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
  8. __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。

类的私有方法

  1. class demo():
  2. #公有属性
  3. name1 = ''
  4. age1 = 10
  5. sno1 = 0
  6. #单下划线私有属性
  7. _grade = 2
  8. #定义双下划线私有属性
  9. __course = '语文'
  10. #定义类的公有方法
  11. def get_name1(self):
  12. print(self.name1)
  13. #定义类的单下划线(_)私有方法
  14. def _get_age1(self):
  15. print(self.age1)
  16. #定义类的双下划线(__)私有方法:双下划线的私有类方法仅能在Student()中使用
  17. def __get_sno(self):
  18. print(self.sno1)
  19. class Student():
  20. s_name = ""
  21. s_age = 0
  22. def get_age(self):
  23. return self.s_age
  24. def show(self):
  25. #实例化类demo
  26. d = demo()
  27. #调用类demo中公有方法:get_name1
  28. '''公共类方法get_name1在整个项目中均可调用'''
  29. d.get_name1()
  30. #调用类demo中单下划线(_)的私有的方法:get_age1
  31. '''仅能在该文件(Object_oriented_encapsulation05.py)中调用单线划线私有方法(get_age1)'''
  32. d._get_age1()
  33. s = Student()
  34. s.show()

13 继承 / 多态:

  1. 1. 类的继承
  2. (1)特点
  3. ① 多个类有一定的关联关系
  4. ② 子类继承父类后,子类具备父类的所有功能
  5. ③ 子类可以继承多个父类
  6. (2)作用:代码的重用
  7. (3)语法格式:
  8. class 子类名(父类名1,父类名2,……)
  9. ...
  10. 2. 父类方法重写(多态)
  11. (1)存在多态的条件:
  12. ① 必须是继承关系
  13. ② 子类复写父类的方法
  14. ③ 子类的方法中调用父类的方法可使用关键词super.方法名
  15. ④ 注意:当子类复写父类中的方法时,优先调用子类的方法,
  16. (2)作用:对父类的方法进行优化和更新
  1. class People():
  2. def say(self):
  3. print("父类的say方法")
  4. #子类Students继承父类People
  5. class Students(People):
  6. def __init__(self,sf):
  7. self.sf = sf
  8. def study(self):
  9. self.say() #调用子类中的方法
  10. super().say() #调用父类中的方法
  11. print("子类的sudy方法")
  12. #重复写父类People的say方法
  13. def say(self):
  14. print("子类中的say方法")
  15. # 子类Students存在参数初始化:sf(身份),创建实例化对象时需要输入参数;’初中生‘
  16. zs = Students('初中生')
  17. zs.study()

14 模块:后缀为 :.py 的文件

14.1 导包方式

(1) 新建一个Modules_packages_calcs.py文件

  1. def add(a,b):
  2. c = a + b
  3. print(c)

(2) 创建一个新的python文件(Modules_packages),将Modules_packages_calcs.py导入到Modules_packages.py文件并使用add方法

  1. #1.通过import 导入 : import 文件名
  2. from demo_01.模块和包 import Modules_packages_calcs
  3. #使用导入文件(calc):c1 = 文件名.类名
  4. print(Modules_packages_calcs.add(4, 9))
  5. #2. 通过from ... import : from 包名 import 类名|函数|方法
  6. from demo_01.模块和包.Modules_packages_calcs import add
  7. #使用导入文件(calc):c1 = 类名
  8. print(add(3,4))

14.2 导入python系统提供

  1. '''
  2. 1. os模块
  3. os.listdir(path) 返回指定的文件夹包含的文件或文件夹的名字的列表
  4. os.path.isfile(path) 判断路径是否为文件
  5. os.path.join(path1[, path2[, ...]]) 把目录和文件名合成一个路径
  6. os.path.split(path) 把路径分割成 dirname 和 basename,返回一个元组
  7. '''
  8. # 使用os模块中的一些常用方法
  9. import os
  10. # 查看当前路径下所有的文件和目录
  11. print(os.listdir('.'))
  12. # os.path.basename(path) 返回文件名
  13. print(os.path.basename(r'e:\api_project\python_study02\demo_01\calc.py'))
  14. # 分隔路径和文件名
  15. print(os.path.split(r'e:\api_project\python_study02\demo_01\calc.py'))
  16. '''
  17. 2.datetime模块
  18. date 日期对象,常用的属性有year, month, day
  19. time 时间对象
  20. datetime 日期时间对象,常用的属性有hour, minute, second, microsecond
  21. timedelta 时间间隔,即两个时间点之间的长度
  22. '''
  23. #导入datetime模块
  24. from datetime import datetime
  25. #strftime:对datetime对象进行格式化,生成需要时间格式的时间
  26. now = datetime.now()
  27. print(now)
  28. df = now.strftime("%Y-%m-%d %H:%M:%S")
  29. print(df)
  30. dp1 = datetime.strptime(df, "%Y-%m-%d %H:%M:%S")
  31. print(dp1)
  32. print(datetime.strptime('2021-02-27 22:14:03',"%Y-%m-%d %H:%M:%S"))
  33. '''
  34. 3. sys模块
  35. sys模块提供了一系列有关Python运行环境的变量和函数。
  36. sys.argv:可以用sys.argv获取当前正在执行的命令行参数的参数列表(list)。
  37. sys.path:返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
  38. sys.platform:获取当前执行环境的平台,如win32表示是Windows系统,linux2表示是linux平台
  39. '''

15 安装第三方软件

  • (1) 下载第三方包:pip install 包名

    • pip install requests

    • pip install pymysql

  • (2) 查看软件包 : pip show 包名

    • pip show pymysql

    • pip show requests

  • (3) 有的包有时候下载慢或无法下载,可以指定国内镜像

16 文件

Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError

  1. 1. 常用格式:open(file, mode='r')
  2. 2. 完整格式:open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  3. (1) 参数说明:
  4. file: 必需,文件路径(相对或者绝对路径)。
  5. mode: 可选,文件打开模式
  6. buffering: 设置缓冲
  7. encoding: 一般使用utf8
  8. errors: 报错级别
  9. newline: 区分换行符
  10. closefd: 传入的file参数类型
  11. opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
  12. (2) 可选打开模式(mode):
  13. r:以只读⽅式打开⽂件。 ⽂件的指针将会放在⽂件的开头, 这是默认模式。 如果⽂件不存在, 抛出异常
  14. w: 以只写⽅式打开⽂件。 如果⽂件存在会被覆盖。 如果⽂件不存在, 创建新⽂件
  15. a: 以追加⽅式打开⽂件。 如果该⽂件已存在, ⽂件指针将会放在⽂件的结尾。 如果⽂件不存在, 创建新 ⽂件进⾏写⼊
  16. r+: 以读写⽅式打开⽂件。 ⽂件的指针将会放在⽂件的开头。 如果⽂件不存在, 抛出异常
  17. w+: 以读写⽅式打开⽂件。 如果⽂件存在会被覆盖。 如果⽂件不存在, 创建新⽂件
  18. a+: 以读写⽅式打开⽂件。 如果该⽂件已存在, ⽂件指针将会放在⽂件的结尾。 如果⽂件不存在, 创建新 ⽂件进⾏写⼊
  19. (3) file 对象常用的函数:
  20. file.read([size]): 从文件读取指定的字节数,如果未给定或为负则读取所有。
  21. file.readline([size]) :读取整行,包括 "\n" 字符。
  22. file.readlines([sizeint]) :读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
  23. file.write(str) :将字符串写入文件,返回的是写入的字符长度。
  24. file.writelines(sequence) :向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
  25. file.close() :关闭文件。关闭后文件不能再进行读写操作。
  26. file.seek(offset,[whence]) :方法用于移动文件读取指针到指定位置。
  27. file.tell() : 返回文件当前位置。

16.1 文件的读写步骤

  1. #1. 文件读写步骤:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
  2. # (1) 读取文件:a.txt 内容
  3. # ①. 需要打开文件:open()
  4. # 生成一个对象:r
  5. r = open('read.txt','r')
  6. # ②. 使用对象f读取read.txt文件并打印文件内容: f.read()
  7. print("读取文件read.txt的内容:\n",r.read())
  8. # ③. 关闭文件 :close()
  9. r.close()
  10. # (2) 编辑write.txt文件
  11. # ①. 需要打开文件:open()
  12. w = open('write.txt','w')
  13. # ②. 使用对象w编辑write.txt文件并打印文件内容: f.write()
  14. w.write('python java')
  15. # (3) 关闭文件 :close()
  16. w.close()

16.2 File(文件)方法使用

  1. fileobject.readline()
  2. """
  3. readline() 方法语法格式:
  4. fileObject.readline([size]);
  5. size -- 从文件中读取的字节数。
  6. 返回值:从字符串中读取的字节。
  7. """
  8. # 打开文件
  9. rl = open("readline.txt", "rb+")
  10. print ("打开文件名为: ", rl.name)
  11. i = 1
  12. while i < 8:
  13. line = rl.readline()
  14. print("读取第{}行内容{}" .format(i,line))
  15. i = i + 1

fileobject.seek()

  1. """
  2. file.seek() 方法语法格式:
  3. fileObject.seek(offset,[ whence])
  4. offset -- 开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
  5. whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
  6. 返回值: 如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。
  7. """
  8. rl.seek(4, 0) # 从头开始,偏移4个字节
  9. position = rl.tell()
  10. line = rl.readline(7)
  11. print("当前位置{},读取内容{}".format(position,line))
  12. rl.seek(4, 1) # 从当前位置开始,偏移4个字节
  13. line = rl.readline(5)
  14. print("当前位置{},读取内容{}".format(position,line))
  15. rl.seek(-4, 2)
  16. line = rl.readline(3)
  17. print("当前位置{},读取内容{}".format(position,line))
  18. # 关闭文件
  19. rl.close()

16.3 使用with as 变量

主要用于文件的读写操作,省去了关闭文件的麻烦,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等

  1. # 使用with进行读取文件
  2. # 格式 : with open(f,'r') as 变量
  3. #将捕获到的异常对象赋值给e
  4. with open('a.txt','r') as f:
  5. all_lines = f.readlines()
  6. for x in all_lines:
  7. print(x)

17 异常处理

17.1 try except 语句及结构

  • 首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常。

  • 当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except 块处理,这个过程被称为处理异常。如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。

  • 语法结构如下:

  1. '''
  2. try:
  3. 可能产生异常的代码块
  4. raise [异常类名称 [(异常描述信息)]]
  5. except [ (Error1, Error2, ... ) [as e] ]:
  6. 处理异常的代码块1
  7. except [ (Error3, Error4, ... ) [as e] ]:
  8. 处理异常的代码块2
  9. except [Exception]:
  10. 处理其它异常
  11. else:
  12. 代码处理块
  13. finally :
  14. 代码处理块
  15. 代码处理块
  16. '''

17.1.1 语法结构参数说明

  • []括起来部分,可以使用,也可以省略。其中各部分的含义如下:

    • (Error1, Error2,...) 、(Error3, Error4,...): Error1、Error2、Error3 和 Error4 都是具体的异常类型。显然,一个 except 块可以同时处理多种异常。

    • [as e]: 作为可选参数,表示给异常类型起一个别名 e,这样做的好处是方便在 except 块中调用异常类型(后续会用到)。

    • [Exception]: 作为可选参数,可以代指程序可能发生的所有异常情况,其通常用在最后一个 except 块。

  • else:

    • 使用 else 包裹的代码,只有当 try 块没有捕获到任何异常时,才会得到执行;反之,如果 try 块捕获到异常,即便调用对应的 except 处理完异常,else 块中的代码也不会得到执行

  • finally:

    • 无论 try 块是否发生异常,该块中的代码都会被执行

  • raise:

    • 程序中使用了 raise 语句引发异常,但程序的执行是正常的,手动抛出的异常并不会导致程序崩溃

17.2 不使用else

  1. '''
  2. 1. 无else:
  3. try 块捕获到异常并通过 except 成功处理,后续所有程序都会依次被执行
  4. '''
  5. try:
  6. result1 = 20 / int(input('请输入除数:'))
  7. print(result1)
  8. except ValueError as e1:
  9. print('必须输入整数',e1)
  10. except ArithmeticError as e2:
  11. print('算术错误,除数不能为 0',e2)
  12. print('没有出现异常')
  13. print("="*20,"无else")

17.3 使用else

  1. '''
  2. 2. 有 else
  3. 只有当 try 块没有捕获到任何异常时,才会得到执行;反之,如果 try 块捕获到异常,即便调用对应的 except 处理完异常,else 块中的代码也不会得到执行
  4. '''
  5. try:
  6. result = 20 / int(input('请输入除数:'))
  7. print(result)
  8. except ValueError as e3:
  9. print('必须输入整数',e3)
  10. except ArithmeticError as e4:
  11. print('算术错误,除数不能为 0')
  12. else:
  13. print('没有出现异常')
  14. print("继续执行")
  15. print("="*20,"有else")

17.4 同时处理多种异常

  1. #3. 同时处理多种异常
  2. try:
  3. result = 20 / int(input('请输入除数:'))
  4. print(result)
  5. except (ValueError,ArithmeticError) as e5:
  6. print("输入整数或除数不能为0",e5)
  7. else:
  8. print('没有出现异常')
  9. print("继续执行")
  10. print("="*20,"多个异常数据类型")

17.5 手动抛出的异常:raise

  1. """
  2. 4. 手动抛出的异常:raise
  3. 发生异常:程序由于错误导致的运行异常,是需要程序员想办法解决
  4. 程序执行:程序正常运行的结果,使用raise
  5. raise语法格式:
  6. raise [异常类名称 [(异常描述信息)]]
  7. 注:用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述
  8. raise使用情景:
  9. ① raise:语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
  10. ② raise [异常类名称]:表示引发执行类型的异常。
  11. raise [异常类名称(描述信息)]:在引发指定类型的异常的同时,附带异常的描述信息。
  12. """
  13. # 定义函数
  14. def mye(level):
  15. if level < 1:
  16. raise Exception("raise")
  17. # 触发异常后,后面的代码就不会再执行,else后的代码
  18. for i in [-1,0,1,2]:
  19. try:
  20. #调用函数mye(level)
  21. mye(i) # 触发异常
  22. except Exception as err:
  23. print(i,err)
  24. else:
  25. print(i)
  26. print("="*20,"手动引发的异常:raise")

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/130292
推荐阅读
相关标签
  

闽ICP备14008679号