【自学用】B站python爬虫课程笔记(Q11-15)

 下面是学习的网址:

​​​​​​【Python+爬虫】

11、class定义类别的一些问题

我写的"可爱小猫类别"的代码如下:

class CuteCat:def __init__(self, cat_name, cat_age, cat_color, cat_temper):# cat_name = name# self_name = cat_name  # 这两种定义方式都是错的self.name = cat_name  # 定义方法的时候用的是“对象.方法”,中间是英文句号而不是下划线self.age = cat_ageself.color = cat_colorself.temper = cat_temper
# 两个不同的函数定义之间起码要有一行空行,这是python的编码规范,不然在pyCharm会划波浪线警告,下方第9行和第13行是空行def speak(self):print("喵"*self.age)  # 可以直接重复打印,字符*次数。为什么到这里self.age就可以直接用了?前面定义过,而且是在同一个class类别里面def think(self, content):print(f"小猫{self.name}在思考{content}")
cat1 = CuteCat("Jojo", 3, "橙色", "温顺")
cat2 = CuteCat("Dior", 2, "黑色", "比较暴躁")
print(f"这只小猫叫{cat1.name},今年{cat1.age}岁了,它是{cat1.color}的,性情{cat1.temper}")  # 花括号里应该填cat1.方法
cat1.speak()
print(f"另外这只小猫叫{cat2.name},今年{cat2.age}岁了,它是{cat2.color}的,性情{cat1.temper}")
cat2.think("你瞅啥?")

从上至下会有如下的问题

1)定义init初始化函数的一些问题

  •  定义初始化函数的英文缩写是initialize的缩写init,我第一次就打成了整型的缩写int;
  • init前后是两个短的下划线
  • 必须最先开始定义有初始化函数,没有这个函数接下来的self不能用就会报错;下面是我尝试不用init初始化函数看还可不可以定义类别的代码,后面运行发现是不行的。 
# 会报错
class CuteCat:def speak(self):print("喵"*3)  # 可以直接重复打印,字符*次数。为什么到这里self.age就可以直接用了?前面定义过,而且是在同一个class类别里面def think(self, content):print(f"小猫在思考{content}")
cat = CuteCat
cat.speak()
cat.think("你瞅啥?")
  • init初始化函数里面的内容也是" self.方法 "开头,我错误地写成了self_方法,cat.方法,cat_方法

2)定义两个不同函数之间要有空行

 两个不同的函数定义之间起码要有一行空行,这是python的编码规范,不然在pyCharm会划波浪线警告,可爱小猫第9行和第13行是空行

PEP 8: E301 expected 1 blank line, found 0  # 警告信息

前面应该(expeted)有1个的空行(black line),但是发现0行

 3)print的技巧

print可以直接重复打印,字符串*次数

12、class定义类别的一些问题2

打印"学生成绩"的例子,下面两个代码其实是一样的,但遵循DRY原则,第二个代码明显更好:

class Student:def __init__(self, student_name, student_id, student_grades):  # 可以不用student_gradesself.student_name = student_name  # self.后面可以不用那么长,用self.name也行self.student_id = student_idself.student_grades = {"语文": 0, "数学": 0, "英语": 0}  # 定义了在类别里面也不一定要用def set_grade(self, course, grade):if course in self.student_grades:self.student_grades[course] = grade
wang = Student("小王", "10086", {"语文": 0, "数学": 0, "英语": 0})
zhang = Student("小张", "10000", {"语文": 0, "数学": 0, "英语": 0})
wang.set_grade("数学", 90)  # 只改变数学科目的成绩,其他都是0分
print(f"{wang.student_name}({wang.student_id})的成绩为:{wang.student_grades}")
class Student:def __init__(self, student_name, student_id):self.name = student_name  # self.后面可以不用那么长,用self.name也行self.id = student_idself.grades = {"语文": 0, "数学": 0, "英语": 0}  # 定义了在类别里面也不一定要用def set_grade(self, course, grade):if course in self.grades:self.grades[course] = grade
wang = Student("小王", "10086")  # 这样这里面就不用重复输入初始的三门成绩了
zhang = Student("小张", "10000")
wang.set_grade("数学", 90)  # 只改变数学科目的成绩,其他都是0分
print(f"{wang.name}({wang.id})的成绩为:{wang.grades}")

最后的这组for循环打印字典里面键值对学科-成绩的综合运用还没有学会,权当做练习了。

class Student:def __init__(self, student_name, student_id):self.name = student_name  # self.后面可以不用那么长,用self.name也行self.id = student_idself.grades = {"语文": 0, "数学": 0, "英语": 0}  # 定义了在类别里面也不一定要用def set_grade(self, course, grade):if course in self.grades:self.grades[course] = gradedef print_grades(self):print(f"{self.name}同学({self.id})的学习成绩为:")for course in self.grades:print(f"{course}: {self.grades[course]}")  # course和self.grades[course]都要用花括号括起来wang = Student("小王", "10086")  # 这样这里面就不用重复输入初始的三门成绩了
wang.set_grade("数学", 90)
wang.set_grade("语文", 95)
wang.set_grade("英语", 92)
wang.print_grades()  # 结尾要有小括号结束

