B站python爬虫课程笔记(Q11-15)

 下面是学习的网址:

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

目录

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

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

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

 3)print的技巧

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

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

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

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

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

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

1)Windows的文件绝对地址

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

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

15、open-file-read&write打开文件读写的一些问题

1)一些知识点

2)r+模式


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文件,只要开头改了就行。需要注意的是用这个开头下面的语句都要进行缩进,不然跳出了这个范围就不能打开对应文件进行打印输出了。

15、open-file-read&write打开文件读写的一些问题

1)一些知识点

  • read读模式下(“r”)如果没有识别到路径当中的文件会报错,而write写模式(“w”)和append附加模式(“a”)下没有文件会自动创建文件名的文件
  • write写模式下(“w”)之前的文件里面有内容会被write写下来的内容覆盖掉,而append附加模式下(“a”)会在之前的基础上再添加
  •  换行符也不一定要在一句话结尾用,也可以在下一行的开头用,效果是一样的;
  • 同一文件夹下创建新的文件,macOS的开头是“ ./ ”,Windows是“ .\ ”

2)r+模式

  • read读模式(“r”)一样,“r+”模式下路径中的文件必须要已经存在,不然会报错;
  • ''r+"模式既可以读又可以写,但是无法在之前的基础上进行增加,要额外打开append附加模式(“a”) 进行增加;
  • 如果之前的文件里面是空的,即使你在''r+"模式的语句里面先写下write内容,再打印下read的内容,输出结果还是空值/或者是空行。按道理老说应该是有东西写进文件里,再读应该有输出才对,但是没有。
with open("./poem.txt", "r+", encoding="utf-8") as f:f.write("窗前明月光,\n疑似地上霜。\n举头望明月,\n低头思故乡。")print(f.readline())# f.write("\n窗前明月光,\n疑似地上霜。\n举头望明月,\n低头思故乡。")
with open("./poem.txt", "a", encoding="utf-8") as f:f.write("\n唐 李白")

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

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

相关文章

MySQL数据库的基本概念与安装

目录 引言 一、数据库的基本概念 (一)数据、表与数据库 1.数据(Data) 2.表 3.数据库 (二)数据库管理系统 (三)数据库系统 二、数据库的发展 三、主流数据库的介绍 (一)关…

地理数据表达方式学习——KML与SHP

一、KML-Keyhole Markup Language Keyhole Markup Language (KML)是一种XML符号,用于浏览器中二维地图和三维地球的地理注释和地理可视化(地理数据包括点、线、面、多边形、多面体以及模型等)。KML是伴随着Google Earth的使用而开发的&#x…

word的第六课笔记

1.排版的六大特点(留白、对齐、亲密、对比、重复、可自动更新) 先设置页边距为2厘米,左侧装订线考虑2.75厘米。段落间距段前段后设置一个就可以了,如段前0.5行 (留白:让文字更加容易阅读,调大页…

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能,并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…

体验函数式组件简单实现Loading 加载(造轮子篇)

一、前言 最近想着优化一下网站,在文章列表页加一个Loading操作,于是就想到了函数式组件,于是本章就来和大家一起简单探讨下实现思路。 二、Loading设计 这里我想实现的效果是:当我们刷新页面的时候,前端请求接口&…

【MySQL】中位数巧解之给定数字的频率查询中位数

力扣题 1、题目地址 571. 给定数字的频率查询中位数 2、模拟表 Numbers 表: Column NameTypenumintfrequencyint num 是这张表的主键(具有唯一值的列)。这张表的每一行表示某个数字在该数据库中的出现频率。 3、要求 中位数 是将数据样本中半数较高值和半数…

扭矩测量仪行业研究:规模不断扩大市场需求旺盛

一、市场趋势 扭矩测量仪是用于精确测量旋转力矩的精密仪器,广泛应用于汽车、航空航天、机械制造和电子产品等领域。随着工业自动化程度的提升和精密制造的需求增加,扭矩测量仪的市场呈现出稳步增长的趋势。 二、主要竞争者 市场上的主要竞争企业包括德国…

华为OD机试 - 求字符串中所有整数的最小和(Java JS Python C C++)

题目描述 输入字符串s,输出s中包含所有整数的最小和。 说明: 字符串s,只包含 a-z A-Z 合法的整数包括 1)正整数:一个或者多个0-9组成,如 0 2 3 002 102 2)负整数:负号 – 开头…

Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】

