大家好,欢迎来到拍摄网络爬虫基础课程。在这个阶段,我们将从零开始学习网络爬虫的基本原理,掌握 http 协议和 html 基础,并学会使用 requests 和 beautiful soup 这两个强大的库来爬取和解析静态网页。 在正式开始学习爬虫技术之前,我必须首先强调法律的重要性。技术本身是中立的,但使用不当就可能触犯法律。请大家务必记住,未经授权的访问、侵犯个人隐私、破坏网站等行为都是绝对禁止的。我们必须尊重网站的规则,做一个负责任的开发者。首先我们来了解什么是网络爬虫。简单来说,它就是一个自动在互联网上抓取信息的程序, 它的工作流程就像这张图展示的,从发起请求开始,到解析和存储数据,再到发现新链接,不断循环。要理解爬虫,必须先了解 http 协议。 我们的浏览器发送一个 http 请求,服务器返回一个 http 响应。请求中包含了我们的身份信息,请求头响应中包含了我们想看的网页内容,响应体同时还会返回一个状态码,告诉我们请求的结果。服务器返回的响应体通常是 html 代码。 html 是 一种标记语言,它的结构就像一棵树, 我们可以通过标签元素和属性来定位和提取我们想要的数据。在 python 中,我们可以使用 request 库来模拟浏览器发送 http 请求。 它的用法非常简单,一行代码就可以发送一个 get 请求,并获取服务器的响应。我们还可以通过设置请求头来伪装成浏览器,或者使用 pos 提方法提交数据,这在处理复杂网络交互时非常实用。获取到 html 内容后,我们就需要解析它。 beautiful super cool 可以 帮助我们轻松地从 html 文本中提取数据。我, 我们可以通过标签名、 id class 或者更强大的 css 选择器来精确定位我们想要的信息。理论学习完了,我们来动手实践一下。我们将爬取一个专门用于练习爬虫的名言网站。通过分析页面结构,我们可以定位到名言和作者所在的标签,然后用 requests 和 beautiful soup 轻松地把它们提取出来。恭喜大家完成了基础篇的学习, 现在你已经具备了爬取静态网页的能力,但现实中的网站往往更复杂,比如动态加载内容和反爬机制。这些更高级的技巧将在我们的进阶篇中继续探索。如果你想深入学习学习更多内容,我整理了 python 入门到精通的完整教程及一百个实战项目和源码,留下学习我发你,感谢大家的聆听,我们下次课再见!
粉丝288获赞818

各位同学,今天我们正式进入 python 网络爬虫进阶,如果说基础爬虫是爬静态页面,那进阶核心就两件事,搞定动态页面,打赢反爬对抗。今天我们会重点讲两大神器, l x m l 加 xpath 高效解析以及 selenium 处理动态渲染。在配套企业最常用的反爬与数据存储方案,学完就能直接写工业级爬虫。首先讲数据解析, 大家平时可能用 beautiful soup, 但在企业项目里, l x m l 才是标准选型,它底层是 c 语言,写的速度碾压纯 python, 而且原声支持 xpath, 写起来像写路径一样简单,大规模数据抓取时优势特别明显。简单说, l x m l 负责把 html 变成可解析的数, x pad 负责精准点选你要的数据。 x pad 是 什么? 就是 h t m l x m l 的 查询语言,像文件系统路径一样,导航节点不用,正则不用,层层便利。一行表达式直接定位到目标标签属性文本爬虫里百分之九十的解析都靠 x path 完成。来看最常用的写法, div class equals main, 意思是在整个文档里找所有 class 等于 main 的 div, 这是定位页面正文内容区最常用的语句, 几乎每页都会用到。再看提取链接, per 八 if, 直接拿到所有 a 标签的 o f 属性爬列表页,翻页抓取外链全靠这一句。 x path 就是 这么直接拿到就用上代码。最经典的 l x m l 实战, 一,导入 h m o 二、把 html 字串解析成数。三、用 x path 取文本,一行定位,一行提取,干净利落,处理不规范 html 也不怕,加个 recover 等于处开启容错烂页面也能解析。强调一下, l x m l 能 hold 住 g b 级大文档,速度稳,内存占用低。 企业爬虫为什么选它?因为高性能加强容错加支持 xpath, 这三点就是生产环境刚需。接下来进入进阶核心动态页面。 现在的网站全是 js 渲染, ajax 加载 request 只能拿到空壳, html 数据根本看不到,怎么办?用 selenium, 它直接驱动真实浏览器,完整渲染页面,执行 js, 你 眼睛看到什么,爬虫就能拿到什么。 第一步,启动浏览器 webdriver, chrome 一 行代码,打开真实 chrome, 不是 模拟请求,是真的浏览器窗口,这就是 selenium 强大的地方,完全模拟人类访问。 第二步,访问页面 driver get url, 它会等浏览器把 j s c s s 图片全部加载完再继续执行,不像 requests 只拿原码, selenium 拿的是渲染后的完整 d o m。 第三步,定位元素 支持 i d x pad、 c s s 选择器等多种方式,想点哪里,输什么内容,先精准定位到元素。第四步,模拟操作, click 括号,点击 sendkeys 输入滚动页面,所有真人能做的动作 selenium 都能做,这就是爬动态页面的关键。很多数据需要登录才能看, selenium 最擅长的就是模拟登录, 定位账号框,输用户名,输密码,点登录,一气呵成,突破权限,维持绘画爬需要登录的站内数据全靠这套流程。直接看登录模板代码,打开登录模板代码,打开登录页,定位用户名密码输入框,填入账号密码,提交登录,这是所有需要登录爬虫的标准,开头复制改下元素定位就能用。 现在进入最实用的环节,反爬对抗。第一关, user agent 检测服务器,一看请求头不是浏览器,直接拦。解决办法,带上合法 u a, 伪装成 chrome h 等主流浏览器。 第二关, ip 封禁,同一个 ip 访问太快直接拉黑。解决办法,代理 ip 池轮换,每次请求换一个 ip, 分 散访问来源。第三关,访问频率,机器一秒请求十次,人类做不到。解决办法,随机延迟,模拟人阅读翻页的速度。反爬的核心只有一句话,反爬的核心只有一句话,让程序行为无限接近真人。 合法 u a 换 ip, 合理延迟。模拟操作做到这几点,基础反爬基本都能过。反爬和反反爬,本质是一场行为模拟的博弈。爬下来的数据不能放内存,要持久化存储。最清亮最通用的格式就是 csv excel 能打开数据库,能导入,数据分析能直接读,非常适合爬虫结果。用 pandas 存 csv 超级简单,一、把 爬取的列表转成 data frame。 二、一行导出到 csv, 两行代码搞定。存储 csv 时一定要加 index 等于 false, 然会多一列行号,数据涌于导入,还容易出错。企业规范,只存业务数据,不要多余缩影。中文乱码是爬虫存储的常见坑。解决办法,编码用 utf 八 sig 带 b o m 头 excel 打开,不乱码,跨平台兼容完美两个生产环境。技巧,一、数据量大,用 chunk size 分 块写入,避免内存爆掉。二、敏感数据先脱敏再存储,合规安全。 我们拿某户热榜这类懒加载页面做实战痛点至渲染首屏下滑才加载更多 request, 拿不到后面的数据,必须用 selenim 模拟滚动看核心滚动代码循环五次,每次执行 g s 滚到页面底部 等待三秒,让 a g a x 加载滚动等待再滚动,直到加载完全不内容。这是爬无限滚动页面的标准套路。到这里你已经掌握 l s m l 加 x path 高效解析、 selenim 处理动态页面登录、滚动三大基础,反爬应对、 cv 规范存储 已经具备企业级爬虫开发能力,单机爬虫能搞定万级数据,但到百万级、千万级就需要分布式。下一站 scrip 分 布式爬虫体系,多节点协调,高吞吐,大规模采集更复杂的验证码,行为风控,我们也会在高级课逐一攻课,如果你想深入学习 学习更多内容,我整理了 python 各个方向入门到精通的完整教程,即一百个实战项目和原留下学习我发你,感谢大家的聆听,我们下次课再见!

多看 python 知识,你的大脑将不可逆转的变聪明!警告,本系列视频耗时三年制作,共计两千零三十六分钟,从零开始详细介绍 python 知识技巧。由于时长太长,本视频先带你过完入门篇条件判断,那接下来咱们来看一下这个条件判断啊。那这个条件判断呢,在我们的程序里面 是特别的常见,也特别常用的一个东西,也很简单啊。那首先什么时候会用到这个条件判断?其实很简单,之前我已经聊过了,就比方说,我现在兜里有钱了,对吧?兜里钱多了呢,我想搓一顿,好的,我想来一个铁锅炖, 对吧?来,铁锅炖的话,我得先判断一下我兜里有没有钱呢,有钱了我就铁锅炖,没钱呢啊,就回家啃咸菜。 所以此时我们的条件判断其实就是当我们某一个条件成立之后,我要做一个什么事情,条件如果不成立,去选择另外一件事情。那么此时你想象一下,我们的程序是不是相当于产生了一个分支啊? 对,程序从这往下走,走着走着。哎,在这块我得判断一个条件,这个条件如果成立了,往这走,如果不成立了,往这边走,对不对?哎,这就是条件判断啊。那条件判断我们常见的这个语句呢?就是 if 语句 啊, if 语句的语法规则。来简单跟各位说一下啊,这语法基本上就是这样, if 空格后面跟上条件。哎,如果条件成立的话,我去做什么?什么事情啊?那我们往里面怼个 pass 啊。那这个就是第一种我们常见的 if 的 语法规则,那么它的意思是,如果条件成立,就执行这个 pass 的 代码,不能说 pass 代码吧。啊,这个代码就成立,就执行这个代码啊,如果不成立就不执行啊,特别简单的一个逻辑。来,我们来看一下啊,这第一种语法啊,第一种 对不对?比方说我现在兜里有钱了,是吧?有钱码内对吧?码内等于五百啊,等于五百,如果空格你的钱,哎,大于了多少呢?大于了这个,这个三百, 哎,我们就可以去,干嘛干嘛,注意,这个地方有一个冒号啊,冒号我行不行啊?行了,就这个地方有一个冒号啊,冒号。一回车你就会发现不一样了。 哪不一样了?之前是不是顶着这前面写的,但是现在你一回车他发现,那这 p 叉不告诉你在这写,什么意思呢?注意, python 里面没有大货号的这种啊,就是代码的范围的这么一个约定,所以 python 里面为了控制这个代码的层级,就用这个缩进 啊,这个缩进来表示这个代码的这个层次关系。比方说这里面我啵敲一下来,你发现这前面有有有,有一个啊,缩进的一个效果,那我就可以在这,比如说 print 一 二三啊,然后再 print 一个,来四五六,注意看啊,再来 print 七八九,注意看。 这个 print 一 二三和四五六都是从属于这个 if 的, 就当它条件成立的时候,它会执行 这两样东西,当这个条件不成立的时候,这俩玩意就不执行。也就是说不论你成立不成立,下面这个玩意一定是要执行的, 懂我的意思吧,就成立的时候会多执行一段代码,不成立呢,无所谓,直接往下走,知道吧?所以这里面 python 其实相当于用这个缩进啊,把这两行代码牢牢的,是不是拴在了这个 if 里面, 是吧?把它框在了 if 里面了?而对于其他语言是这么做的,其他语言是加了个大括号,比如说加网,比如说 c, 对 吧?都是加个大括号,把它们括起来代表的是啊,后面这个代码块是是跟这个 if 条件判断,对吧?这就是形成一定的关系的,知道吧?所以 python 里面它有一个特点,就是它必须 得保证啊,这个东西他是有一个统一的规则和规律的,你不能这,哎,少一个,这,他多一个不行, 知道吧?解释器就懵逼了,解释器他就是一开始这个是多长好了,下面就应该多长啊,你这上面这个不 就长度不一样?好了,你这块一定有问题,他就报错了,知道吧?所以这个地方啊,一定要严格的去遵守他的这个规则啊。这个地方你可以敲四个空格,也可以,干嘛呢?就是敲黑车,或者说如果你顶格的话呢?摁一下你电脑键盘上 q 左边那个键叫 t b, 摁一下就过来了, 这个东西叫缩进啊,这个东西叫缩进。好了,那这是 a 户条件,那接下来咱们试一试吧,比方说,哎,这干掉了啊,比方说,有钱了,有钱了干嘛呢?呃,铁锅炖可以吧?铁锅炖,然后这个呢?回家没问题吧?哎,走, 看五百大于三百,是不是条件成立?条件成立是不是铁锅炖完了之后呢?是不是程序还得接着往后走啊?哎,该回家回家,该干嘛干嘛,但是如果你兜里没钱,一百块钱, 对吧?这个条件是一百块钱,一百块钱大于三百是不成立了?不成立还铁锅炖吗?不,铁锅炖,但是程序是不还得接着往后走啊?接着往后走是不该回家呀?所以这个时候走,对吧?只能回家,吃不了铁锅炖啊,吃不了铁锅炖,所以这种逻辑相当于什么呢?相当于程序这样去执行, 哎,这样去从上楼下去执行,执行着干嘛呢?这块,哎,产生了一个条件判断,如果条件成立的话,哎,他去执行一个其他的东西, 哎,执行一个其他的东西,其他东西执行完了,回到这,哎,接着往后去走,接着往后去走。当然这个是什么?是不是条件成立啊?哎,条件成立啊,那如果条件不成立,是不是也得往后走?不管条件成不成立,这后面代码该怎么走还怎么走, 知道吧?很多小伙伴就是一写完 if 之后,后面这玩意怎么咋怎么整啊?不会了啊,一瞬间懵逼了啊,这,这个不至于啊,不至于。所以你把这个好好的去写一写,理一理啊,缕一缕, ok, 那 这是咱们要聊的 if 的 第一种语法。 好,那 if 的 第一种,咱们学完了之后,咱们来看 if 的 第二种语法啊,这会标一下啊,这是第一种语法规则,哎,是这个样子的,那么他的第二种语法其实就跟刚才我第一次画那个图就很像了,他可以做一个条件的判断, 哎,全面判断,如果条件成立呢?执行代码,对不对?如果条件不成立,你去干另外一件事情啊,代码。所以这个时候我们的整个执行过程是,如果条件成立,干嘛呢?执行代码一,如果,否则 执行代码二。所以这俩玩意他相当于是个对立面懂吗?是个对立面,二选一。选择他的前提是他的条件得是真, 反过来条件如果是真一定执行他条件如果不真是假的,那就走下面这个啊,所以他的翻译过来叫否则 else 啊 else。 来,我们看一下视力。这个干掉啊。 来,我们写下第二种。第二种呢直接写一个就是比较好一点的程序啊,比方说还是兜里的钱,对吧。兜里的钱。这回我不确定了,让你输入 对不对?你给我输入。请输入你兜里的钱好了,你输入完钱之后我有了钱就可以做判断了。如果你兜里的钱大于五百我不吃铁锅炖了,我要干这个事情, 哎,不行不行不行不行啊,对吧,好,否则,哎,我去干另外一件事情对不对? ok, 搞定哎 sorry, 搞定。那么此时程序是不是有两个方向去走啊。 你的钱如果大于五百干这件事,不大于五百干这件事情对不对?他俩是对立的对不对?来,我们来试一下啊。走, 看呐,我现在有九百块钱。哎看,我们又见了一个错误。这个错误什么呢?说这个大于号啊。 not supported 就是 不被支持,不被支持不被支持在哪呢? between instance of str and int instance。 实力就是数据好吧,你把它当成数据就可以了。在什么和谁谁谁谁之间,在四个数和 int 之间不支持使用 加括号。咦,哪能来这玩意呢?五百 int money 哦, input 是 吧? str 啊对不对?所以此时我们是不是还得 是不还得干这么个事哎。 int money 可以 吧,对吧?把这个 money 给它转化成 int 类型,再重新复制给这 money, 这 money 是 不是变成数字了,对不对?来,我们再试验一下啊,走好了,我兜里有钱了,九百块,走啊, 干大事情是吧?那兜里没钱,那就九块钱,那回家姑娘对不对?所以此时我们这个程序就相当有了两个方向啊,两个方向对不对?来,我们就可以说 程序过来执行的,执行的,对不对?判断一下有没有钱呢?有钱,哎,干这个事,没钱干这个事,对不对?所以 if else 他 俩你可以认为是一个对立的一个效果啊,成立干这个事,不成立干这个事啊。 好,那这是 if 条件的第二种写法把,这个各位可以去尝试去写一写,练一练啊。 好,那接下来咱们来看一下 if 语句的第三种语法规则啊。那么在刚才的学习当中,我们其实已经可以写出来一个比较不错的程序了,比方说,我判断一下我兜里有没有钱,对吧?有钱的话可以去做足疗,否则的话就不一样,那么我还想干嘛呢?就是有钱吧, 我们就可以做很多的选择,比方说我真的选择做足疗了,但是呢,我还得判断一下我兜里的钱啊,我可不可以选一个价格高一点的套餐,或者价格低一点的套餐, 对吧?你说在这我还想做盘盘,那么也就是说我们 if 可不可以做嵌套呢?当然是可以的,来,各位, if 语句可以 互相嵌套啊,可以互相嵌套,比方说我们可以这样啊,来,这样搂搂过来,对不对?在这个地方还可以继续 if 怎么怎么着,对不对?一个冒号回来推进去, 对吧?可以继续往下写啊,当然你还可以跟上什么呢? else, 这么卡,叭叭叭,接着往下写下去,对吧?所以这个东西就很活很灵活啊,比方说,我们来把这个真的把程序写出来啊,然后把这个复制一下。注,是啊,来第三种, 来第三种,走,来,过来。走。好了,接下来我依然让他去给我输钱,好吧,码那等于应来 input, 你 就直接这样写了啊,请输入你兜里的钱,好吧, 就这么写下来的来,这个能看懂吗?各位?就是我把上面这个东西就是相当于给它扩进去了啊,把这个印印这个东西,把那个那个音符的扩起来了。好,接下来多判断。如果你兜里的钱怎么大于一千块的时候, 哎,大于一千块的时候,你是不是可以去做足疗了,对不对?可以 print 干嘛?是不是?做,哎?做足疗对不对?然后 else 来 print 干嘛?回家五姑娘 啊,但是呢,做足疗屋是不是还可以选套餐呢?各位,对不对?如果我,我大于一千的前提下,如果我兜里的钱,我靠,这回爽了,如果他大于多少呢?大于五千对不对?充个 会员卡没毛病吧,对不对?还能给我打折呢对不对? else, 否则的话干嘛?洗个脚,哎,就走 可以吧,对不对?所以这个时候我会发现这个东西还可以在钱掏我大于五千的时候充会员卡,我可以选择,对吧?充八千充一万,对吧?随便选择对不对?你会发现这个东西可以无限的往下挪下去, 对不对?无限的往下挪下去对不对?来,我们来试验一下这个程序啊,走啊,这回程序的分支就多了啊,比方说我今天穷,就八块钱, 八块钱没的说,这里面进不去,对吧?直接就姑娘去吧,走,那回来姑娘走,你现在兜里钱多了,对吧?我一千两百块,一千两百块,一千两百块,这个条件是不是成立?成立,是不是可以去去去,去洗脚呀?洗脚的话还得判断一下啊,大不大?有五千呢? 不大,充卡充不起。那怎么办呢?洗个脚就走,哎,好像也没问题,走,洗个脚就走,那再往下我还可以干嘛呢?比方说我兜里的钱特别多,哎,好像也没问题,走,洗个脚就走,那再往下我还可以干嘛呢?比方说我兜里的钱特别多,哎,好像也没问题,走,我可以充个会员卡,走,哎,我可以充个会员卡, 对不对?所以这个时候你会发现 if 可以 无限的往里面进行嵌套啊,无限的往里面进行嵌套,你还可以套很多很多东西,对吧?所以这个是我们要讲的这个条就是 if 句可以互相的嵌套啊这么一个 规则。但是呢,你如果说真的要往死里去嵌套的话,你会发现越套越深,越套越深,所以第四个要聊的就是想办法不让他套的那么深,还能实现这些功能啊。 好,那接下来咱们来聊这个第四种方案啊,咱们说如果让这个 if 嵌套的太深的话,是不是就不舒服了, 对不对?太深呢,肯定不舒服,所以这个时候我们得想办法,哎,让它别套的这么深啊,让它浅一点,那怎么办呢?哎, if 的 第四种语法来。 if 的 第四种语法,如果,哎,某个条件成立,我们去执行代码一,哎,后面可以跟上这么一个玩意儿,叫 if, 条件二来去干这件事情。那然后呢?还可以接着 l、 e、 f 条件三 啊,代码三,以此类推,后面就不写了,你可以不拉不拉,写很多,随便后面,最后也可以跟上 else, 对 吧? else, 然后不拉不拉不拉不拉不拉, 对不对?那他的含义就很好理解了。如果条件一成立,执行代码一,否则的话,听好啊,前提得是这个一不成立对不对?一,否则肯定是钱不成立才能走到。否则吗?对不对?否则,如果条件二成立,执行代码二, 对不对?再否则,如果,对吧,条件三成立,执行代码三,如果上面的都不成立,最后 else 收尾啊, else 收尾。所以这个程序我们就可以利用这种语法规则把它做一定的调整。哎,比方说,走注示一下啊,来第四种 啊,这一种用的比较多,用的比较多,但是你如果能看明白的话,其实很很容易的啊,很容易的,比方说,那一切都从这开始,如果大于一千块,对不对?我就可以考虑啊,洗脚啊,大于一千块不行,大于五千块。各位, 大于五千块,我不光洗脚,我还要充卡呢,对不对?哎,我要充卡对不对?好了,接下来可以看了。哎呦哎呦,又是什么意思? 是不是?否则对不对?一,否则的话,是不是当他不成立的时候,你就说当他这里面就会隐含这个条件,就是你的这个 money 不 大于五千的时候,你的 money 大 于一千。 那这什么意思?是不大就在五千跟一千之间呢,在这之间的话可以干嘛?是不就是洗个脚回家对不对?再否则 你又没五千块钱,你也没一千块钱,你怎么办?你只能回家对不对?来,我们来试验一下啊,走钱的话六千块走,充个卡没毛病吧?来,走,这个时候,哎,我点多了啊, 顶多了来,呃,三千块,哎,三千块你要你就要琢磨琢磨,如果三千成立吗?不成立,不成立的话干嘛?是不是走这个就得大于一千呐?三千大于一千成立啊,成立。回家洗个脚对不对?咱走啊,洗个脚回家啊,那再走兜里就八块钱 啊,自己回家玩去对不对?所以这时候你会发现啊,我们的 a 处条件对吧?就就就就就就不像之前的对吧?一层一层的,那么 a f 和 l f 之间这里面代码也可以再次嵌入 f 语句,对不对?就说白了,这些玩意可以互相的检讨,想怎么用就怎么用。这里面唯一不能单独拎出来用的是 else, 你 不能说啥也没干呢。来,看呐看呐,各位, 就它不行,你不能单独的说我 else, 我 要吃 吃饭对吧?否则我要吃饭。那,那前面干啥了对吧?前面干啥了?这什么条件呢? 对不对?你就否则了,啥都没有不行是吧?所以 else 和 if 你 不能单独的去用它,这是唯一的硬性规定,其他的随便套随便用。比如说 if, 单来个 if 可以 对吧? if else 可以 对吧? if l if 可以, 懂吗?啊?你你你可不能这么干,你不,你不能 if 啊,然后呢?再来一个,哎 sorry if 直接跟个 else, 然后再来 if 这么干也不行,各位你细品读一读 对吧?如果填成立啊,否则干这个事情,对,那还有他啥事呢?永远没有了对吧?所以不能这么干,所以基本上 if else 的 用法就是我所总结的这这几大类。基本上就这几大类啊, 那这是关于 python 里面如何来做一个条件判断这样的一个东西啊?这样一个东西, ok, 那 条件判断咱们就说这么多,谢谢各位。