13、class_inheritance类别继承的一些问题

"动物--人类--小猫--小狗"父子类分类的代码如下:

class Animal:def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexself.num_eyes = 2def breathe(self):print(self.name + "在呼吸")def poop(self):print(self.name + "在拉屎")class Human(Animal):def __init__(self, name, age, sex):super().__init__(name, age, sex)self.has_tail = Falsedef read(self):print(f"{self.name}在阅读")class Cat(Animal):def __init__(self, name, age, sex):super().__init__(name, age, sex)self.has_tail = Truedef scratch_sofa(self):print(f"{self.name}在抓沙发")class Dog(Animal):def __init__(self, name, age, sex):super().__init__(name, age, sex)self.has_tail = Truedef play_ball(self):print(f"{self.name}在玩球")cat1 = Cat("Jojo", 2, "boy")
print(cat1.has_tail)
print(cat1.num_eyes)  # 可以直接调用初始化函数的数据int整型2
# print("cat1.has_tail")  # 对象的函数不能用双引号包起来
print(f"这只小猫的名字叫做{cat1.name},今年{cat1.age}岁了,是一个{cat1.sex}!")
print(f"{cat1.age}")
print(cat1.age)  # 第二种更加简单
cat1.scratch_sofa()
cat1.breathe()
# print(f"{cat1.scratch_sofa()}")  # 为什么打印出来下一行是None?因为多用了一个print,本身scratch_sofa函数就是定义的打印了
# print(f"{cat1.breathe()}")
print("它有尾巴吗?" + str(cat1.has_tail))
print(f"它有尾巴吗?{cat1.has_tail}")
print(cat1.has_tail)  # 三行都一样的,返回True布尔值

1)定义两个不同类别之间要有两行空行

2)父类子类里面定义的函数可以直接用

print("它有尾巴吗?" + str(cat1.has_tail))
print(f"它有尾巴吗?{cat1.has_tail}")
print(cat1.has_tail)  # 三行都一样的,返回True布尔值

直接用的方法是 “对象 . 函数” ,也可以不用print,只不过有的函数你运行之后看不到运行结果, 

3)定义函数为打印,再打印这个函数,则会多出一行为None,没有返回值

print(f"{cat1.scratch_sofa()}")  # 为什么打印出来下一行是None?因为多用了一个print,本身scratch_sofa函数就是定义的打印了
cat1.scratch_sofa()  # 函数可以直接用,且这个函数定义就是打印,所以可以运行显示

 第一行运行结果下面还有一行None,就是因为重复打印返回默认空值的结果。第二行就没有事。

 14、open-file-read打开文件读取的一些问题

1)Windows的文件绝对地址

比如我在桌面建立了一个txt文件,可以右键这个文件图标, 复制文件地址,得到的地址是:

"C:\Users\ABC\Desktop\test.txt"

而你输入到open函数里面会报错,因为你要将单反斜杠变成双反斜杠

"C:\\Users\\ABC\\Desktop\\test.txt"

这样子你就能根据路径打开对应位置的文件了。

2) 打印两行readline之间会有一行空行

这个UP主在视频中已经说得很清楚了,主要是readline会读取文件中每一行末尾的换行符,print函数结尾默认换行,所以会打印出一行空行。

3)with关键字而不用close()

用下面这段代码:

with open("C:\\Users\\ABC\\Desktop\\test.txt", "r", encoding="utf-8") as f:

而不用这个:

f.close()

可以避免每一次open打开文件结束时要手动输入这么一行close文件,只要开头改了就行。需要注意的是用这个开头下面的语句都要进行缩进,不然跳出了这个范围就不能打开对应文件进行打印输出了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring--注解

一、简介 Spring注解是一种元数据形式的代码,用于提供配置信息,从而减少XML配置文件的使用。Spring框架提供了一系列的注解,用于简化Spring应用程序的开发。通过使用这些注解,开发者可以在不编写大量XML配置的情况下,…

代码随想录day23(2)二叉树:从中序与后序遍历序列构造二叉树(leetcode106)

题目要求:根据一棵树的中序遍历与后序遍历构造二叉树。 思路:408的经典题目,思路和手撕的思路差不多,先从后序中找到根节点,再从中序中找到此节点,然后分割成左右子树,记录一下左右子树的节点个…

PyQt5使用

安装Pyqt5信号与槽使用可视化界面编辑UI (Pyside2)ui生成之后的使用(两种方法)1 ui转化为py文件 进行import2 动态调用UI文件 安装Pyqt5 pip install pyqt5-tools这时候我们使用纯代码实现一个简单的界面 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButto…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛——B 题:基于多模态特征融合的图像文本检索完整思路与源代码分享