目录: 每篇前言:1.使用分布式爬取豆瓣电影信息(1)settings.py文件中的配置:(2)spider文件的更改:(3)items.py文件(两个项目一致!&…

Vue el-table 合并单元格

一般常见的就是下图这种的单列&#xff0c;上下重复进行合并。 有时候可能也会需要多行多列的合并。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&qu…

MySQL TRIM函数

TRIM函数通常用于去除字符串的开头和结尾的空格或其他指定字符。在不同的数据库系统中&#xff0c;TRIM函数的语法可能略有不同&#xff0c;以下是一些常见数据库系统中TRIM函数的用法示例&#xff1a; ### 1. MySQL 在MySQL中&#xff0c;TRIM函数的语法如下&#xff1a; sql …

3.19网络编程

select实现的TCP并发服务器 #include <myhead.h> #define SER_IP "192.168.141.134" #define SER_PORT 8888 int main(int argc, const char *argv[]) {// 1、创建一个套接字int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0);if (sfd -1){perr…

Division by Invariant Integers using Multiplication

在处理器中&#xff0c;整数除法的成本通常是整数乘法的几倍&#xff1a; 流水线式的组合乘法器通常在不到10个周期内完成操作&#xff1b;而对于整数除法则没有硬件支持&#xff0c;或者使用的迭代除法器比乘法器慢几倍。 表 1.1 比较了一些处理器上乘法和除法的时间。这张表…

php 页面中下载文件|图片

一、需求 页面中点击下载图片 二、实现 protected function pageLoad(){$filePath $_GET[file];$host $_SERVER[HTTP_HOST];$file http://.$host.$filePath;$fileName basename($filePath);$content file_get_contents($file);ob_clean();$suffixArr explode(., $file…

ceph删除坏的磁盘

在Ceph集群中&#xff0c;查看和处理坏掉的磁盘主要涉及到以下几个步骤&#xff1a;检查磁盘状态、从集群中删除坏磁盘、最后是物理或逻辑地替换坏掉的磁盘。请注意&#xff0c;处理Ceph集群的操作需要谨慎执行&#xff0c;并确保在操作前你有足够的备份和恢复计划 1. 查看集群…

数据库系统概论-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下数据库系统概论中的练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 数据库系统概论系列文章传送门&#xff1a; 第一章 绪论 第二/三章 关系数据库和标准语言SQL 第四/五章 数据库安全性和完整性…

服务器硬件基础知识和云服务器的选购技巧

概述 服务器硬件基础知识涵盖了构成服务器的关键硬件组件和技术&#xff0c;这些组件和技术对于服务器的性能、稳定性和可用性起着至关重要的作用。其中包括中央处理器&#xff08;CPU&#xff09;作为服务器的计算引擎&#xff0c;内存&#xff08;RAM&#xff09;用于数据临…

消金公司新管理办法对谁影响更大?

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 2023年9月&#xff0c;金融监管总局发布规章立法工作计划&#xff0c;首提修订《消费金融公司试点管理办法》&#xff1b;12月&#xff0c;金融监管总局在向各消金公司内部征询后&#xff0c;向社会公开消金公司管理办法…

zookeeper快速入门(合集)

zookeeper作为一个分布式协调框架&#xff0c;它的创建就是为了方便或者简化分布式应用的开发。除了服务注册与发现之外&#xff0c;它还能够提供更多的功能&#xff0c;但是对于入门来说&#xff0c;看这一篇就够了。后续会讲zookeeper的架构设计与原理&#xff0c;比如zookee…

【C++11】c++ - libc++abi.dylib:以 std::__1::system_error 类型的未捕获异常终止:互斥锁失败:参数无效

【C11】 c - libcabi.dylib:以 std::__1::system_error 类型的未捕获异常终止:互斥锁失败:参数无效 背景&#xff1a; 一个线程池的编写的时候 放在 windows使用的使用是正常的 &#xff0c;但是放到 mac 乃至 类linux环境下就会异常 上面 c - libcabi.dylib:以 std::__1::sys…