大家好,欢迎来到 python 系列课程,今天我们将学习一个非常重要的数据结构,原组 top。 原组最大的特点就是它的有序性和不可变性,这使得它在数据保护、函数返回、多值等场景中有着独特的应用。 让我们一起揭开原组的神秘面纱。在学习原组之前,我们先来看几个生活中的例子,比如地图上的坐标点、 rgb 颜色值、个人信息记录。这些数据都有一个共同点,它们都是由多个元素组成的整体元素之间有明确的顺序,并且我们希望这个整体的内容是稳定的,不被轻易修改的。 这正是源组要解决的问题。那么在 python 中,源组到底是什么呢?它是一个有序且不可变的序列数据结构。记住这两个关键词,有序和不可变。有序意味着你可以通过缩隐访问元素。不可变意味着一旦创建就不能再修改它的内容。 创建源组主要有两种方法,第一种是直接使用小括号,这是最推荐的方式。第二种是使用 tpl 函数,它可以将一个列表、字母串等可迭代对象转换成源组。这里有一个非常常见的初学者陷阱, 如果你想创建一个只包含一个元素的原组,必须在元素后面加上一个逗号,否则 python 会把它当做一个普通的括号表达式,而不是原组。 记住,单元素原组逗号不能少。访问原组中的元素非常简单,和列表一样,我们可以使用缩影和切片,缩影从零开始,也可以使用负缩影。切片可以让我们获取原组的一个子序列,这些操作都和列表完全一样。原组和列表非常相似,但核心区别在于可变性。 列表是可变的,可以随时修改,而原组是不可变的,一旦创建就不能改变。因此,当你需要存储不希望被修改的数据时,应该使用原组。 原组的一个非常重要的用途是让函数返回多个值。 python 的 函数只能返回一个值,但我们可以返回一个原组,然后在调用时一次性接收多个返回值, 这在实际编程中非常方便。源组的不可变性还赋予了它两个独特的用途,第一,它可以作为字典的键,而列表不行。第二,它可以用来保护重要数据,确保数据在程序运行过程中不被意外修改。源组的不可变性还赋予了它两个独特的用途,第一,它可以作为字典的键,而列表不行。 第二,它可以用来保护重要数据,确保数据在程序运行过程中不被意外修改。好了,我们来总结一下今天学习的核心知识点,记住,源组是有序且不可变的,掌握它的创建访问方法, 理解它和列表的核心区别在于不可变性,并了解它的函数返回多值作为字典键和数据保护方面的用途。今天我们学习了源组的基础知识,如果你还想深入学习学习更多内容,我整理了 python 入门到精通的完整教程及一百个实战项目和原版,留下学习我发,感谢大家的聆听,我们下次课再见!

所以我建议学 python 编程要从解简易的编程题开始学起。这期视频我就来解开一个艰难解答的问题。有诸多初学的网友总是有一开始就有个疑惑,学 python 编程要从什么开始学起? 是死磕那些基础的语法吗?不不不,学编程就要从解题开始, 要先从讲义的编程题目开始学起,在解题的过程中来理解语法,这样会更深刻,也更容易掌握,也更具趣味性,才有学习的动力。例如这一期视频这个关于到底是谁打碎了窗户玻璃的这个编程练习题, 我用一种更通俗易懂的讲解这四个小朋友说的话,这就是四个命题, 而约束条件就是当他们只有一个命题成立的时候,就是最终的答案。所以咱们写代码,设计代码,先是将这个打碎玻璃的名单,因为不外乎这四个小朋友存入到一个列表,然后再用循环叠带来,把每一个有可能打碎玻璃的人 给他叠带出来,来进行这个命题验证。这四个命题的验证啊,要验证每一个小朋友说的话是不是真命题,那么咱们只要用关系表达式 就行了,而取决于每一个小朋友所说的话是不是真命题,就是正确的答案,就是打碎玻璃的。那这四个小朋友都有可能是打碎玻璃的,所以他给出一个约束条件,就是当一个小朋友说的话是真命题的时候, 才是正确答案。如果有两个小朋友说了真话,也就是这四个小朋友所说的话有两个或两个以上是真命题,都不是正确答案。所以咱们这里加一个判断,就是如果推测结果只有一个是真值,推测结果只有一个是真值,同等于一, 那么就输出正确的答案。这四次循环阶段,因为有四个小朋友执行下面的这个检测啊,就会得出四个结果,而四个结果当中只有一个真命题的结果才输出正确的答案。所以咱们这个判断就相当于是这个已知条件的这个约束,约束条件 啊,运行代码 f 五键或者鼠标右键运行。说真话的人是小刚,那么打碎玻璃的人是小华,因为只有这一种正确答案 才能吻合这个题目给出的只有一个人说的真话,其他的讲样都有两个人说的真话。你看第一种讲样两个人,第二种讲样有两个人说的真话,第三种讲样也有两个人说的真话。 只有第四种检验就只有一个人说真话,说真话的人就是小刚啊,打碎玻璃的人就是小华, 只有这种答案才能够完全吻合他这个约束条件。所以咱们这里定义的打碎玻璃的人来同等于这个打碎玻璃名单列表这种验证检测其实是按照每一个小朋友所说的话是不是真命题啊,现在的正确答案是小华踢碎了玻璃。如果 啊,假设你认为是小明的话,如果是小明的话,就不会满足题目中只有一个人说了真话的这个约束条件啊,现在假设是小明啊,小明他说是小智打碎的,那么他这句话的命题就是一个假命题,就是一个假命题啊。 第二个因为是小志说的是小刚打碎的,现在假设是小明打碎的,他说是小刚打碎的,所以他这个也是假命题,小刚说是小志在在撒谎,意思就不是小刚打碎的,所以小刚说小志在撒谎,意思就是不是小刚打碎的啊,这个小刚的就是真命题啦。 最后一个小华说他说不是我,因为现在假设的是小明,小华他说不是我,那他这个也是真命题,对不对? 所以如果假设这个小明是劈碎玻璃的,那么就不吻合这个题目的约束条件,只有一个人说的真话的这个约束条件。同样的道理,小智小刚都不吻合, 只有小华是踢碎玻璃的人才吻合这个题目,只有一个人说了真话,也就是这个小刚说的真话,所以最终答案就是小刚说的真话,踢碎玻璃的人是小华。现在来验证一下这个正确答案,这个小明说小智打碎玻璃,那么他明显这个就是假命题, 正确答案是小华打碎的,然后小志他说是小刚打碎的,那么他这个也是假命题,也不成立。然后小刚他说小志在撒谎,意思就是小刚他说他不承认是他打碎的,现在正确答案是小华打碎的,这就说明这个小刚说的是真话,确实不是他打碎的,是吧? 哎!最后这一个小华他说不是他,他说他不是他,那么他这个命题也是一个假命题, 就只有这种结果就可以看出,只有小刚说的是真话,只有一个人说的真话,这时候完全吻合这个题目给出的一个约束条件,只有一个人说真话, 所以最终的答案就是小华打碎的,只有小华打碎的这四个命题只有一个是真命题,这样讲就能理解了吧?这好理解了吧?对吧?