一、问题背景 随着近年来智能终端设备和多媒体社交网络平台的飞速发展,多媒体数据呈现海量增长 的趋势,使当今主流的社交网络平台充斥着海量的文本、图像等多模态媒体数据,也使得人 们对不同模态数据之间互相检索的需求不断增加。有效的信…

Rocket MQ 从入门到实践

为什么要使用消息队列,解决什么问题?(消峰、解藕、异步) 消峰填谷 客户端》 网关 〉 消息队列》秒杀服务 异步解耦 消息队列中的重要概念理解。(主题、消费组、队列,游标?) 主题&…

新手向-从VNCTF2024的一道题学习QEMU Escape

[F] 说在前面 本文的草稿是边打边学边写出来的,文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似,在分析结束以后我又在部分比较模糊的地方加入了一些补充,因此阅读起来可能会相对轻松(当然也不排除这是…

Transformer总结

1.Transform背景介绍 1.1Transform的优势 相比于之前占领市场的LSTM和GRU模型,Transformer有两个显著的优势: (1)Transform能够使用分布式GPU进行并行训练,提升模型训练效率 (2) 在分析预测…

zookeeper基础学习之六: zookeeper java客户端curator

简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java…

【算法刷题 | 数组】3.12(二分查找、移除元素、有序数组的平方、长度最小的子数组、螺旋矩阵2)

文章目录 1.二分查找1.1题目1.2思路(核心:区间的定义)1.3左闭右闭1.4左闭右开1.5总结 2.移除元素2.1题目2.1思路2.2.1暴力解法2.2.2双指针法 23总结 3.有序数组的平方3.1题目3.2思路3.2.1暴力解法3.2.2双指针法 4.长度最小的子数组4.1题目4.2…

Linux中文件和目录管理(创建删除移动复制)

目录 1——一次建立一个或多个目录:mkdir ​2——创建一个空文件:touch 3——移动和重命名:mv 4——复制文件和目录:cp 5—— 删除目录和文件:rmdir和rm 在学习文件与目录的管理的一些命令之前,我们先…

深度学习-面经(part2、CNN)

2 CNN 对图像(不同的数据窗口数据)和滤波矩阵做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作。 卷积神经网络由输入层、卷积层、激励层、池化层、全连接层组成。 ① 最左边: 数据输入层,对数据做一些处理…

安装vscode及插件

一.环境准备 安装vscode,官网地址:https://code.visualstudio.com安装插件: Chinese (Simplified),为 VS Code 提供本地化界面,按下“CtrlShiftP”组合键以显示“命令面板”,然后键入“display”以筛选并显…

【划重点】小程序开发难哭了?别怕,大数据揭秘教科书般的小白必看攻略!

当我们在微信的海洋中航行,偶尔会看到一些令人眼前一亮的小程序。它们或简洁实用,或游戏娱乐,或商业推广,各具魅力。但你是否曾好奇过,这些看似简单的小程序背后,隐藏着怎样的开发秘密?今天&…

数字后端 EDA 软件分享

数字后端 EDA 软件分享 推荐这几家的EDA工具吧,虽说我也支持国产工具,但是我还是选择了这几家的工具 apache cadence mentor synopsys 下图我现在用的eda环境,利用网上的资源,自己独立在vmware上搭建好的EDA环境 除去pdk&#…

tmux终端复用器

tmux使用手册 会话与进程需求痛点tmux作用使用场景安装tmux常用命令在tmux中编译代码多个显示器分辨率的tmux attach出现窗口不匹配的问题 会话与进程 命令行的经典使用方式: 用户打开一个终端窗口(terminal window);用户在终端…

从政府工作报告探究计算机行业发展

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

计算机考研|怎么备考「科软」?

学好408和考研数学就可以了 大家对于科软已经回到了理性的区间,很难再出现刚开始的300分上科软的现象,也不会再出现388分炸穿地心的现象。 如果大家想报考科软,我觉得一定要认真对待复习,不要抱有抄底的心态去复习。 众所周知&am…

7.JavaWebHTML:构建数字世界的语言和结构

目录 导语: 第一部分:Web概念与作用 1.1 Web的定义 1.2 Web的作用 1.3 JavaWeb 第二部分:HTML概念与内容 2.1 HTML的定义 2.2 HTML的内容 第三部分:HTML的作用 3.1 HTML的作用 3.2 HTML在现代Web开发中的角色 …

[Redis]——主从同步原理(全量同步、增量同步)

目录 Redis集群: 主从同步原理: replid和offset: 全量同步和增量同步: repl_baklog文件: 主从集群的优化: Redis集群: 部署多台Redis我们称之为Redis集群,他有一个主节点(负责写操作)&…

爱普生晶振发布RTC模块晶振(压电侠)

爱普生晶振一直以”省,小,精”技术作为资深核心,并且已经建立了一个原始的垂直整合制造模型,可以自己创建独特的核心技术和设备,使用这些作为基地的规划和设计提供独特价值的产品. 世界领先的石英晶体技术精工爱普生公…