我现在真的有点疑惑,为什么现在还是有有很多拍准基础教程不会讲调试模式这个东西?我们这些哥哥来讲一下这个调试模式怎样用吧?我这个编辑器是拍叉,对吧?但目前基本上所有的编辑器它都会有调试模式这个东西,就是这个按钮, 包括无论是拍摄语言还是 c 语言或者是加法语言,他一般都会有调试这个东西。所有语语言一般都会有这个东西,这个东西特别重要。那比如说我在左边这个地方啊,他会有个一点击,他会有个红点点,那么如果在这个地方点一下这个红点点,然后进入这个调试模式的话, 他就会在运行到这个红点对应的这行代码的时候断住。断住是什么意思?暂停这个程序的运行程序目前就意思就上面的这个红点点上面的这些代码他已经运行完了,但不过呢这红点下面的这些代码呢,他还没有运行。 那么这个时候我们可以查看这个程序的一些状态。那比如说在这个县城和变量这里,这个地方,我们可以查看到程序当中的所有的变量它的一些值,比如我们这有个内变量,它的值是这个 a x, 我 不知道怎么读的,并且我们可以在这个地方右键右键会有一个对表达式求值, 那么我们点开会有这样的一个页面,在这个页面当中呢,我们可以做任意的一个事情,我们可以在这个地方输入一个表达式,进行一个求值,比如输一个内去获取内这个变量,他就会把这个变量的值返回给我,那我可以在这个地方做任意的一个事情,比如说我可以去调用他的一个什么例子方法,根据这个 i 进行一个切分,那我能够看到返回这个结果,并且他不会对我现在运行的这个程序有任何的影响。 那比如说,呃,他这里会有一个按钮,不过这个什么意思?继续往后面执行你的这个代码 继续往后面执行你的这个代码一行一行执行,一行一行往后面执行,那么这个步入呢?这个步入他也是一行一行往后面执行的意思,那这个步入和不过他会有小小的一个区别,那我找一个函数调用的地方给大家看他们的区别是什么。那比如说我让这个程序断在这个地方吧, 让他运行到这个地方进行一个暂停,那么现在我是在这里下了两个断点,对吧?下了两个断点,那么这个按钮,这个按钮他代表恢复程序,意思就是让程序继续运行,那么他就会运行到我的下一个断点所在的一个位置,那我再把上面这个断点取消, 那么这个时候我点击这个步入的话,你看这里会调用这个 gui 函数,对吧?我如果点击步入,那么他就会进入到这个 gui 函数当中,然后 return 这个东西,这个是步入,那我们再再来一次, 啊,我把那个断点再来一次,哎,这 我们再来一次。如果我们这个地方点击点击这个不过的话,那他就会跳过这个函数调用,就是不过和步入的一个区别,步入会进入到这个函数调用,不过会跳过这个函数调用, 那包括像有些时候我们可能会安装一些第三方模块,如果你使用一个第三方模块的一个方法,那么当你在使用这个方法的时候,如果你点击了步入,那么你可能会进入到这个第三方模块它内部的一些代码,那么你可能会很疑惑,这个代码你看不懂, 所以如果你呃人家那个第三方模块的代码,你不想要进入他,进入他内部的代码的话,你就要点击这个布过,然后我们继续看。呃,我在这个地方拓拓充一下吧,我增加了两句打印,然后在这个地方断住, 那么这个地方还有一个按钮叫做不出,不出是什么意思?如果在这个地方点击不出的话,那他就会立刻跳出这个函数,不出代表立刻跳出当前这个函数调用,代表立刻跳出当前这个函数调用, 那么还会有一个东西来我调试模式,这个东西它是什么?这个东西代表调用堆栈,代表当前的这个函数是被哪个地方调用的, 那么我们当前是位于这个归类函数里面。我我转假如想知道这个归类函数是哪个地方调用的,那么我们只需要回到它的上一步,我们就能够看到是这个地方对这个归类函数进行一个调用。那假设说我们多次去调用这个归类函数,传入不同的一些参数, 那我再进入这个调试模式,那么当我断在这里的时候,我有三个地方都调用了这个地方都调用了这个函数,我想知道是谁调用的,那么我只需要点击这里就可以了,我就能看到,哦,这次调用的这个参数是 bobo, 然后是这个地方调用的, 那我继续让他恢复程序继续运行,那我还是在这个地方回到上一步就能够看到这次是在这个地方调用的, 就是调用堆栈,用来描述你当前的这个函数是由谁进行调用的,当然这个调用堆栈它可以嵌到很多层。什么意思?我可以,当然可以再定一个函数,比如定一定一个 c 函数,那我进行一个打印,然后在这个堆函数里面调用一下这个 c 函数, 那我断在这个地方调用的这个 g 函数。 第二层是在 great 这个函数内部调用的 c 这个函数,那么最后就进入到我 c 这个函数,那么 c 这个函数是被哪个地方调用的?我们回到它上一步就能看到我们是在 great 这个函数内部调用的 c 函数。 那么归类函数又是在哪调用的呢?我们就能够看到在这个地方调用的,那么这个就是调速模式调用堆栈,用来描述当前这个函数被随调用,那么当然它还有一些功能,我再来看一下还有哪些功能没有讲。 呃,像这个的话,这个停止代表结束当前程序运行,对吧? 那还,嗯,它其实基本上就这些内容,就这些内容。那么为什么说这个东西特别重要呢? 因为有些时候你可能想要知道某在程序的运行当中想要知道某个变量值,你可能不停的在处理某一个变量,然后你想每次对这个变量进行一个处理之后,就打印它的处理结果,或者你想要知道你这个程序会怎样走, 会怎样运行,比如这里有个异符,异符条件语句,你想要知道你的程序会走哪个异符,你,你这个东西如果用调试模式来看的话,都会非常方便。这个调试模式啊,对于你找 bug 来说也是非常方便的。你,你修 bug 是 个很重要的东西。 嗯,如果你这个程序报错的话,你可以在你报错的那一行代码下一个断点,然后你看一下当前这个。呃,比如某个函数报错了,那你可以在这里下个断点,查看这些函数用到的这些变量 他的类型是不是正确的,这些变量有没有什么问题,他对于你修复这个错误来说是非非常。嗯,好用的,反正这个调试模式我是经常在用的,他是很有用的一个工具。

呃,之前有同学说,老师我这个不会安装对吧?拿到了这个软件也不会用,怎么办?好,那么今天就给大家讲一下关于怎么样去安装这个 python 软件以及使用。首先第一个啊,如果你还没有安装包的,那么你可以先访问这个官网站 三 w 点 python 零二 g, 这是它的官网。好吧,注意不要搞错了啊。 ok, 那 么这是官网。其次的话,想下载怎么下呢?点这个 download 啊,这里有。下载 好,进入了这个页面之后的话呢,你在这里可以看到它的一个版本号啊,目前的话呢,它有好几个版本,你比如像三点九啊,这里是目前官方最低的三点九,三点十,三点十一,三点十二,十三,十四,十五,对吧?啊,这里需要先说明。嗯, 像十五的话,目前是在正在内测,这个就不用看了。好吧,内测肯定不稳定,三点十四的话呢,是刚发布没多久, 那也不是特别的稳定。然后呢,十三,十三这个版本的话呢,跟十二有一个大的隔离,有很多语法的不兼容啊,不是语法,是一些功能可能会存在差别,所以这边的话给大家推荐,如果你安装的话,你可以下最新版试试。只是学基础语法的话可以下最新版, 但如果说你要学到一些,比如设计的很多的像爬虫之类的,那这里话推荐稳定的版本是三点十二啊,这是最稳定的好吧。 ok, 高于三点十二的话呢,那可能这个稳定性就不好说了,所以这个自己注意一下,然后最低的话,你的版本不要,现在不要下三点九了,因为这个已经过期了,好吧,他的开发时间是二零年发布的,到二五年已经结束了,好吧,所以这个已经相当于过期了,那么最低的话,你也要选择三点十, ok, 这个到二六年十月起码还有一年的时间,所以版本的选择自己根据情况选。好吧,我这个话呢,我就下载了,我就下了个新版,给大家演示一下吧。最新的版本,三零十四的版本, ok, 来双击安装包,请安装, 在这个话呢,会有个这样界面,这边我们先记得勾选项下面这两个选项,这两个记得都给它勾上啊。然后的话呢,这里有两个安装的位置选择,一个是安装在默认的 c 盘目录下,一个是自定义选择, 那 ok, 那 这个你自己看情况进行选。好吧,如果你不想按照默认 c 盘,那你就自定点这里,然后点 next, 然后在这里的话呢,选择你对应的路径即可。好吧,这个你自己看情况来。那我的话呢,我就直接装 c 盘了,因为我 c 盘空间够, 到时候找也好找一些。好,然后我直接点这个啊,这就选的是,然后等它读条结束就好了,这个非常简单,安装非常容易啊。 好的,那么这里提示已经成功的安装了,是吧?那点 close 关掉就行了,接下来我们验证一下,看看它到底有没有问题,是吧?打开你的 cmd 终端, 然后的话呢,在这个里边儿我们输入一个 python 命令,就是 python 啊,回科,那么它会有一个提示,比如说你当前使用的 python 是 三米十四点零的版本,是吧? ok, 然后会进入到这个有三个紫色箭头的这个终端,你可以在这里面写 python 代码了啊,不过一般都没人这么做啊,因为这个太麻烦了。 好吧,所以我们只是一个验证手段,如果输入 python 能够进入到这个页面,说明你的 python 已经安装完成。那,那我们退出来的话呢?输入 x, 然后这样的话就会退出来了,好吧。其次呢,第二个你还需要查一下是你的 python 到底安装在哪个位置,那么这里我们可以使用 where 命令。 where python 啊,就是问一下 python 在 哪,那么它的话呢,可以通过命令来查询到 python 的 安装位置,比如说这, 那这里就会有一个叫 python 点一个 c, 对 吧?就是他的执行文件。那路径就前面这部分来,你可以看一下啊,我们打开一个 文件夹,然后呢这里把刚刚那个路径复制一下,回车,他就能直接访问到当前这个 python 安装的位置,好吧,他给它装到这个路径下了。 ok, 然后下面这个就甭管,这是 windows 自带的,但是这个玩意用不了,所以可以忽略它,但它不存在,好吧,行。其次还有一个命令要查一下,就是 pad list 回车,这个命令是干嘛?这个是用来到后续我们可能需要安装第三方库,那么这个命令也必须要是要有的,这个命令的话呢,很重要。为什么?因为之前你在安装的时候,我不是说了,我说你要勾选,对吧?有两个选项,那个 pass 和那个呃,用户的那两个都要选上,如果你不选的话呢,到时你这个 pad 命令就用不了。 好吧,那这个一定要注意一下。 ok, 行,那这是关于它的一个 python 安装,大概是这样子,非常简单,验证完之后没问题,那就可以了。好吧, 当我们安装好 python 之后啊,就已经装好了,是吧,就能用了啊,那接下来我们就安装一个拍叉啊,这里先说明 python 是 用来干嘛的, python 是 用来运行代码的,你想运行代码就必须要有 python 这个解器才能运行。好吧,这是前提。 那能运行代码,那写代码怎么办呢?写代码你需要装另外一个软件叫拍叉这样一个工具,这是用来写代码,它是一个开发工具。 好吧, ok, 可以 用来编辑代码。那么这里的话呢,我们先进入它的官网啊,注意看这它的这个网址啊,是 http s 猫是一个三 w 点 jeffries 啊,注意这个域名啊,不要搞错了啊,注意看路径啊。行,然后进到这里来之后呢,需要说明这个版本啊,它目前的话呢,最新的是二五版, 推荐大家不要去下二五版。下什么呢?二四版的,这个二四版安装包的话呢,像这个二五版它是可以直接破解使用的啊,可以用专业版本,所以这边优先推荐大家使用二四版。好吧,那接下来给大家讲怎么安装吧,来安装包,在这双击安装。 ok, 这个到时候可以把安装包发给大家。好,首先选择是这里话呢,选择下一步, 这个是安装的路径啊,你看你自己是不是要用 c 盘,好吧,我的话 c 盘空间够,所以我就一般用默认 c 盘路径,如果你想改的话,你点这个浏览,你自己选一个文件夹进就可以了,但是强调一下,不要有中文,不要把它装到中文目录下,不要有中文名字,什么都不允许好吧,否则可能会有异常。 ok, 行,然后呢下一步这里的话呢,这两个选项记得把它勾上。呃,下面的话呢,看个人习惯,我的话一般不喜欢勾。 ok, 然后点下一步,然后这里的话呢就不用动,直接安装就好了,然后就等读条,等读条结束就可以了。 好的,那么这里的话就安装完毕了,我们点击完成即可。 ok, 那 这样就装好了,装好之后呢,我们接下来进行使用。呃,不过需要注意的是这个是个专业版,专业版的话呢,它是需要付费的,所以我们先点开看一下啊, 点开那这里它就提示那你是你可以试用三十天或者。呃,激活是吧?那没关系,关掉即可退出。接下来我们开始激活,来找到这个激活文件啊,到时也会发给大家来先解压一下。 在这里面的话呢,我们找到激活工具啊,往里边翻,找到一个叫拍叉激活的 vbs 文件,双击一下, 然后这里提示成功了,并且呢现在已经激活到了二零九九年,那就是二零九九年之内都可以用。好吧, 大概还有六七十年吧,应该够用了。 ok, 行,那么激活完之后再次启动这个排查,那么他就不会有那个激活的工具了,没有那个警告提示了是吧?接下来这个就可以了。好,下一步的话呢,来我们选择新建一个项目,点击新建, 在这个话呢,你可以自己给项目指定一个名字,然后,呃,这个是他的一个按项目的创建位置。好吧,上面项目的名称啊,我这个就不改了。下面这个项目的位置的话呢,一般建议大家改一下,因为他默认装 c 盘的用户目录下,这个倒是不好找,所以比如举个例子,像我的话呢,我一般在 d 盘会创建一个 project 文件 啊,用来专门存代码的好吧, project, 所以 的话我就把它放到这里面,这样 project, 好吧,所以我的代码就放在第一盘 project 文档里边,然后呢,项目名字叫 python project, ok, 然后现在这里这里不用动,它会默认读取你当前的解析器,然后选择 create, 就 创建的意思就可以了,点击 create 好, 那么这个它就开始创建了。创建的时候我们需要稍等一小会儿啊,它要在下面这里进行呢,就进读条,这个等它读条结束啊, ok, 因为第一次创建的话,它会比较慢,所以需要等一下。 好,这里提示,是否要发送消息,不发送啊? no, thanks, 好, 呃,完成了是吧? ok, 这里会有一个虚拟的解日期,这个我们先不管它,然后的话呢,这里这个先收起来, 左边的话 lucky 会来点呃,全屏吧。在这的话,我们先新建一个代码文件,选择这个项目录音,然后选择 new, 选择 python file 啊,就有 python 文件啊,起个名字,比如叫,呃, hello, 可是那么这样就新建好代码文件了,接下来我们来输一个啊,输出语句 print hello word 是 吧?啊,就是就变成了第一个代码 hello word 来,然后呢,点击鼠标右键,这里有一个 run hello 运行, 那这样就运行完毕了,好吧,运行完成, ok, 搞定。接下来呢需要注意几个点,就什么?第一个关于这个拍叉的使用啊,它默认是全英文的页面,所以的话呢,你可能用的不习惯。其次呢,这个字比较小,所以我们都需要调整一下。首先先调这个文字吧,这个文字太小的话呢,看着不舒服,来,在这里我们先选择 settings, 然后在 settings 里面我们选这个配置,然后里边的话呢,这边我们选择在这儿勾选上这里 啊,然后呢把字体它的 size 是 十二,对吧?我们调大一点,调成嗯,十八或者十六的样子,你自己看一下,你自己试一下,选十六,选 play 应用一下 啊,这个字可能有个大一点的,是吧,看着舒服一点, ok, 来确认吧。好,第一个完成这个界面的话呢,文字就大一些了,是吧?没那么小了。其次呢就是代码很小,这个字也比较小,那怎么调呢?也可以设置一下,找到 sentence。 然后呢在这边我们找到 edit 啊,就是编辑这块,然后找到放置,放置就大小啊, 这个字体大小里面的话呢,我们设置下 size 十三,对吧,你可以把它调大点,比如说改成十八或者改成二十, ok, 应用一下看一下。那这个字稍微大一点了,是不是我们再改一下,改大一点吧,改成二十吧,看一下啊, touch 应用一下,确定,那这回差不多了,够大了,所以你看这样的话呢,看的更舒服一点, ok, 其次第二个就是关于英文的问题,老师,我英语比较差,看不懂这个东西,是吧?怎么办?没关系,来,我们选择 sentence 里边,找到这个插件选项这里啊, 然后呢,这里边我们输入一个关键词叫 chinese e s e。 啊,中文的意思嘛?选择这个 chinese 的 这个包。 好吧,这是一个中文语言包,它是官方自带的这工具,接下来我们点 excel 安装安装这个中文语言包好,然后重启一下,确定 ok, 那 么等一小会儿 好,可以看到重启完成了,接下来你再打开看,哎,你就发现它就是全中文的这个音源了,是吧?那相对来说可能学习起来就更方便一些,不至于说完全看不懂 对不对? ok, 那 么最后的话点运行就可以了啊,这就是关于拍叉的一个安装和使用啊,就给大家讲这个吧。

大家好,欢迎来到今天的拍声入门课程。今天我们要学习一个非常强大的概念模块,你可以把它想象成一种魔法,能让我们写的代码瞬间变得整洁有序,而且威力倍增。那么到底什么是模块呢? 我们来看个简单的比喻,想象一个工具箱,里面有锤子螺丝刀,当你需要干活的时候,是不是直接拿出来用?你不会每次都自己造一个锤子对吧?模块就是这样一个代码工具箱。再想想乐高积木, 你可以把一个复杂的模型拆分成小部件,模块就像是这些独立的乐高主件。使用模块有三大核心的好处。第一,代码附用 你写了一个很棒的函数,放在模块里以后任何程序都可以直接调用,节省大量时间。第二,代码组织一个大项目的代码可能有成千上万行,模块可以帮我们把代码分门别类,结构清晰。 第三,避免命名冲突。你和同学写的同名函数,只要在不同的模块里,就不会互相干扰。了解了模块的好处,我们来看看如何使用它。在 python 中,使用模块非常简单, 只需要一个关键词, import。 我 们以拍粉自带的 math 模块为例,我们只需要写一行 import math, 就 相当于把这个数学工具箱拿过来了。 import 语句还有一些更灵活的用法,第一种就是我们刚才学的 import math。 第二种,如果你只需要模块里的某一个功能,可以写 from math input s q r t, 这样使用时就不用再加 math 了。第三种,有时候模块名很长,我们可以给它起个外号,也就是别名,比如 import math s m, 之后使用 m s q r t 十六就可以了。理论说完了,我们来亲手创建一个自己的模块吧。第一步, 我们创建一个文件,命名为 my 码九 p, 在 里面定义一些函数和变量。第二步,在同一个文件夹里, 我们再创建一个 mainpy 文件,用 import my module 导入我们写的模块。然后我们就可以像使用 map 模块一样调用我们自己写的函数了。拍手自带了一个非常庞大的武器库,叫做标准库,里面有各种各样的模块,可以帮我们解决很多问题。 我们来快速看几个最常用的 mass 模块做数学计算。 random 模块生成随机数, day 模块处理时间, os 模块负责系统交互。好了,我们来快速回顾一下今天学到的核心知识点。首先,什么是模块? 简单说,一个 py 文件就是一个模块,为什么要用模块?核心价值在于代码,附用代码组织和避免冲突。 如何使用模块主要通过 import 语句。我们学了三种核心导入方式,理论学习之后一定要动手实践才能真正掌握。这里给大家留两个简单的练习题, 第一个练习是让你创建一个计算长方形面积的模块并使用它。第二个练习是让你使用 random 模块生成一个一到一百之间的随机数。还在找学习资料和练手项目,我已经为大家整理好了,全部都可以分享给大家使用。

上一个视频我们初步了解了 python 编程面向对象,今天我们接着来讲定义类, 开始吧。好,接下来我们做的事情就是去验证这个结果。这个类现在创建出来了,但是我们还没有对象啊,我们说这个对象是通过这个类创建而来的, 那对象怎么创建呢?你去看像运行,你是没有任何的效果的。还没用,因为我指定一个类,但这个类呢?我还没有用到它,是不是我也不知道怎么用, 怎么用呢?就得引出了这个对象了,去创建对象, 对象你是需要创建出来的。嗯,怎么创建?它分为类来创建,我们可以叫做创建对象或者实体对象语法对象名等于类名,加这个小括号,这样创建对象, 那我们拿过来 那个对象名其实就是属于相当于一个变量名了,那你自己来取,是吧?那我就随便取一个。嗯,我写一个海尔等于类名 versus 加一个小花, 类名就是我们刚刚定的这个这个类名 ok, 哎,这个小花我没加,再加一下。 好,现在定好这个对象了,是不是这个对象名就叫做,就叫做海尔?我们打一下打印对象, 打开这里打出来是一个内存地址嘛?是吧?它告诉你这个对象在哪个位置,这里在这一串。 好,这个地方默认默认打印,默认打印出来的是对象它存在的内存地址。 那你思考一下,你们想一下,如果说我打印某一个对象的时候,能够把这个对象的内存地址给打印出来,那说明这个对象它是存在还是不存在的, 那肯定是存在的嘛?或者说创建成功了,是吧?那么这一步这个对象能够被创建出去,创建出来之后 我们就能够对对象去操作类里面的功能了。怎么操作呢?对象操作类中的功能, 因为我们这个对象啊,是通过这个类去创建出来的,那说明这个对象它就拥有了这个类里面所有的功能了,是吧?怎么调呢?是通过,是通过这个点一个点 去表示,你要选择表示,你要选择选择是属性还是方法或者方法,咱们就要用类名的属性 print, print 类名啊, print 啊,对象名,还有点上带什么?属性名? black name, 我们调用一下这个属性,它是一个特征,特征是我想的效果,是吧?我们答一下就会什么?就会洗衣机了,在这里。 好,你看类里面这个函数呢?函数要调用吗?肯定要调用的,你不调用它不会执行,发现没有?那现在我调用类里面这个属性了,这个属性它就能够给它获取到了,在这个地方, 那答案出来了,这什么?这个就是通过咱们类名 hire, 点上属性名去调用类名的属性,那属性既然能够调用到,那它方法怎么调到呢?一样可以的。 嗯,对象名 hire, hire, 点上方法名 get info, 还要 print 吗?不用了吧?为什么呢?我们定义的时候,那你定义的时候直接是 print 了,没有 return 返回吗?走。哎,可以吧,也可以调用的, 是吧?也知心了,那就是说咱们通过这个类创建出来的这个对象,它既能够调用到类里面的属性,也能够调用到类里的方法,在这里一样的。那还有个问题啊,我们刚才说刚才讲的那个效果对这个效果它有什么作用? 我们给答案一下。答案一下这个效果在这里, 在哪打印呢?我在里面打印嘛?我在里面打印一下 print 校服, 你看它是一个参数,那这个参数是什么?我看了,在 get info 里面去输出这个校服参数,如果说我调用这个函数的时候,它既然能够输出我会洗衣服这句话,那这个参数能输出吗?一样可以的, 我们看把这里给它注掉。 哎,大家看注意,我刚拿出来打印出来的第一个是这个内存地址在这里, 第二个呢是洗衣机,那这个洗衣机我刚才没打印,第二个是洗衣机找到第三个是我会洗衣服,但是要多出一个正确例子,发现没有?嗯,那说明他打印的这个多出这个是什么? 他就是个校服了,就他原来不打印校服的时候,他只有打印三行,那像我多打印个校服之后多出这个内存地址,那说明什么呢?说明这个校服他打印出来就是一个内存地址, 而且你对比一下这个校服的对写地址和我们对象的地址,它其实是一样的,这个值七 a 九零,七 a 九零是一样的,那就是说你这个对象,你这个对象和这个校服它其实代表的都是,就是同一个,看准没 是同个东西,那这个效符就代表效符,它就是就是表示你调用当前这个方法的对象, 你现在用哪个对象来调用这个函数?是用海尔来调用,是吧?那指的就是这个海尔了,清楚吗?在这里呢,我们不叫它函数,叫它方法效符就是表示调用当前这个方法的对象, 你谁来调用我?哪个对象调用我?我指的是哪个对象?你用海尔这个对象来调用我,那么这个校服指的是这个海尔啊,所以打印这个校服,打印海尔的时候,他都是打印同一个内存地址,因为他是同个人,理解吧, 这是哪个对象去调用咱们 get input 这个方法,那么这个效果指的是哪一个对象了?嗯,好,我们刚刚发现了,你通过这个类能够创出来一个对象, 你的目的呢?就是通过这个对象去访问类目的功能嘛,是吧,那这有什么意呢?其实我们的目的就是把一些具体实现的功能 全部都封装在内里面。那你后续想到里面功能了,你只需要创建一个对象就可以了,去操作里面功能就可以了,是吧?他们洗衣机一样,什么写代码,其实就是去创建洗衣机, 给这个洗衣机设计些功能,设置好之后把它创建出来,创建出来这个人呢?这个人就他不需要去管理这个功能怎么实现的,他就拿来用就行了。 ok, 然后这个类和对象它有个特点,咱们现在创建的一个对象吧,那你觉得可以生成两个吗?好,给它注掉。 咱们通过这个类啊去创建多个对象。嗯啊, class 类名还是 word 括号?小括号。 那这点咱们不定义属性了,咱们直接来个定义方法, d f 方法名 wash。 那 它又给我加了个校服了,它自带的,我们打印 print 洗衣服。 注意,看了这里的话,咱们就可以去创建对象了。 嗯,对象名 hello, hello 一 等于等于这个 word 内面加小框, 嗯,咱们打一下 print print hello 一, 大家看这个对象的内存地址就打出来了,那说明这个对象已经创建成功了嘛?创建成功之后我们再再来写一个, 出现两个,来个还有二,还有二等于 washer, 夸加夸还在打印 print, 还有二, 有吗?是不可以的呀,那你发现这两个内存地址它是不是一样的?我们看呢,说明它是两个不同的对象嘛? 那就说我能够通过一个类,通过同一种类型的功能去创造两个不一样的具体的对象,记住吧,所以说类里面你是可以创建多个对象的,并且每一个对象它都可以用来去操作这个类型的功能,是吧? 这个对象都有这个功能,但他们呢?却是不同的对象。好了, 那这个地方我们关于定义类和创建对象给大家讲这个方法,两个东西怎么样?定一个类怎么样?通过类创建对象,然后通过对象可以访问类里面的功能。首先一个方法啊。
![10.3 函数 | 从零开始彻底教会你黑客技术 全套保姆级详细教程,[打卡]双手奉上#Python #python编程 #python教学 #编程](https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/oQIQvNBIwj3iUOl0PT4AhAahi17SZHAlBIRCA~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2095974000&x-signature=Trr%2BEtFMN%2B%2BnpezhrGcIeDtk%2FdE%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202606050759279DF8D1B84570EE25A2B2)
一口气带你学完 python 所有重难点警告!本视频耗时六个月,制作总时长三千六百分钟,带你全方位了解 python, 学习 python, 专门为小白量身打造入门到进阶的 python 全套教程。由于视频太长,混合机分为十二期发布。为了打磨这套 python 课程,我翻遍了国内大量的教学资料,发现普遍存在几个通病, 内容七拼八凑,讲的拖拖拉拉,实战少的可怜。你之前看过的那些拍层视频,大多都是鱼龙混杂,滥竽充数,很少能带着你一步一步完整走下来。所以我决定甩掉所有花里胡哨的东西,用最朴实最直接的方式把知识讲清楚,让你学的顺手,用的灵活。 最后送个小福利,我把配套的学习包全整理好了,需要的小伙伴留打卡学习。相信我,这套 python 课程绝对算得上是全网最全最好懂的小白入门课,觉得有用的话,给 up 点个赞,让更多想学 python 的 朋友也能看到。 函数这个东西,你不要把它想的太难,你只要把这两个功能给它用会就好了,同学们知道吧, 你不要以为对吧,你不要以为这两个字就把你吓到了啊!很多同学一听这两个字就把他吓到了,他以为在这里学数学,他这个函数是个非常简单的东西,他就是一个行李箱,你可以往你,你可以通过 return 从行李箱里面拿东西, 你也可以通过行餐和食餐往行李箱里面放东西啊!对,能够听明白的扣个六啊!朋友们能不能明白, 一个是从行李箱里面拿东西,另一个呢,就是通过行餐和食餐这个概念往行李箱里面放东西啊。对,我我我放榴莲香蕉西红柿,放到了这个 x y z 里面,你要证明你就打印看一下,他确实放进来了, 就这么两个知识点,他不是你,你想的那么难是吧?啊,对,这几个就是把这两个功能给他搞会就好了。 嗯,知识点我跟你们讲啊,越到后面越简单。那有些同学觉得,哎呀,红哥学东西是不是越学到后面越难呀?不是,越学到后面他反而就越简单。真的 啊,因为你会发现学编程他学的就是个套路,就是第一步干嘛?第二步干嘛?第三步干嘛?最后得出一个结论 就可以了呀。啊?这就是学编程,知道吧?啊?第一步干嘛?第二步干嘛?第三步干嘛得出结论。 你学其他东西也是一样的啊,对吧?你学 ai 也是一样的,第一步干嘛?第二步干嘛?第三步干嘛得出结论?你学 java 也是一样的,第一步干嘛?第二步干嘛?第三步干嘛得出结论? 所有语言都是一种套路,就跟你学建筑一样是吧?啊?第一步啊,倒水泥对吧? 第二步,砌砖啊,就砌墙嘛,砌墙。第三步啊,对吧?就是就是,钢筋,水泥,我不太懂啊,钢筋对吧?水泥,钢筋啊,水泥, 最后房子就出来了。对,能够明白这个逻辑的,扣个一,都这样的,学什么都这样的,第一步干嘛?第二步干嘛?第三步干嘛?最后房子就出来了。 真的,你学编程也是一样,第一步干嘛?第二步干嘛?第三步干嘛?结果就出来了。我们掌握的是这个流程,他这个流程他不需要你,他不需要你太会太会有思维,他就是一套逻辑啊, 你开车也是一样的嘛,怎么开车怎么开车。第一步啊,点火,第二步,拉手刹啊,第二步,拉拉拉手刹 是吧?第三步啊,进 p 档,第四步踩油门, 第五步就是开起来了,没毛病吧,都一样的,同学们啊,不要把他想想成一个很难的东西啊, 对吧,每次就是我,我一跟同学聊天就是,哎呀,红哥,我我我我我我对吧?我我我一四十岁了,我怕我学不会啊。你知道咱们班年纪最大的有六十多岁。 真的啊,咱们上一个班有一个七十多岁的啊。真的啊,到最后他还是学会了。他真真真跟年龄没关系啊,他这个学东西就真跟年龄没关系啊, 只要你跟着这个步骤来,他这个结果就出来了。 只是很多人为什么他他学不会,是因为有一些老师他不讲步骤, 他只讲概念,大学老师就这样子。我不知道你们大学老师是不是啊,同学们啊,咱们班上有不少大学生,是不是这样,那大学老师他就不跟你讲步骤啊,理论,纯理论啊,对不对? 他也不管你会不会啊,反正那理论讲的一套一套的,你也不,你也不一定听得懂。 就是,所以说我你叫我一般都是步骤,第一步干嘛,第二步干嘛,第三步干嘛,最后就结果出来了,好,准备好的,扣个一开始了啊,学习学的是方式和方法, 你们你们在这里学到的东西都是方式和方法。哎,以后你们出去了,那那那就是按照这套方式和方法来,对不对?不管你是做什么行业,你做律师也好,做金融也好,做老师也好,那都是第一步干嘛?第二步干嘛?第三步干嘛?第四步干嘛啊? 最后就是一个好的结果。好,开始了啊,我们上半节课呢,讲了创建函数,讲了调用函数,调用函数的时候呢,可以往函数里面传数据,那这个数据呢?就需要通过三个形才来接收。 那有时候我们会遇到这样的一个情况呢,那比如说,比如说这里传了一百个数据呢? 这里要用多少个形态来接收?来回答我来看着我的眼睛 look at me, 又用几个形态来接收?你这里传了一百个数据,那你这个地方呢?要通过一百个形态来接收, 又是三个,我说了上下要,对啊,你上面一百,你下面传了一百个数据,上面就用一百个形态来接收啊。 但是大家会,会不会发现有点麻烦? 大家发现有没有?就是大家有没有发现有点麻烦? 有没有发现?你传一百个数据还好说,你要写一百个行餐,你编都要编,编编好久是吧?你这个这个行餐的名字你都要写好久啊?有点麻烦。所以说呢, 我们如何解决这个问题,是吧?当你传了很多个数据的时候,如何一次性接收? 可以通过一个固定的语法啊,来实现。这个固定的语法呢?也就是星号再写一个形参这样的来接收。好吧? 比如说我这里传了三个数据,那我这个地方呢,就通过星号 x 来接收 啊。当然呢,你通过信号 y 来接收也可以,信号 z 来接收也可以啊,反正你前面有一个信号,对吧?比如说我通过信号 x 来接收。这个信号是什么意思呢?信号是指所有, 就是接收所有的数据啊。信号就是接收所有的数据全部放到这个。什么全部放到这个 x 里面 啊?这就是这个代码的意思啊,对吧?你传了三个数据,那我通过新号接收全部的数据,然后呢?放到这个 x 里面,那我怎么证明 x 里面确实接收到了全部的数据?怎么证明?来回答我怎么证明 你这里传了三个数据?我通过信号 x 接收了全部的,我怎么证明 x 里面确实接收到了全部数据,怎么证明?打赢他 打赢他啊,干就完事,打赢他就完事啊。好,我们看一下啊,拿到了没?拿到了, 他接收到了全部数据啊? x 接收到了全部的数据,请问这个数据是什么类型?来回答我,圆组对吧?是个圆组的类型。 那要是宏哥我只要某一个怎么办?我只要榴莲怎么办?那就是 x 的 中空号零,这是榴莲 通过位置的取值就好了啊。 x, x 中号零就是榴莲, x 中号一就是香蕉通过位置取值一是位置啊, x 的 中号二就是西红柿, 就是如何拿到对应的数据? 就通过 x 的 中国号位置位置 来取就好了。那如何拿到全部的数据呢? 对吧?你要拿一个数据就是 x 中号二, x 中号一, x 中号零,拿到这三个其中某一个数据啊,我拿全部的呢?那就直接写 x 嘛,这不就简单 好听懂的扣个一对吧?你拿全部数据写 x, 那 其中的某一个就是 x 的 位置取就好了, x 的 中号位置取就好了。对, 一次一个是这样子写,就是一次拿一个这样子写,一次拿全部, so easy, ok, 这个就是咱们这个函数的两个功能啊,就讲完了。那我们呢,来做两个案例啊,做一个案例,做一个案例啊, 做一个计算机的案例啊,为什么我要讲这个案例呢?因为这个案例啊,经常 比较经典,比较经典,百用,百用百好用啊,就每次用都好用啊。好,我们做个案例来模拟计算机,模拟计算机,但是他不能真正做到计算机的功能,只能说模拟啊, 通过模拟计算机来复习今天学的函数知识点 通过模拟计算机啊,复习今天函数学的这个知识点啊,这是个经典案例。好,首先问你们第一个问题,计算机你一生 会用几次来回答我,你这一辈子计算器你一般用几次?这个啊, 就是这个玩意,你这辈子一般用几次来扣在公屏上,比如说红根是吧?我是做生意的,我天天要算红根 啊。我,我就是一个普通工作人员,每个月十五号发工资就会拿来用用啊。红哥是吧?我还在上学对吧?我老爸每个月给我一千五百块钱生活费,每次到了月底快没钱的时候,我就会拿这个计算机用用。 哎,红哥,我有一个女朋友是吧?每次跟他出去玩的时候啊,对吧,我都会算一算我为我女朋友花了多少钱啊,就会用一下这个计算器啊,其实人的一生呢,他会用 n 次,就是你数不清, 经常用吗?啊?既然你经常要用啊,那就可以写成一个函数啊,就跟那个行李箱一样嘛。 你去新加坡要带,你去马来西亚要带是吧?你去美国要带啊,那所以说你可以,呃,对吧,你就可以将那个行李箱写成一个函数。那你这个也是一样的呀,你这个计算机你这辈子都要用,你也可以写成一个函数啊。好,我们来写一下咱们的第一代 计算器啊。计算器?好,首先呢,我们先来创建一个函数啊,创建一个函数啊, d f 就是 创建的意思,这个名字呢叫第一代计算器啊。好 啊,跟大家讲讲,讲清楚啊,这个名字尽量不要用中文。那你说红哥你为什么要用中文?因为你们好理解啊,听懂的请扣六。对,你不要学我的呀,我是为了授课,为了你好懂,你知道他是个啥东西是吧? 你写的时候你要写英文的了,说,你不要跟我一样是吧?啊,我,我只是为了,为了,为了这个,为了这个,你们好懂,好,这是咱们的第一代计算器啊,咱们的第一代计算器要实现一个什么功能呢? 咱们的第一代计算器啊,要实现一个什么要实现一个什么呢?实现一个加法功能。嗯,好, 我在这个里面写啊,比如说十加二十啊,这就是一个加法功能,实现了一个加法功能。嗯,好, 那请问为什么我看不到这个计算器里面的一个结果来回答我,我在这个计算器里面实现了一个功能,就是十加二十一个加法功能。为什么看不到这个结果来回答我? 因为你没有调用这个函数啊,比如说你,你处理好了这个函数还不行,你想看到这个里面的结果,你得第二步来调用函数。 怎么调用函数名后面加一个括号,这就是调用函数啊,你自然就能够看到里面的结果了。 那你说红哥我不调用行不行?不调用你就看不到里面的结果呀?所以说你必须要调用这个函数,你才能够执行这个里面代码,才能够看到结果啊, 为什么调用函数才能够看到里面这个代码的结果呢?这是规定啊。嗯,好,这是咱们的第一个计算器啊, 大家认为这个计算器还满意吗?当然不满意,一个计算器才有一个加法功能。好,咱们就开始升级啊,升级成为什么呢?升级成为第二代计算器啊,第二代 好改个名字啊,第二代计算器啊,第二代计算器,我们要实现一个什么功能呢?就是说我不希望这个结果是一个死的, 我希望呢啊,能够自己传入要计算的结果 啊,我不想算十加二十,我想算三十加四十,我想算五十加六十,我想算七十加八十啊,这个值我想灵活一些,那你就自己传入计算的结果, 这个就用到了什么呢?这个就用到了函数啊,这个就用的什么?就用到函数的传餐啊,如果你要实现这个效果,你要啊,使用函数的什么函数的传餐啊?函数的传餐。 好比如说我想算五十加八十,那你在调用函数的时候就可以传一个五十和八十, 那这个函数这里呢?就会用 x 和这个什么和这个 y 来接收,好吧。 嗯,再注意听啊,你在调用函数的时候传了一个五十和八十,我们就会用 x 和 y 来接收。五十被存到了 x 里面,八十被存到了 y 里面。 那你这里就不用写死了呀,你就让 x 加 y 不 就行了吗?你看这样不就灵活了吗?对不对啊?我们在调用函数的时候,传了一个五十和八十,那 x 就是 五十, y 就是 八十, 那 x 加 y, 那 就是五十加八十。看的懂的扣个一看不看的懂。你在对应函数的时候,你传了一个五十,传了一个八十,那 x 就是 五十, y 就是 八十。因为你先传五十,后传八十嘛,那所以说五十在前面,八十在后面啊, x 加 y 就是 五十加八十,那结果就是一百三 啊,你总不可能算一次吧?要不要用第二次计算机?当然要用啊,比如说我过了几天,对吧?又要用一次,计算器 啊,又要用一次啊,计算器啊,计算器,那我就再次调用函数,对吧?那函数名后面加一个括号啊, 我这次要算什么呢?我这次要算这个这个啊,这个这个。六十加六十加九十,那你就传个六十,再传个九十,那 x 呢?就是九十,那 x 加 y, 那 就是六十加九十啊,六十加九十,那结果就是一百五。 第一次是吗?第一次是一百三吗?第一次是一百三,是吧?因为你第一次传的是五十和八十,那结果就是一百三啊,这个结果是一百三, 那你第二次调用计算器呢?你传的是个六十和九十啊,对吧? x 是 六十, y 是 九十吗?那六十加九十,那就是一百五啊,一百五 是吧?我们看一下结果对不对?一百三和一百五,一百三和一百五,好听懂的扣个六,对吧?就是核心的逻辑,只要写一遍, 你在调用函数的时候传入不同的数据啊,他最终会得到不同的结果。就是这么个意思,能理解了吧?是吧?就是核心的逻辑,只要写一次,你在调用函数的时候传入不同的数据啊,传入不同的数据, 他就会得到什么不同的结果。不同。 那比如说红哥,哎呀,我第四次啊,我第三次啊,我又过了一年,是吧?我又要用计算器,怎么办? 那你就再来创建一个函数把,你再来调用一下这个函数啊,比如说呢,我要算一千加五百,那就传个一千,传个五百,那这个 x 呢?就是一千 y 呢?就是五百。 x 加 y, 那 就是一千加五百啊,那结果呢?就是一千五,那你就是一千五嘛。 好啊,因为你第三次调用计算器的时候,你传了一百和哦,你传了一个一千和一个五百,那 x 就是 一千, y 就是 五百, x 加 y, 那 就是一千加五百,就等于一千五百啊, 嗯,对吧,所以说每次调用函数传入不同的数据,最终会得到不同的结果啊。好,这就是咱们的第二代计算器,满意吗?还,还可以吧。好,原来是红哥,咱们这个第二代计算器呢,他只能做加法。 好,我们来更新第三代计算器啊,这个时候我就不想,我就不想写加法了啦,那我想写什么呢?我想在这个基础上增加加减、乘除 这四个啊,计算方式。那怎么做呢?对吧?我想在这个加法的基础上给计算机呢多增加三个功能啊,就是减乘除啊这三个方法。把这三个功能怎么做?很简单, 你可以再传第三个数据你可以再传第三个数据啊,这第三个数据怎么传呢?你可以传加号、减号、乘号、除号,比如说我们传个加号, 你这里传三个数据,那这里要不要用三个形才能接收?要不要?当然要。好,那我就用三个形才能接收。 五十传到 x, 八十传到 y 这个加号,这个符号传到了 z, 那 为什么我要传第三个符号呢?因为我想拿第三个符号做文章, 我想拿第三个这个符号来判断出我要做什么计算啊?就是拿第三个这个数据做文章啊,好,怎么写呢?我教大家,我们可以做判断, 这第三个符号是不是传到了 z 里面?是的,扣个一啊,五十传到了 x, 试一下啊,五十啊,这个五十传到了 x, 八十传到了 y, 八十传到了 y, 那这个加号传到了 z 啊,加号传到了这个 z 这里来了,我们可以拿这个 z 来做文章啊,拿这个 z, 对 吧?我拿这个 z 来做什么来做判断? 看我怎么写啊。衣服是如果的意思,如果这个 z 真的 传的是一个加号, 那我们就怎么办呢?我们就让 x 加 y, 就 让五十加八十,对吧?就让第一个值加第二个值呢?就让这两个值相加啊,就让 x 加 y, 我 写一下啊,如果 z, 也就是如果说你传的真的是个加号啊,如果第三个之如果这个 d 传的是一个加号 啊,那我就是什么呢?那我就让 x 加 y, 那 我就让 x 加 y 做一个加法啊,好,再写一个音再看。 之前没有讲过两个例,衣服可以连起来用,现在我就讲了不一样的方式啊,对吧?我们在做这个实战力的时候,对吧?之前没有讲过衣服可以连起来用,但现在我教大家啊,衣服可以再写一次, 比如说这个 z 等于这个减号的话啊,那就如果说你这个符号,对吧?传到 z 里面来,他是个减号的话,那我们就怎么办呢?我们就让第一个值减去第二个值,能明白我的意思吗? 再来做个判断啊,如果说你传过来的符号是一个乘号的话,那就是你这传过来这个符号啊,如果说是一个乘号的话,那我们就让第一个值乘以第二个值。 如果说你传过来的这个符号是个除号的话,那么我就让第一个值除以第二个值, 这个代码读的通吗?同学们,我写三个 e, 我 写四个 e 符,这样的代码能读的通吗?读的通我带你们读一遍啊,那就以第三个指,也就是这个 z 来做文章啊,对吧?如果这个 z 传的是个加号,我就让 x 加 y, 如果这个 z 传的是个减号,我就让 x 减 y, 对吧?如果这个 z 传的是乘号,传的是个新号啊,我就让 x 乘以 y, 因为五十是 x 嘛,八十是 y 嘛, 这个符号是这个 z 嘛?如果 z 是 个乘号,我就让五十乘以八十。如果 这个 z 啊,就是这个 z 啊,就这个 z 啊,这个 z, 对 吧?传的是一个除号,我就让第一个值除以第二个值。 我就问读不读的通,读的通的扣个六,我这四个,我这个代码读下来能不能读的通?读的通,那这样写就没毛病。我之前就跟你们讲过,写代码 写逻辑就跟说话一样,如果你读的通, 那就证明可以这么写。好吧,对,他读的通啊,那这样写就没毛病啊,是不是? 好,所以说宏哥你之前不教的是一幅 else, 一 幅啊? else, 一 幅和 else 吗?为什么都是一幅呢?现在好,我想通过这个案例告诉大家可以这么写 我想通过这个案例告诉大家可以这么写,这是一个新的写法,你也可以用以前的那种老套路写,也可以, 对吧?就是不同的写法,我会在不同的案例里面告诉大家,对不对?就是我们没学,那现在不就学了吗? 之前没教,现在不就教了吗?之前不了解,现在不就知道了吗?人那不就是在学习中成长吗?朋友们,那理解的扣个一啊,没教不代表你不需要, 因为需要,所以我教了,当然你之前的那种写法也可以啊,但是我是告诉大家一幅一幅可以这么写的,一幅一幅一幅,这写没毛病,是吧?你也学会了这个套路,以后你就记住了,大家可以这么玩,是吧? 好,大家看啊,大家看。我们在使用计算器的时候,我传了一个五十到 x 里面,传了一个八十到 y 里面,传了一个符号到 z 里面,那这个时候呢, 就会进入第一个判断,他看你这个 z 里面传的是不是加号呀?真的是个加号,因为我传的就是个加号嘛,对吧? 加号等于加号,那他就会让第一个值加上第二个值,后面就不会再问了啊,这就是几股一百三,五十加八十,确实是一百三呢。加法, 那比如说我传的是个减法呢?好,他首先啊,这个 d, 比如说他传的是个减法, 对吧?他首先会来这个加号,这里问,减号等不等于加号呀?不等于减号等于等不等于减号呀?等于。那就直接会让什么让五十减八十,五十减八十,那结果就是负三十。那比如说我传的是一个乘号呢? 好,现在这个自己传的是个乘号啊这个自己传的是个乘号,是吧?现在自己传的是个乘号啊。他先来问,乘号等不等于加号呀?不等于。乘号等不等于减号呀?不等于。乘号等不等于乘号呀?等于。 那就让五十乘以八十,那就让 x 乘以 y 嘛。那就五十乘以八十嘛。那结果就是四千。那比如说我传的是一个除号呢, 对吧?这个字印拿到的是个除号呢?好,比如说你拿到的是个除号。他先来异父这里问,他说除号等不等于加号呀?不等于。 除号等不等于减号呀?不等于。除号等不等于乘号呀?不等于。除号等不等于除号呀?等于。那就让五十除以八十,那结果就是零点六二五。

逼自己十天吃透拍损核心,从入门到上手你会发现自己潜力无限。全程干货无任何废话!六百分钟完整版教程建议收藏,反复看停别划走!这是耗时六个月六百分钟打磨的拍损教程,带你从零基础一路刷到进阶,这是抖音少有的无废话良心系统课, 刷到就是赚到,别再乱找课了。最后给大家安排一波福利,拍损环境搭建资料,零基础学习计划表 还有海量课件书籍素材全都有,想要的同学全部免费打包发给你!这套专为小白打造的拍摄系统课,简单好懂,内容超全,跟着学就能轻松入门。 nice 好, 那我们在了解完我们的一些集合的基础知识之后呢,我往下开始学来了解下我们的什么。呃,想问集合的一些预算 这个运算这个运算啊,它通过什么来运算呢?首先它是我们的一个并集啊,通过什么?通过这个圆棍啊进行运算,并集之后呢是我们的交集 交集 交替使用这个并且符号啊进行计算。最后是我们的差级,差级怎么说?用这个减号啊进行计算好,来一个个往下看吧。最开始是我们的并级啊,这个棍 ok 过后呢,他是要干嘛?他是来合并两个,哎,合并两个集合的为一元素就重复的就是给去掉嘛,对不对?那运算符呢?哎,运算符?我这根棍 啊,不是斜杠,是这根直的。然后他说运算符之外啊,还有他的一些方法这时候因为方法也有,方法也有嘛,有这个棍之外还有方法就是我们的拥有 点点 python。 那 我们接下来第一两个集合,来送我的一个 food, 一 等什么?来个水果吧,水果再来个什么?炸鸡,再来个什么?再来个螺蛳粉, 来个复得一,复得二等于什么?来个,嗯,听一些什么呢?来个香菜,来个芹菜, 再来一个啊,水果吧,主要有重复的对不对? 然后再最后再补上一个什么呢?小龙虾, ok 啊,就像计算它的一个,哎,并结怎么做啊?这 print food 啊,这根棍儿啊,这是一个计算了啊,最后到什么样的价格?我来看一下。 得到一个,香菜,水果,炸鸡,芹菜,螺蛳粉,小龙虾,哎,重复的是不是重复的,有去掉吗?重复的哎,被去掉了嘛?就水果是不是一模一样的,只留下一个是不是? 哎,把它两个运算添加到一起,那方法是怎么用的呢?方法就是我的啊,其实都一样,复制一和复制二都是一样的,对吧,并且的话其实没有很大的区别啊,复制一来干嘛,哎, unit 我 的复制二来运行是不是一样的呀? 然后这个 ok, 那 么我们复制一下放到笔记当中去啊,第一个是干嘛?第一个是在获取我们的哎,并集就是我们集合数据合并 它是利用什么?利用集合哎的元素,哎,不重复达到什么?达到一个驱虫效果, 那下面这个呢?下面这个使用方法就是使用我们的一个 unit 方法哎,获取我们的一个编辑啊,复制一下放到笔记当中去,粘贴一下 啊,这多空一个格吧。 ok, 往下看,编辑过后是到我们的一个交集了,对吧? 减号,减号,减号,哎,交集,哎,并且这个符号首先它是来干嘛的,它是来获取同时啊存在两个集合中的元素, 那它的运算符呢?从我们这个并且符号来进行获取。好的方法方法就有点长了啊,是我的一个哎, inter section, inter section 点点拍摄获取存储在,哎,同时存储在,我们话是说同时存在吧, 获取同时存在两个集合中的元素,那这里有两个集合都有的元素是哪一个?是不是用水果呀?来看一下。直接 print 什么 for 一, for 二吧。 for 一,然后呢?并且我们的一个 food 二,来看一下效果什么样子的,是不是拿到水果呀?因为只有这一个一样的嘛,对不对?其他都是不一样的,什么香菜啊,芹菜,小龙虾,下面都没有对不对?什么炸鸡啊,螺蛳粉啊,下面没有,是不是?然后方法呢?我们来个 food 二吧。 for 二点,我们来个 inter 啊, inter 什么? inter six, 我 们的 for 一, 对吧,它的都是水果。那我们第一个就是获取我们的一个交集,就是两个集合,什么两个集合都有的数据进行一个保留 啊?不是抖音啊,是两个数据都有的集合,都有的数据进行保留。那下面呢?就是哎,使用我们的一个啊 interception 方法获取交集,那么复制一下,放到咱们笔记当中去, 放错了,要放这个。那么最后呢,就是我们的一个差级了,差级是用减号介绍的嘛,就是前减后,后减前,对吧?这稍微有点区别,是不是是差级,差级呢?就通过我们的减号。 首先他是要干嘛的?他是获取在我们的一个前集合,获取在前集合中,但,哎,不在什么?不在我们这个后集合 中的数据,然后看一下计算符,计算符来通过我们的一个减号啊,最后呢,来看方法啊,方法的话是我的一个 inter section 点点排序啊,写错了,是 def 呀,是 different different, ok, 是 这个方法,那拿到之后呢,我来看一下,一点点往下看吧,怎么做?就把它并且变成减号就行了。 print print 我 们的复制一,减去我们的一个复制二,或许在前集合中,但是不在后集合中。来保留一个独有的数据, 来先看一下拿到什么样的效果。拿到一个炸鸡和螺蛳粉对不对?因为水果它两个都有嘛,所以说就会去掉来获得这样一个差级。那 print 我 们来个 fold 二点,我来个 different 我 的一个 fold 一, 那这样会得到什么效果呢?来先看一下哎,得到一个香菜芹菜小龙虾,因为因为什么?因为水果是前面有的,对不对? 所以说我们来补齐下注色,这是获取我们的一个差集哎,保留前前集合就是赋的一嘛,因为赋的一调用对不对?那下面保留是赋的二,前面第第五行保留着赋的一,让它在前面,对不对?第六行保留的是赋的二,因为它也在前面,是吧?保留了一个前集合哎, 独有的数据 啊,下面这个呢,使用我们的一个啊的赋的方法 获取我们的一个差集。那么以上就是我们的什么我们的一个集集合的一些运算符了。首先啊,通过并集获取到两个集合的唯一元素 叉集,获取同时存在两啊交集啊,交集获取两个获取同时存在两个集合中的元素叉集呢?是获取在前集合中,但不在哎,但不在后集合当中的数据。 ok, 了解完集合运算之后,我们来了解下集合的方法有哪些。首先,呃,一个给它写完这个方法,这里我会把集合的一些增删改啥?在这个视频讲完,首先第一个是集合的增加,集合的增啊,减号,减号,减号,哎,集合, 哎,集合点 a、 d、 d 大家都听过嘛,然后把数据放进去就行了。那么第一个呢?来个什么? 返回之后再来一个鬼蛇点点排除, ok, 我 们集合是支持动态增加数据的。那我来个 food 等于什么?来个水果, 水果零啊,水果,然后再来一个香蕉,再来一个螺蛳粉, ok, 那 这些有了之后呢?干嘛啊? print word 先打印出来嘛?然后再来 print word, 点 a、 d、 d, 增加一个数据。增加什么数据呢?香蕉呀,螺丝粉都有啊。最后再来个炸鸡吧 啊,添加一个数据来运行。那么这个方法啊,首先它什么都不返回,返回一个,那它是没有返回式。 那最后呢,答案出来什么效果?答案出来是一个炸鸡,螺蛳粉,香蕉,哎,水果,对不对?是这样的一个排序方法,那重新运行呢?顺序是不是又变了?他是随机增加的好吧, 位置是不会被,位置是不会被指定的。然后这是那,哎,没有返回值规则。首先啊,这是参数一,哎,哎,为我们干嘛添加了数据? 参数一为添加数据,那添加数据之后呢?干嘛是添加哎? 单个数,单个元素,单个数据啊,注意啊,如果说这个元素已存在,若元素已存在,干嘛则无操作, 就这么就我把这个炸鸡,哎,换成什么炸鸡?换成我们的香蕉,它会改变吗?没有改变,香蕉还是香蕉对不对?它不会因为你这个添加一个重复数据而增加一个重复数据了,不会是个变法的,好吧,那 i d d 过后呢?下一个 update, 减号,减号,我们的集合点,我们的 up 啊 date, 它是来添加一个数据的,首先啊,它也会有返回值,对不对?还会什么?还会有规则 点点排序。嗯嗯嗯,我先来看一下,就其实把这个哎,把这个什么换成我的 up 对 它就行了。来运行, 他会不干嘛?他会把这个哎数据拆分进行添加,那是干嘛?他不是来添加单个数据的,他是添加一个什么可点带对象的,那返回值呢?这就很明显了吗?是 no, 对 不对?哎,没有返回值。 那么规则呢?哎,规则,首先啊,参数一,为什么我有我们的一个可叠代对象,然后代码,哎,代码是这么写的,我们可以把这个改成你好世界 来全选复制一下,先运行吧。这个还没改,是不是放这里边? 那这里除了添加这个字母三之外对不对?可加对象吧,我们可以把圆组或者列表也放进去,是不是?或者说我们可以放个放个字,放个集合进去也是可以的啊?来个简单,一二三吧,一二哎三,再来个四,来看一下它是这样放吗? 来运行,哎,没有任何问题,是不是可以这样拆进去? ok 了,然后 update 过去之后,其实就这两个方法增加数据的,首先是一个 a, d, d, 然后再后一个呢,就 update 了,就这两个,那增加数据过后呢?就下一个,我们减号,减号干嘛? 我们集合方法杠我们的删除方法,哎,删啊,所以少了个空格, ok, 那 么删除,删除出去方法会有哪些呢?啊?减号,减号,集合点,来个瑞木,哎,最经典方法啊,瑞木再把数据放进去,然后指定删除,那它会返回值吗?来看一下返回值, 然后还会有规则,规则这里肯定会有参数吧,对不对?点点拍摄 啊,把这些都删掉,来个 print, 来个,哎,竖点,我们的一个 i remove。 删除什么呢?删除一个指定元素啊,比如说我想删香蕉,对不对? 想删香蕉来运行,哎,看不见,对不对?因为它没有返回值嘛。返回值是我们的一个 null, 哎,没有返回值, 所以说最后它 print 我 的一个 fold, 来一边形,对吧?香蕉是不是自动被删掉了呀?指定删除一个数据 全选复制一下,我们的瑞木为指定删除数据返回值呢,哎, no, 哎,没有返回值,规则是什么?哎,规则就是参数一 为指定删除数据,那注意一个点啊,哎,删除指定元素嘛,对吧?删除,哎,指定元素,那元素不存在呢?元素不存在会干嘛?元素不存在时,哎,报错, 有没有像不像香蕉?像个什么?像一个,像一个什么东西呢?重新运行一下吧,把这个放到下面了,像个什么?像个丫头 来运行,哎,报错了,是不是那丫头这个 key 啊?它不存在,所以说删不了,哎,放到笔记本去 记号,哎,会报错,因为数据不存在,哎,无法删除。好,这是我瑞幕。那么接下来是我们的记号下面一个方法,减号,减号集合点我们的,哎, disco 啊,同样的,它要是点删除数据来看一下,首先它也会有返回值,对不对?返回值,然后知道我们的一个,哎规则 点点 python 怎么做呢?还是这个还是一个方法啊?来一下 print, 来个 food, 点我们的一个 disco 啊,不是这个, 哎。然后删什么东西?它会有参数的,你要指定删除一个数据,同样的它也指定删除,那最后我们删水果,哎,运行,哎,它同样的是什么?是没有返回值,哎,那 这个格式有问题, ok, 然后 print 加 food, 对吧?它也是删除一个指定数据,那它和我们的一个哎,我们的一个什么瑞木有什么区别呢?它删除不存在的数据啊,不会报错耶,哎。第四个,我们删除什么?删除一个 榴莲,哎,运行对吧?删除不存在的数据,它不会报错,没任何问题,那好处它更安全吧。 返回值,哎,那没有返回值。规则,首先是我们的一个参数一对不对?参数一为指定 删除数据,那么删除我们的一个,哎,指定,哎,元素对不对?删除指定元素嘛,那么元素不存在是干嘛? 要强调一下,哎,不会报错啊,不存在,哎,不会报错,没有任何影响。那除了这前面讲的之外,其余两个是指定删除吧。那么还有最后一个,随机删除, 减号,减号,我要集合点啊。 pop 没有参数,那他会不会返回值呢?肯定是有的嘛。返回值,然后再来一个规则,哎,那也算返回值,是不是点点 python, 那这里全都删掉? i print food, 点 pop 运行,哎,那最后上的是香蕉对不对?我们来 print 看一下吧,下回上的还是香蕉吧,来运行, 哎,还是香蕉再删一下螺蛳粉再运行哎。螺蛳粉再运行香蕉水果呢是怎么上不到水果,哎。现在水果是不是也别删了呀。随机删除啊,每次运行上的结果都很不太一样。 随机删除 复制一下 粘贴然后一直是被删除元素 为的是什么。是随机删除一个元素,哎,注意啊,你想随机删除是不是随机删除是不会不会报错呀。那我来看一下。来干嘛? 一个 ford 啊, ford 二到一个空集合 请看一下这个空夸克号是不是我的一个集合类型呢?来派我判断一下啊,是不是我的一个集合啊。 圆形哎,这是我们还没学到的一个字典啊,所以说它的常用性是没字典高的所以说啊,夸克号被字典占了。我们怎么才能得到一个空集合呢。 set 这样这个方法来运行 是不是有了空集合空集合之后那再来我们来个负的二点随机删除一个元素来运行,哎,报错了。随机删除一个不存在的元素删除空元素会报错,好吧,也就是集合为空会报错 集合哎为空时会报错啊集合为空会报错。那么过后还有一个最近的方法减号减号我们的集合点我的一个 clear。 那它的返回值还有它的规则来看一下点点哎。 pass 来看一下吧。 pop 的 啊,克里亚的话其实大家都听过了嘛对不对。其实吧就什么都不敢把这些这个删掉 啊。 pop 哎。换成我们的克里亚来运行,哎。返回结果是默德的对吧。没有任何返回值。 那它最后哎清空之后呢?返回一个 set 啊, set 返回值啊。那又返回值规则呢?干嘛?它也是清空大师嘛,对吧?清空大师, 清空我们的一个集合, 那么,哎,增删都有啊,对不对?来看一下我们的一个改,挺好挺好。哎,我的集合方法改改。 那改的话会有点尴尬。因为集合元素啊,因为我的集合元素,哎。不可哎,不可以直接修改。他不可以直接修改的。因为什么?因为元素, 哎,因为元素,哎。需要可以哈希啊,如果这个元素可以随时随地被直接修改的话,那它就不可以被哈希了。好吧,因为元素要保持一个不可变性才能够被哈希。那替代方案呢?替代方案就是先 删除,哎,先删除,哎。指定元素,对于指定删除后再添加新的元素。 点点 plus 怎么做?比如说我们来个 s。 对 啊, s 带什么?来个 apple, 再来个什么?那个 banana, 哎, banana 是 不是有两个元素啊?那这样可以怎么做?我们可以 s 点, 哎。左右啊, d s, 第四个删除。谁删除我们的一个 apple 啊?苹果虽然说不难吃,但谈不上好吃,所以说我想把它删掉,然后呢补上一个 s 点 a, d, d 添加一个元素,添加什么?添加一个 orange, 然后最后 app 呢?看一下 s 来运行,是不是?哦,这样呢,就把我们的一个苹果替换成了我们的一个橘子,那么全选复制 这行是在删除旧元素, 这行呢是在添加新元素,最后结果是长这样子的, 这是我们的结果。那这次我们的结合方法改了啊。改,只能这么去改啊。没办法直接动态修改,只能这么去改,先删除再添加,那么过后改正后就是我们最后的一个什么减号,减号,我的结合方法 杠,哎,查了,哎,查找,查的话啊,也比较那个,它是通过什么通过我们的什么?通过我们的一个 floor, 这里还是标一下吧,通过我们的 floor 或者说呢? 哈哈哈。我的 in 以及还有什么 note, 哎,这两个字要进行查找。是通过这两种方法进行查找啊,来看一下吧,点点点,哎, python。 首先啊,还是最开始这几个就不英文了啊,不转英文了好吧。来个 food 一 等于什么?来个水果,然后再来个什么?来个炸鸡啊,只来三个,不来多了,哎,螺蛳粉, 好,那这里啊,单词拼错了,所以它提示我报错了,不建议啊。 ok。 然后 for item 拿到里面每一项引弄我们的什么啊,英文的副的嘛。拿到里面的每一项,然后 print 我 们的 item, 是 不是进入每一项了,对不对?炸鸡呀,水果呀,螺蛳粉重新运行呢?重新运行, 哎,是不是顺序也在进行改变了?最开始炸鸡嘛,现在最开始变成我的一个水果了,是不是?然后来做一个简单判断嘛,来个 if, 如果说里面 item 等等于我们的水果, 就算判断一下我们列我这个集合里面有没有水果,那有的话就 print, 哎。 print 什么? print 有 水果来运行 是吧?这是不是查到里面有水果了呀,对不对?就是你循环拿到了,就是拿到所有水果了,就是最后再来一个 print print 什么 print 我 们的水果,哎,接音我们是吧引我的 food, 哎,行,然后一个处是不是那音就有 note 也 note 啊, note 也码,对不对?这也就是用我们的一个成员计算符和 for 来查询我们的一个集合数据了 啊,放到笔记里面来,只是查的方法上面是改的方法,然后其实增和删是最多的,是不是然后查和改啊?是吧,基本上都是通过一些已有的方式再进行一些自己去实现。 嗯嗯,刚集合,我们讲了一堆啊,查了一堆没有讲过的概念,比如说,哎,什么是可哈希?那么不会更改的数据类型啊?它就可哈希,比如说数字呀, 还有布尔值啊,自助串,那么这些呢,都是不可变性,他们啊都可哈希,都支持哈希,那么什么又是哈希呢?哈希就是通过一个空间去换取时间,用计算哈希值的一个微小代价换取一个啊,免便利的一个巨幅提速。那么什么叫空间换时间 啊?就是用电脑,电脑一个内存,电脑或者说软手机的一个,哎,固存, 有电脑的一个固存换,换什么换?我们的一个软件打开速度快。那你现在知道了,哎,咱们国内的软件,比如说什么 qq 啊,微信哦,什么都是好几 g 起步了吧,都是因为这个,他把数据呢下载保持到本地去了,因为他还空用一个空间,用内存来换取一个加载速度快。那么 快表示哪方面呢?来这边演示一下。嗯嗯,那这边演示还是用来表现出时间差吧。那这边呢? import 一个 time 模块,是我们的一个时间模块,这时间模块是用来干嘛的?它是来获取当前时间的。怎么获取? when print i print 碳,点碳,哎,错了,是碳哎。调用一个时间方法,那这个时间方法呢?它会获取一个时间戳,或者是一九七零年到现在的一个计算机所过去的一个时间描述, 你可以根据这个描述来用今天的今天的时间,然后推算回去,能够推到一九七零年。 那我知道这个方法可以获取到当前的时间之外。之后呢?我们干嘛来写一个列表查询? 比如说我来个 my 下划线 list 等于什么?来个 list 啊,来转换一下,来个睿智,哎,十十个不够啊,干嘛个十百千万,十万百万,然后查一百万条数据, 怎么查?我们来记录一下当前时间啊, star 啊,探啊,沙滩一啊, 等于什么?等问探点探,这是获取程序开始执行时间啊,获取开始查询时间吧。 获取开始查询时间, 那怎么查询呢?我们直接啊 print 来个啊,等等, 来个十百千万,十万,诶,九十九万,来,干嘛来九十九万这个数据而应我们的一个 my list, 哎,看看这个九千啊,这个九十九万在它这个一百万的一个列表里面,这是一个列表查询的操作吧,这是一个,哎,最坏的情况,哎,最坏设想情况,最坏的情况, 最好的情况,哎,需要便利,哎,全部元素 就是从零一直对比到我们的最后一个元素来定义全部元素啊,最后来 print 一下我们的 f, 干嘛? f, 我 们的一个探点探,哎,获取当前时间,然后减去我们的开始时间,然后最后冒号,我们来个点七 f 七点六吧,点六 s, 然后在前面来写一下,这是我们的一个哎列表哎,查询号时, 来看一下一百万条数据,它要查多久呢?来运行查询的时间多久?是啊,零点零七啊,零点零零七,零点零零七,对不对? 是比较快的一个速度了,但这个时间啊,对我们计算器来说已经很慢很慢了,是吧?所以说我们接下来演示一下,用我们的集合来进行一个查询,集合也是一样的,在下划线到那个 my set 等于什么? set? 百万条数据啊,这个应该是一样的,对不对? 要干嘛?同样的获取我们刚开刚开始的时间,这是我们的一个获取开始查询时间,获取到之后呢,同样的,我们来个把这段九十九万接音,我们的一个,哎, my set 干嘛?这就是哈希定位,干嘛直接 print f, 这是我们的一个 set, 查询好使, 还是当前时间,对不对啊?碳,点碳啊,不是碳啊,点碳,哎。第二个方法,然后减去我们的开始查询时间, s 大 碳二,然后呢,同样的保留我们的一个六位小数啊,我选 f 了,是零又 f 啊。 ok, 那 么现在我们再看一下,进行一个简单对比来运行,这个时间差别是不是很明显啊?这到零点零零八了, 哎,零点零零八,那这里呢?耗时吗?根本就不耗时,对吧?根本没有时间一样,根本就不花时间,你看一下,这对我们计算机来说是不是最快的。 嗯嗯,那么以上呢?哎,就是集合,通过我们的一个计算,哈希值得到了一个高速性能,那么差异很明显,对不对?但是啊, 哈希的作用是非常非常多的,我这个视频呢,讲了一点狭隘了啊,进了一些狭隘的定义,如果说起来的更多,我们可以去站内搜索其他大佬的一个视频讲解,那么哈希它的一个作用啊?首先先计算出哈希值,它通过哈希值呢去建立一个表,成为我们的哈希表, 然后这里查询啊,其实不单单不是一个便利查询啊,是通过哈希进行一个定位,所以说它是非常非常快的。那么复制一下放到笔记里面去 来讲一下,这是我们的一个集合,通过计算哈希,哎 高速性能, 哎,从这个哈希值到了一个高速性能,它是很明显的。然后哈希的一个作用,哎, 不仅仅哎如此,还有很多想了解哎,想了解可以去站内,可以站站内 搜索视频讲解,那么以上就是我们的一个集合啊,把哈西稍微讲了一点点。

那么今天我们来讲面向对象中另外一个很重要的概念叫做继承,那我们先来了解一下什么是继承。面向对象中的继承呢?其实和生活中的继承非常的相似,生活中我们能够继承父母的资源和经验。 在编程中呢,我们的继承是指的一个类可以直接获取并使用另一个类已有的一个属性和方法, 其中提供功能被继承的这个类,我们叫做父类。继承父类功能的类,我们叫做子类,例如我们这里可以去定一个包含奔跑、进食等功能通用的动物父类, 再让狗这种子类呢去继承我们的动物父类,那子类就不需要重复的去编写这些基础代码,只需要直接使用父类的所有功能就可以了。 那继承它是能够实现我们代码附用的,它可以整体的去简化我们的代码结构。同时我们子类呢还能在父类原有的功能基础上去新增一些专属的方法, 比如刚刚我们的狗类,它继承了动物类,为了丰富它自己独有的一个特征呢,它还可以给自己去添加多个行为方法,比如这里的握手和转圈。那么我们应该怎么去实现这个继承呢? 我们这里来创建一个父类 animal, 再来创建一个子类 dog, 两者在语法上的区别非常的小,我们只需要在这一个类 dog 后面呢加上一个括号,括号中去包含住父类的名称就表示继承了。 那这样的 dog 类它就拥有了原本在父类 animal 中所写的任何东西。同一个父类它是可以有不同的子类的,像是狗,猫等等这些动物,它都可以去继承我们的动物类, 但是这些动物它们的行为方式总会有一些不一样的地方,比如狗呢喜欢趴着睡觉,猫呢喜欢缩成一团睡觉,那整体的行为呢?虽然是一样的,但是细节会有一点区别,这时候我们就需要用到继承里面所说的方法重写了, 那方法重写是什么呢?当我们继承了父类之后,我们可以在子类中去构建一个和父类中方法名称相同的方法,重新对行为方法去进行一个编程,这个就是我们所说的方法重写。 比如我们在 animal 类中去设置了 sleep, 只是简单地说到我们在睡觉,然后我们在子类 dog 中重新去声明了一个 sleep, 写上小狗趴着睡觉。 那么当我们去用 dog 类对象去申明一个对象的时候呢,便会使用到重写后的方法输出小狗趴着睡觉。这里我们到拍床里面来演示一下。首先我们来创建一个父类 animal, 然后呢给他写上一些方法 正在睡觉, 然后我们来创建一个子类 dog 来继承我们的 animal。 那 现在我们不写 in it, 我 们直接来写这个 sleep 方法, 我们对原本的这个方法重新去做一个编程来 print 一下, 正在趴着睡觉,那现在呢,我们去构建一个作个对象。 好,我们上节课的时候呢,提到的我们需要有一个 in it 方法才能够去构建这个对象,对吧?那今天我们讲到的这里的继承,我们在作个类中我们是没有写 in it 方法的,那在这里其实是因为我们继承了 animal 类,那它相当于在我们类 这一个子类中去复制了一个我们负类的方法放在这来,那么我们也就只需要去输出一个 word 一 给我们的内幕属性进行复制即可。 那接着呢,我们再用 word 一 去点我们的 sleep 方法,我们来看一下它的一个输出, 可以看到它的输出呢就是正在趴着睡觉,对不对?那这里的话就是用到了我们后面子类它重写的方法。好,那么今天呢,我们就先讲到这里,下节课开始呢,我们将会去学习文件的操作。

挑战三十一天带你学习拍粉,跟这个学完,你会发现你也能很牛,全程干货,无任何废话。 相信大家偶尔会在各大视频平台刷到那些靠拍放实现自动化办公、爬取数据、制作小游戏的炫酷作品。那么这些实用又有价值的拍放项目是如何实现的?我们又如何在写拍放代码时保证逻辑的严谨性,同时又能精准的控制程序的运行效果? 从这些视频开始,我会从零教大家来学习拍放编程,从拍放基础环境的搭建讲解,到需求分析,代码编辑,再到调试运行的技巧和最终的项目实战落地。 除此之外,本系列视频中用到的拍放学习工具,实战案例、原码练习题、代码模板、学习路线,还有目前拍放的热门应用方向,自动化数据分析爬虫,我都会整理起来放在公开群里,有需要的伙伴可一步获取。下面我们就开始吧。那么这节课呢,我们延续着咱们 web 当中前端当中的第三个脚本员继续给你们去讲。第三个脚本员呢是 js。 按理来说呢,确实也需要去创建一个 js 的 文件啊,但老师这点啊,还是依然坚持去创建一个 htr 码,由 htr 码最基础的这个网页结构代码去引出 js 的 一个语言。 首先来,我们需要去认选一下 js 它的一个导入方式,使用方式。 大家有听说过 js 吗? js 啊,全称,这个全称是 java 哎 script, 它全称是 java script 啊,听过,好像没听过。那老师问个问题,大家觉得它和 java 有 有没有关系?觉得有的话给老师扣个一,觉得没有的话给老师扣个二, 就它有,跟那个 java 这个后端编程语言有没有关系? 觉得有,给老师扣个一,觉得没有,给老师扣个二。有,大家猜一猜啊,猜一猜就行啊,因为确实我们也没有去学过 java, 也没有去学过 js, 是 不是 答案是没有的啊?一看就觉得有对不对?结,结果是没有。那为什么它里面的包含着 java 这这一个字眼呢? 因为这个 js 在 开发出来的时候啊,这个脚本语言在开发出来的时候呢, java 特别火, 那它呢?就是无人问津,那为了蹭点流量啊,蹭点热度啊,把名字就起成 java, 就 这么意思,那本质上和 java 是 一点关系都没有。如果说大家觉得它像后端编程语言,更像那个什么呢? c c, c 加语言, c 加语言啊,好,那么我们首先先来认识一下,接触一下 javascript, javascript 是 什么呢?通过这节课我们对于它的了解,大家会知道, 它跟那个 python 里面呢,几乎是一样的,跟 python 啊,后端的几乎是一样的,和我们前面所学的 html 和 cs 呢,就完全不一样。你像 html, 它就是学标签, c s f 就是 学样式,那 g s 呢?是学什么呢? g s, 咱们是学语法,好久没听说过这个词了,对不对?是不是学语法哎,他在我们学习过程当中呢,他 也有逻辑性的编程语句,其中包括 if, 判断、循环变量、数值类型,还有 面向对象,函数,面向对象,哎,这么一听 就感觉又回到了基础部分,学 python 对 吧?好,我们先不纠结它到底是 前端的还是后端的,你看一下,就是如果说我们要去在我们学了 html 以及 css 这两个脚本语言的基础之上,学这个 js 是 为了干什么?网页, 你如果说你要去负责这个网页的结构的话,哎,我们就用谁 用 html 来网页的样式,用谁美化,用谁用 css。 那 现在我们学的 css 紧接着两个后面去学的,那它负责网页的什么呢?首先呢,它一定是用在网页当中的 单元,在网页当中的哪个部分呢?循环判断,变量,数据,类型、函数, 有没有发现这些语句都是具有逻辑性的,什么样的场景之下会用到这种逻辑性呢?哎,对,这个同学回答的非常好,三六八幺,这个同学回答的非常好。功能,网页,它需不需要功能?需不需要网页的行为, 你像一个按钮,你点了之后你要做怎样的事情?你要打开哪个网页,对吧?你要跳转到哪个页面,或者说你要打开一个怎样的窗口, 这个都是属于功能。再比如说是什么呢?这里咱们去打开京东, 你看这个网页上面呢?注意看,确实很好看,但是他不是一个静态的网页,什么叫静态的?打开之后他就不会动了,全部都是。 哎,我们只能看不能去点的一个页面,包括你看这个地方想要去滚动啊,这里想要去翻页啊, 都不会有,都是一个静态的。那么静态页面主要是由那个什么 html 和 css 去写的, 这两个如果说能写网页啊,确实能写,但写出来的话,这个网页几乎是不能用的,只能看,不能摸,你但凡去点一个按钮都不会有任何效果,它就是一个花瓶。 那么现在我们去学一个 js, 就是 为了让这个网页拥有更多的行为,拥有更多的功能。 这个行为主要指的是用户在用这个网页的时候,它会进行怎样的用户交互动作。用户在这里去输入某些内容,你是要 返回数据给用户的,用户在这里点击按钮,是会将这个输入的 数据去进行提交到后端,然后再把后端去提数据库的数据给到你的。那么这一整个过程 css 能实现吗? html 能实现吗? 都没讲,因为它根本就不负责这一块,只有 js 它可以去判断这个数据, a 是 连衣裙对吧?好,那么从后端就调连衣裙相关的数据过来 啊。再讲到这个轮播图,那这个轮播图我是不是旋停在这个上面,我鼠标放在这个上面,哎,它是不是就不动了?当我这个鼠标放开, 它是不是又动起来了?我旋停上去,它是不是又不动了?这其实有去做用户交互的,那用户放上来网页就会对应的 产生不一样的效果啊。再比如说用户点击这个位置,打开的又是另外一个网页,点这里又打开的是另外一个网页,这样子,这个就是什么呢? js, js 网页行为专门去负责网页行为的,而这背后的网页行为的逻辑 就有所谓的变量,数字类型函数啊,以及判断啊,循环来完成。所以同学们在学 js 的 时候呢, 就会把它理解成 python, 当然咱们有 python 的 基础,很好去学,对吧?更好更好,就基本上就是把那个语法呢, 差不多的一个语法呢,给他学一下就行了。逻辑啊,是一模一样的,你像一夫判断,那就是分支判断吗?对不对? 其实呢,老师说句话啊,他其实更接近哪个呢?更接近,学过 c 语言的知道他是更接近 c 语言的,确实和 python 又有很多的相似之处。 嗯,它很像一个什么呢?很多的编程员融合在一起,杂合在一起的,一个前端的弱编程边 啊, ok, 但是你要知道 js 还是运用在前端的啊,应用在网页这一块,前端这一块的,那和 python 不 说, java 是 有实质上的一个区别的,那人家呢,都是后端语言,这个是前端的 啊,你如果说真的用 js 去做一些后端开发呀,完全不可能啊,因为它里面很多那些原 bug 在 里面,还有至今都没有修复,因为确实要用它的话也用不大上啊,能用就行,就这么一句话。好,那么紧接着我们来看一下 js 好, js 的 话,它可以去调用函数,可以去定义变量,可以去用,让网页通过调用某个函数拥有某个功能,实现网页行为。好,首先呢是先看一下 js 的 使用方式,咱们目前所在的 这个文件呢,是 html 文件,它和 css 是 一样的,有两种引入啊。方式,有两种引入方式,我们知道在之前我们 body 这个标签里面,哎,这里就是在这里,就是去写 html 的, 对吧?在这个 style, 哎, hender 里面的话,这个位置来一个 style。 好, 这个位置,咱们呢是去写 c s s。 好,那么现在 js 放哪个哪个地方呢? js 它是由一个标签去负责的,叫 script 这个标签啊,我们也可以放在 header 里面,也可以放在保底它的后面。 好,那么先给你们去介绍第一种叫内部嵌入 js 这个地方啊,大家看清楚啊,保底的开始和结束结束标签的后面再补一个标签,叫 script 标签,哎,就是在这个位置,咱们去写什么呢? 你去嵌入 js 代码,去嵌入 js 代码,为什么叫嵌入?因为我们现在是在 html 里面写的 js, 简单写一个吧。简单写一个, 我们去定义一个变量,这个变量的定义呢?注意和 单词里面不一样,它是需要 late 这个单词去进行声明的,声明一个变量如果说是其他的,你说常量的话,还得换个单词叫 cost, 所以 如果你是变量的话,来个 late 啊, late, 那 么这个 name 就是 声明好的变量等号赋值一个数据进去,有个叫 pro prompt 的 一个函数, ok, 它相当于那个 input 输入函数,那么它的话也是可以在 括号里面给到一个详细信息,请输入您的用户名。好,那么这里的这个 pro 函数, 哎,不是说在后端运行一下就完了,它会直接在浏览器上面运行该函数,来,我们直接运行看一下, 哎,看见没有,它会在浏览器打开的某个网页或者某个页面去展示 什么呢?运行效果,请输入您的用户名,这是直接作用在前端页面当中和 input, input 只能在后端,对吧?啊,控制台来个输出,那这里是直接网页渲染出来,效果好,请输入您的用户名,比如说麦芽, 哎,这里的话,如果说你输入了数据,点击确定的话,这个数据毫无疑问给到了 name, 保存了进来,给了 name, 给了 name, 同学们肯定想要去看一下啦。有个叫 out, 这个 a l e t e r t 这个函数,这个函数一旦调用,它的这个函数里面写什么内容? 我写一下啊,我是一个警示框,他们有没有就是玩手机,玩着玩着就弹一个警示框。什么?呃,这里需要输入密码呀,或者说啊,当前没有网络连接啊,就这种警示框,那其实就是用这个 函数去做的。来,这里,比如说我去输入一个一二三了,你看我是一个警示框,这里就会弹出来一个提示 啊,当前没有网络啊,或者是怎么样的?这是一个警示框,那么现在我把这个内直接嵌进来去进行输出, 那比如说我们是输出麦芽,那么这个麦芽数据就会被被 g s 变量所去获取,获取到了之后呢,再通过函数给它展示出来再页面。 哎,这个就是实现了简单的和用户输入进行交互的过程,那这个就是 js 负责网页行为的啊,他会通过 a 函数变量,包括其他更具有逻辑性的代码去实现。 好,那么欸,大家先学习这两行代码啊,这两行代码,这两行代码呢?切入在啊 script 这个标签当中,这种切入方式呢是第一种方式,叫内部 内部 js 引入方式,引入 方式当然和 css 是 差成差不多的,它也有第二种。第二种也是非常常用的,就在当前的文件夹之下,直接新建一个 js js 文件啊,这个 javascript file 啊,新建一个 js 文件,然后起给它起个名字叫 js 杠零一,直接回车。好,这里是不是创建了一个 js 文件, 对不对?很简单啊,咱们就直接去将这两行代码呢,直接给他复制粘贴到这个位置就可以了。直接复制粘贴到这个位置就可以了, 像这个 g s 一个代码呢,我就直接给它注视掉,注视掉之后呢,来看一下啊,注视的一个快捷键也是 ctrl 加斜杠啊,那么在 g s 里面注视的效果是双斜杠。那么在前段当中,光注视我们就学了三种了啊,这第一种, 这是第二种,这是第三种,分别是在 html、 cs 三次和 js 当中。那其实我们不需要去进行区分,做的效果呢,都是一样的,那就是注式快捷键也是一模一样, ctrl 加斜杠,或者 ctrl shift 加斜杠啊,不需要去进行区分啊。 ok, 好, 那么现在我把这两行代码注册之后呢,这个页面就是一个空啊,包底里面也没内容, script 当中也没有,对吧?咱们这个 style 里面呢,也没有。好,那么现在我的这个 gs 里面有代码呀, 我还是找到 hender, 你 可以放在 style 的 前面,也可以放在 style 的 后面,人家原本的那个。呃, c s s 想要引入进来的话,是不是 link 这个单词这个标签引入一下, script 也是一样,就加 script, js 也是一样,那它呢?叫 script 标签去引入好,它有个属性,叫 s r c 的 一个属性。好,把那个 js 的 文件名放进来就可以了,然后运行。哎,照样的话会有那个提示,就那那一个文件里面的所有的代码都导入进来了, 好,输入麦芽,并且点击确定,哎,这里也会去进行弹出。好,那么这个呢,就是 g s 的 引入方式, g s 的 一个引入方式,大家看一下有没有问题? 好,那么这个小节呢,给我们去做一个总结啊。第一,我们要知道,咱们学了三个脚本语言在同一个 html 文件当中的正确书写位置, 这个书写位置呢,其实不用这么严谨,但是为了同学们可以更好地去区分这三个脚本语言,所以咱们还是要严谨一下。第一就是 html 是 放在包底这个标签里面的,包底里面去写 这个包底里面呢,去写 html 代码, 好意思就是说在这里去写一些 d i v 啊什么的,对不对啊?我是一个 d i v, ok, 好。 第二个呢,就是在这个 style 位置啊,这个标签里面呢,去写 c s s 代码,好,你比如说 a, 去设置这个 dv 它的宽度和高度,再来个背景, ok, 好。 第三个就是 js, 这个 js 呢,我们此时这节课暂时还没有去讲, 就说,哎,老师我这个输入的功能对吧,一些循环呀,判断啊,一些功能操作,我要加在这个 div 身上,我要去修改这个 div 的 一个宽度高度,通过 js 去修改能行吗?绝对是可以的, js 它的存在就是为了和 css 和 html 联系在一起,通过 js 更多的一个逻辑操作去进行判断修改 啊, html 码,或者说判断修改 css 样式,循环修改 css 的 样式,都可以让咱们的 标签展示出来的一个效果具有更多的可能性,觉得是可以的。但是这节课暂时先不讲,先把它的一个最基本的这个语法呢先掌握到,所以第三个我们就记一下位置啊,就是 script 这个位置,哎,可以嵌入地去写 js 代码内部 js 来给他注册回来。再其次就是在这个上面通过一行代码去将整个 g s 文件给他引入进来啊,只需要把代码呢在当前文件里面呢写好就可以了。哎,这个就是第一个小节,同学们记一下啊。
![第十八集 文件基础操作 | 全套保姆级详细教程 python学习路线/工具/学习文档等[666]双手奉上#Python #python编程 #python教程](https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/ok1I6dEgAD8GVDfYs6FggNIE9AhGDuCfA0BqkP~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2095974000&x-signature=6J9KL%2FeJDv4jwoTJvoaNsn6vtRE%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202606050759279DF8D1B84570EE25A2B2)
价值两万的 python 课程,如何逼自己一周学完?二零二六最新完整版,小白必看!警告,此视频耗时三个月,共计四十二小时,将带你一口气从零学会 python, 专为小白量身打造全网最易懂、最成体系的课程。你将学会以下技术,基础,语法数据结构、流程控制、函数语模块、面向对象 框架、文件与异常数据分析等。课程内容全是行业刚需。为了让零基础伙伴学起来没有负担,我把配套的学习包以及路径全整理好了,输入打卡学习全部带走。话不多说,我们直接开始吧。文件是什么?首先它肯定是个概念词, 文件是资料,对,文件是资料,资料是数据,文件就是用来去装数据的,文件是变量。对,我们在程序里面去使用文件,肯定也是将它保存在变量里面,然后去用,对吧? 存储数据的 riddles 讲 riddles 这节课是打算讲的,讲完文件读写再讲啊,这个不打紧啊, 存储在磁盘上的数据是的, c、 s、 v 是 的,也算,表格数据也算。 好,大家说的都对啊!每次老师提问,我感觉大家都说的都对,只是说,呃,理解不太一样。大家的理解可能不太一样,是不是 好?那么具体文件是什么呢?文件的概念是什么呢?那像我们接触电脑比较多的同学,他会知道我们 windows 加字母一这个快捷键是可以快速去打开文件资源管理器的,你们可以去试一下,就是可以打开这个窗口。 这个窗口是什么呢?它可以定位到你当前计算机,当前的电脑所有资料,所有文件所存在存储的位置, c 盘, d 盘, e 盘、 f 盘,对吧?一般运行内存,你看这个运行内存,它上面有个 windows 的 logo, 说明它是个运行运行盘符。其他的这个盘符的话,是啊,程序在运行的时候不会去调用的, 只会掉 c 盘的空间啊,只会去掉 c 盘的空间,那有时候就是我们在打游戏的时候出现,突然就出现啊。运行内存不足,其实就是 c 盘。 c 盘啊,爆满了啊,已经爆红了,出现了一个情况啊。 ok, 那么 windows 加二打开的这个弹窗呢?你随便点一个盘符进去,或者你随便去点一个文件夹,我去点个文件夹啊,我,我随便找一个,我去找个桌面里面的这个文件夹叫 软件包。然后进去之后呢,你可以看到很多很多的文件, 你可以看一下,我这里的这个文件类型就比较杂啊。文件呢,首先它是有后缀的,它由两个部分组成,文件名和文件后缀。看见没有 文件名和文件后缀,文件名就讲这个文件叫什么名字,那比如说 python 背记手册, python 常用单词,那这个就是它的名字。文件的名字后缀,那比如说这个点 e x e 啊,再点 g p g, 或者说点 pdf, 点叉 l x x, 对 吧? 还有这个点叉 mate, 但这个都是属于后缀。文件名是决定了这个文件叫什么名字,文件的一个后缀格式决定了这个文件的类型是什么。那如果说是 png 的 话,说明它是个图片文件啊,你看一下, 你看一下他是不是有个悬停的这个解析,告诉你项目类型是 png 图片文件,对不对?还有就是这个 exe, exe 呢?他没有解析啊, 好,有些我去进解析,这个 g p g 的 话也是图片文件,对吧? pdf 的 话,它是属于文本文档啊, wps 的 pdf 文档里面是用来去存放,你像一些啊文字内容的啊,这个是表格,这个是表格啊, x l s x 的 一个工作工作表啊,通过 excel 去打开的一个表格表格数据。好,可以看到,可以看到对于文件的一个解读 是怎样的呢?文件,首先它不会不会像我们这个呃程序当中的一个数据一样,它没有那么单薄,它会将数据,它会将数据存储在一个载体当中, 文件它是数据的载体,你不管是任何任意的文件,它里面都是用来去存储数据的,只是说数据不一样而已,对吧? 你比如说这个批发文件,它里面就是写代码的吗?是不是它也是有文件名和文件后缀,那它是顺序,是我们写的代码的一个载体存放的一个单位,一个单位概念。好,那它呢,是由 文件 名和文件后缀组成,这个后缀是这么读的啊,后缀这两个字啊,比如说你像哎这个 python 点 p y, 那 么 python 就是 文件名 啊,点 p y 呢?它是后缀,是后缀啊,决定了决定咱们这一个文件的类型。 点 py, 那 就是 py 文件啊,只能通过拍叉我们去打开的,那像一些表格就只能通过它 wps 或者 excel 去打开,是不是?好,然后呢,再讲一个同学们不知道的,就文件的滥性, 文件的类型一般呢,我们可以把它分成两种,就二禁制,二禁制的文件和非二禁制的文件。 什么叫二禁制的文件呢?和非二禁制的文件,二禁制文件 它是看不到数据的文本数据。非二静止文件,我们是能够去看到文本数据。 举个例子,你像我们这个 p y 文件,是吧?双击打开之后,里面是有哪些代码,哪些中文解析词啊?啊?我们是可以用眼睛看到的,那这个就是 非二禁制文件能够去看到文本数据内容的。再比如说,哎,这个 markdown, 这个点, md, 这个 markdown, 老师写课间的一个文件,那它打开也能够去看到一些文字啊,在里面,那它也是属于非二禁制文件。 再比如说 txt, 对 吧?双击打开,老师经常布置作业的一个文件格式啊,也能够去看到内容啊,对不对?还有啥呢? 还有啥?还有 pdf, word 文档, excel 表格,那都是能够去看到文本数据的,通通是非二静止文件,那二静止文件呢?看不到文本数据。如果能够理解的话,帮老师举个例子,比如呢? 比如二静止文件它是什么? 什么样的文件,他打开看不到文本数据。对,你像一些视频,我们打开之后,你能看到看到一些文本吗?你看不到,你看到的是一段 音频,听到的是一段音频,看到的是一段视频,对不对?他是一个录像在里面,对吧?他没有文本数据。那这一类的视频音频,还有图片,图片啊, 还有那种安装包啊什么的,通通称之为二进置的文件,二进置文件 啊,这里呢,将文件类型分成二进置文件和非二进置文件,是因为如果类型不同的话,之后我们的文件操作那肯定就不太一样了, 所以老师先给你们去区分一下啊,大家就是先做一下笔记啊,这里分成二进制和非二进制的啊, 文件类型啊。那么大家如果说对于文件有了基本认识之后呢,我们就可以接着往后面去看一下文件的基本 操作了,基本操作步骤啊,在拍摄当中,文件基本操作指的就是文件读取以及文件写入,那如果老师, 哎,你就是,那如果大家有这样的写法啊,不有这样的想法,就是老师我不想去读,我也不想去写,我想,我想去改,我打开一个文件之后,我想去改里面的内容,这个是不行的啊, 在 python 里面,文件读写操作只包含读取和写入两个操作 啊,当然你要去改的话,能改吗?是可以去改的,不同文件它改的这个操作不同,你啊可以通过后续的你像那个那个 c s v 的 一个文件操作去改,这个没有问题啊。 ok, 好,只有读和写啊。那么文件读写呢,是一个非常基础且关键的操作,他通过读取文件里面的数据内容,或者说向文件当中写入内容,可以去实现数据持久化存储在磁盘当中去进行读取操作。 那文件呢?它是存储在磁盘里面的数据,可以是文本文件,也可以是二禁制文件,包括图片、视频、音频等各种类型的二禁制文件,那么当然文本文件它是非二禁制的,大家注意一下。好,那么紧接着我们就看一下 咱们的文件基本操作。文件基本操作是非常简单的, 咱们就把这个过程给他步骤化。第一是需要打开某个文件,你如果说要去对某个文件进行读,或者写入数据进去,你首先你得打开这个文件你才行,对吧?第二, 第二,打开之后,你去读取或者去写入都行, 顺序好。第三,那关闭文件就这么简单。关闭文件,咱们这节课呢,就学这三行代码,你学好这三行代码,其他的都不重要了。 ok, 关闭文件,打开文件读取及写入,分别指代的是几个函数操作,几个内置函数操作。像打开文件,它就是用 open 这个函数。 open 是 啥意思? 翻译过来就是打开的意思,它里面放个文件名,文件名是什么,打开的就是哪个文件,就这么简单。 好,第一步,你打开这个文件之后呢,你肯定想要去对他去读,或者说去写。你这两个操作你只能选一个啊, 你要么去读,你要么去写,你不能说既要又要,对吧?我又要去读,要去写这个不行,只能去读,或者只能去写。如果你去读的话,你去用任意的函数, 翻译过来是读取的意思,调用一下数据就全出来了。你要去写的话,你就用 white 这个函数, 这个函数呢,小框里面放的数据是什么?那就是写入到文件里面的数据就是什么。好,最后一个叫 close 函数,翻译过来是关闭的意思啊, 谁去调用这个函数,哪个文件就会关闭,就这么简单,就这四个函数,咱们学好了这节课就差不多了,能懂 来看吧,怎么用,当然没有老师讲的那么简单,对吧?那肯定还是有一点点难度在里面的,注意听啊,注意听。那首先我们要打开某个文件,对这个文件进行操作,那 现在我们是否得去知道我们要操作的,我们要去打开的这个文件对象他是什么, 对吧?你比如说我现在凭空想象一个文件出来,比 笔笔记点 t x t。 哎,我凭空想象一个文件名出来,然后我要打开它,行不行?大家觉得行不行? 肯定不行啊,那文件都没有,你要打开它,那,那行, 反正现在是不可以啊,反正现在老师在讲的,现在是不可以的。那怎么办呢?我又没有这个文件,我又没有这个文件,我怎么打开它来? 老师,我确实没有这个文件,但是我在本地盘符啊,我在这个本地盘符 f 盘里面呢,有我这个文件, 那我现在直接把名字写进去,能够打开吗?注意,这个绝对是不能的, 咱们拍叉母,它作为一个在计算机上面去安装的第三方软件,它是没有权限去访问你本地磁盘里面的任何数据,任何文件的。没有权限啊,老师,我给他加个权限, 加权限你加加什么权限都没用,就是访问不了任何第三方软件,都访问不了本地盘符的文件, 包括咱们有时候经常会去用到的一些什么微信啊、 qq 啊,都不行,那怎么办呢? 那怎么办呢?哎,咱们得把这个文件叫笔记,点 t x t 的 这个文件, 你给它粘贴复制到当前的目录拍叉母目录之下,那就有了,那就行了,在本地盘符当中 不能去访问获取的文件,我给他复制粘贴到当前目录之下。 注意老师的操作,先在本地盘符选中这个文件, ctrl 加 c, 在 你想要放到哪个文件夹之下, a 选中它, ctrl 加 v 就 进来了,点击 进来, ok, 是 不就有了?那当前目录之下,你能看到这个文件的前提 a, 我 们就可以打开它了,所以同学们注意一下,这个过程在强调什么呢? 啊?你不能使用拍叉任意的去打开来自你本地盘符的文件,你也不要问老师为什么打不开,那确实是不行的,这个操作他就是不成立的一个操作不合理啊。 ok, 你 得把这个文件复制进来才可以。好,那么现在 有了文件,有了,我要打开它,我就把 open 这个函数用一下, open 这个函数我还没写完,它就提示了,时餐要给时餐啊, 要给,那肯定是必然的,那要给什么呢?哪些是必须要去给的呢? 第一个就是这个,这样,这样是文件的意思,哎,就是你要打开哪个文件名,你得告诉他通过食材的方式。第二个呢,是 mode, 这个 mode 是 模式的意思,翻译过来是模式的意思, 打开这个文件,对吧?你要通过怎样的模式打开? 如果你想要去对于该文件进行读取,则是读取模式,你想要去写入数据,到这个文件则是写入模式,不同的对该文件的操作,那 第二个,时餐的这个参数是不同的,按着模式不同能懂。第三个,拷定,这个拷定呢,是用来去设置编码格式的, 这个拷定翻译过来就是编码格式的问题啊,意思好,那他是指定这个文件需要 使用到的编码方式,那比如说我们有一些啊,有一些文本文件里面的这个文本 内容是中文,那中文很大程度上他可能会出现乱码的情况, 在读取或者写入数据的时候会出现乱码的情况,那这个时候你就得去设置一下 encoding, 这个时餐,设置它的编码格式为 a, s, c, l, l, 或者说 unico 的, 或者说 g, p, k 啊,去确保它不会乱码。 那么当然,这么多编码方式,我到底用哪个? a 用 utf, 杠八用这个编码格式呢?它是一个万能编码,你不管你是什么样的中文,我都能保证你的这个字母啊, 文本呢?不乱码,那我就用它。是不是因为其他的这个编码方式呢?他或多或少他所去进行编码的范围呢?有限 有限,你看他只能表示一百二十八个字母,或者说他只支持六千多个汉字,那其他的就不支持了,我就不编码了吗?那肯定不行,对不对?好,那么意思就是讲在使用 open 这个函数的时候呢,给三个参数, 第一个参数,第一个参数是文件名的意思啊,我通过引号里面给到文件的名字,是不就是笔记点 t x t, 注意这是一个完整的文件名,文件名带后缀啊,后缀一定要带上,不然他不知道他是什么类型,那肯定就操作不了他了。 一定要带上后缀啊,一定要带上后缀笔记点 tst 啊,并且用引号引起来。第二个呢,就是 model 指定传餐传入他的读取模式,就是他的这个访问模式,打开该文件的模式呢?啊,我去,我看一下,他里面没有内容啊,我给点内容吧。 哎,我是麦芽二二二。好,我就随便给点内容了,现在是不是有了,有了之后呢?哎,我就想去读,我就想去用 read 去读取数据,那注意 这里他的这个模式就是 r 模式。 r 是 什么模式? read 单词首字母,那就是读的意思。好,第三个参数是 encoding 编码格式,去指定它是个什么呢? u t f 杠八的编码格式,这里的这个单词是红色的,正常啊, 并不是报错的意思,他表达是什么呢?这个是关键字传餐的方式,和其他的不一样的意思啊。好,那么这里就是打开了一个什么呢?打开了一个名字叫笔记点 tst 的 文件, 打开的模式是读取模式,编码格式,格式设置为 u t f 杠八,因为它是一个文本数据,所以我们要设置中文的编编码,你才能保证它不乱码。 ok, 然后, 然后注意了,注意了,咱们打开了之后, open 这个函数使用了之后,他会有一个返回值,这个返回值我们用一个变量 f 去保存一下。为什么要去保存 open 函数?打开了这个文件打开之后,后续是不是还需要去编辑这个文件,把内容读取出来,或者说把这个文件关闭,所以我们必然是需要保存一个, 通过一个变量保存出来这一个这个文件到 f 里面去,这个 f 就 相当于是该文件的载体 啊,后续想要对于该文件进行操作,你就拿着这个 f 去调用,去调用就可以了, 懂吗? f 是 打开的这个文件的载体,那后续,哎,我想要去读取笔记里面的内容,我就 f 点 read 就 行了。这个函数呢,直接调用即可, 打印就可以去得到来自于文件里面所有的内容。哎,就是刚刚所去编辑进去的一一,我是麦芽五个,二,是不是? ok? 那 么最终最后一个关闭文件还是用这个 f 去调用 close, 关闭 ok, 好, 运行 好。那么有同人纳闷了,这个 kloos 到底是起到了怎样的作用?我有它没它好像代码都可以去运行呀,是不是?是不是?那我可不可以把这个 kloos 省掉呢?可以不?不行, 咱肯定是不行的,那不然为什么要加上这么一行代码呢?是不是?那为什么不行呢? 关闭文件,打开文件。首先打开文件,如果说我们自己在本地盘符当中,你想要去打开一个笔记点 txt, 我 直接是双击打开了,是不是? 好,那么程序当中他没有办法帮你去双击呀,那只能干嘛呢?他只能去用一些函数来表达这个操作。好, 那第四行执行完了之后,就表示这个文件就一直打开着,你把里面的内容读出来之后呢,他还是打开着有个窗口, 如果你不去调用 close, 不 去点击这个叉,那它就一直打开着,如果这个文件它比较小,倒也无所谓,对吧?如果它这个文件 是几个 g 的 这种占用内存占用空间的话,则你的这个内存肯定是顶不住的, 所以一定要去打点调用 close, 将这个文件关闭掉,去释放该文件在打开时或者读取写入过程中所去占用的运行内存。你虽然看的这个 close 好 像没什么 爱作用,对吧?但是实际上他是在程序运行中帮你去完成了文件的关闭,他是用来去释放对,释放文件运行中所去占用的内存资源。好,那么就是这三行代码准备好好去体会一下。