经典的菲布纳切竖列用地规怎么快速实现呢?是不是只要找对终止条件和地规公式就能搞定?那首先我们要知道什么是菲布纳切竖列, 它的意思就说你第一项是一,第二项也是一,从第三项开始,每一项都等于前两项的和。现在我们来找到 地规的实现核心,我们先定义这个地规函数,起一个菲布纳切的函数的一个名字,然后最关键的是我们要找到地规的终止条件,如果你没有的话,他就会不断的重复,最终会崩溃,所以他的终止条件 就是他的第一项和第二项都是一,当第一项、第二项都等于一的时候,我们给他返回一个一,否则的话他就等于 第 n 项,等于前两项的和。所以这个递归函数,第一我们找到了递归的终止条件, 第二就是递归的递推公式,这两个是关键,这样的话我们这个菲夫纳切这个函数就做出来了。现在我们来调用一下这个递归函数,我们先用结果去接收它,比如说我们让算第五项的 值是多少,那用这个结果去接收,然后再打印这个结果 运行,那我们得出的结果就是五,那么他的运行的规律是什么样的呢?就是自己调用自己这个 n, 他 返回的是 n 减一,那如果是五的话,就是四加三,然后再把四带进去就是三加二,然后这边是三带进去就是二加一,一直到这个 n 有 等于一的时候,等于二的时候,他返回是一的时候,然后我们得出结果,然后再往回家。是这样一个运规律,也就是自己调用自己,直到他有地规的终止条件,然后再往回返。 我们用地规只适合有明确的终止条件,以及我们要有明确的地规关系才可以用。那么下节课我们来学模块基础。
粉丝2.8万获赞23.4万

在 excel 中可以直接使用 python 了,无需额外安装 python, 即可通过 python 代码在 excel 中分析和处理数据。本期聊一聊如何在 excel 中使用 python。 第一,如何启动 python? 在 excel 中启动 python 有 两种方法,可以依次点击公式,插入 python 命令,或者在当前单元格中直接输入等于 py, 就 会显示 py 函数。 此时输入左括号,或者直接按下 tab 键,单元格左侧就会显示两个绿色背景的字母 p y, 表示 python 启用成功,接下来就可以直接输入 python 代码。第二,如何执行 python 代码? 比如在 c 二单元格中输入一加一,如果按一下回车键就会换行。如果按 ctrl 键加回车键,就会执行这段代码,并显示结果,也就是数字二。 当插入多个 p y 函数时, excel 会按照从左向右自上而下的顺序执行。比如在 c 二单元格中定义两个变量,数量等于一百,单价等于十。然后在 e 二单元格中再插入一个 p y 函数, 输入数量乘以单价,按 ctrl 键加回车键,得到的结果就是一千。如果把 e 二单元格的内容移动到 b 二单元格中,就会显示一串井号,而不会显示正确的计算结果。 这是因为 excel 会从左向右先执行 b 二单元格中的 python 代码,而此时代码中的变量并没有被定义,因此就会出现错误。 如果移动到一二单元格中,因为 c 二单元中已经定义了变量,因此就可以正确执行。另外,在 python 代码中还可以直接引用 excel 中的数据,比如在 c 四单元格中输入百分之九十,然后修改一下 e 二单元格中的 python 代码, 先输入乘号,再点选 c 四单元格,就可以直接引用 c 四单元格中的数据,按 ctrl 键加回车键后,得到的结果就是九百。 仔细观察这段 python 代码,可以看到 c 四单元格都被一对小括号包裹,并且前面都有两个字母, x 和 l, 我 们称之为叉 l 函数。以上就是 excel 中 python 的 基础用法,关于 py 函数与 excel 函数,咱们下期会详细讲解。

你听说过偏函数吗?在编辑派送程序的过程中,你可能会遇到这样的场景,需要反复调用同一个函数,但每次调用都要传入一批重复的参数,如果每次都手动传参数就很麻烦。这时候就轮到偏函数登场了,它的作用是固定函数的一部分参数。返回一个新的函数,后续调用这个新函数时, 只需传入未固定的剩余参数即可。偏函数的实现方式很简单,通过调用派送标准库 function 中的 pass 函数 r g s 表示想要提前固定的位置参数, t word 则表示想提前固定的关键字参数。举个简单的例子,如果需要高频处理二进制字串转整数,用偏函数能大幅简化代码。 这里需要特别注意,偏函数不等同于函数默认参数,两者之间存在本质区别。默认参数是定义函数时提前设定的,参数值固定且全局生效。偏函数是在原函数定义后要用前由使用者动态创建的,可针对不同场景生成不同的简化版函数,灵活性更高。

你知道这样的操作是怎么实现的吗?今天带大家解锁 python 中一个功能特殊的内置函数 excel 函数,它的核心功能是将字幅串当做有效的 python 表达式进行解析并执行。简单来说就是把原本是文本的代码变成真正能跑的代码函数。语法包含三个参数,其中 expression 必选参数表示需要执行的字幅串表达式 可访问的局部变量。 locos 可选参数指定局部作用域限制表达式可访问的局部变量优先级高于 globos。 举个简单的例子,正常情况下,一加四用引号括起来就是一个字串,打印出来也只是文本。但通过 evo 函数,它会被当做 python 表达式执行并得到结果。五、 需要注意的是, evo 函数仅能执行单个 python 表达式,无法直接运行代码块。虽然 evo 函数功能强大,但也存在较高的风险。如果执行的字串来自不可信来源,可能被注入恶意代码。因此,日常开发务必通过 colorbox 参数和 locos 参数来严格限制可访问的变量和函数。

函数定义好之后放,那不用等于白写,那么定义好函数以后怎么用呢?两个步骤,一个是传参数,一个是接收结果就行了,这是我们上节课学的,我们首先第一步要定义出这个加法的函数,最后呢我们把 这个结果给他送出去,这也就是你接收的一个值,现在我们调用这个函数,然后再去接收返回值。怎么来调用呢?首先 我们是要传参数,我们来调用我们上面定义的这个 i 的 函数,然后传参数,比如说三加五,那我们把这两个参数给它传进去,然后呢因为我们给到了 res 这个变量, receive 这个变量,然后我们把它打印出这个结果就可以了, 运行我们就得到了结果。八、有的函数它没有返回值,那默认返回的就是,那你比如说 我们定一个 define say hello, 然后呢我们可以看到 这个它里面是没有 return 的, 没有 return 那 你就只打印,你看到没有,只打印不返回, 也就是我们不需要用一个变量去接收返回值了,就可以直接调用这个函数,不用去接收结果,那这样的话,然后你运行直接运行就可以了。 我们在这里为什么要封装一个函数呢?而不是直接用一个 print hello 就 行了呢?你比如说这里面有一百处 print hello, 其中我们要把 hello 给它更改成别的,那这个时候有一百处你就要一百处的更改,但是你封装成函数以后,那你只需要改封装函数里面的内容,那么其他一百处就跟着更改了。这就是我们为什么要封装函数,虽然它默认返回的是,那如果没有 return 的 话, 你运行他是什么都没有的。然后你调用的话,我们直接调用就可以了,这是有接收返回值和没有的两种情况。

第一节用 python 代码来实现搜索接口协议,咱们定义一个函数,也可以理解为是一个功能,就用定义函数,定义函数这个关键词,然后指定一个函数名称 搜索协议啊。先来看一下排省的函数执行的规则,这个括号里面是行仓,例如咱们定义两个行仓,要执行这个函数下的代码,例如打印输出,打印输出 这 a 和 b, 这时候如果要调用这个函数,就是直接定义这个函数的名称,要传入的参数呢,就由这 a 和 b 这两个行长来接收。例如咱们传入一个一和一个二, 这时候这个一对应的位置就是这个 a 啊,你看这个括号里面有两个参数,咱们常入呢,也是常入两个参数,这个就称为时参实际参数,时参实际的参数行参是接收这实际参数的变量,这两个是变量,那这时候 啊,打印输出这个 a 和 b 就 可,咱们就可以看到运行代码的话,就可以看到输出一个一和二,这两个运行代码来看一下效果,输出一和二, 如果咱们这输出的结果用一个加号就是一加二,就相当于一加二,输出就是三,结果输出就是三啊,输出就是三啊。如果咱们不在这里输出啊,这个打印输出不在这个函数下面执行,也可以放到函数外面来, 直接打印这个调用语句,这是一个完整调用语句,这是打印输出的外围的括号,把它括起来, 而这个 a 和 b 要让他在调用语句这里输出 a 加 b, 要在调用语句这里输出,咱们就用一个,用一个返回结果的关键词,用一个返回结果的关键词来指定这个一加二等于三这个三的结果, 那这时候直接运行代码,它依然会打印这个三出来打印输出这个三,就是这个返回结果指定的这个值。当然如果再进一步加一个引用的变量,例如 c 等于 a 加 b, 这时候返回结果就是返回 c, 这也是一样的效果,因为这个 c 是 由 a 加 b 的, 这个结果引用的一个变量就是便于下文追踪。咱们直接返回结果指定这个 c 在调用语句这里呢?啊,同样的,既然在 python 中,任意的对象和调用语句都可以引用变量,那么这个调用语句咱们也可以来引用一个变量,例如引用一个变量 d, 那 这时候打印输出这个 d, 同样的输出结果就是这个返回结果这个 c, 所以 打印输出这个 d, 结果就是输出一个三 来运行代码看效果输出一个三,这就是拍省的函数调用的一些执行规则。

好,各位小伙伴们,大家好,上面呢,我们已经创建好一个对象了,是吧?那创建对象其实也称之为叫实力化对象, 其实就是把这个类实力化出来,也称之为叫实力化对象。那创建这个对象或者说实力化这个对象,我们有要不要?哎?把这些属性来进行赋值是有必要的,那这里呢,我们就需要去学第一个概念就是什么?就是 cell, 学完这个 self 了,我们就可以给这个对象的属性来进行赋值了。好, self 是 什么意思?刚刚我们在这个代码中用到了,是吧?来回到我们的这个叉中, 大家看在哪里用到 self, 在 这,而且我们在定义的时候用到了。好,我在这里给大家写个注,是 self, 其实就是写在上面, self 就 代表代表当前 对象本身,或这里没写错,或者你可以理解为当前对象时,当前对象的实力本身实力。 好,我给大家解释一下,其实当我在执行第十八行代码的时候,当我在执行十八行代码的时候,他就会创建出来了一个对象的实力,创建出来这个对象的实力叫 c, 一 创建完出来之后, 他才会调用 in 的。 你要注意这一点,是这个对象已经创建出来了,然后他才会调用 in 的, 而且这个 in 的 函数是自动调的, 我告诉大家是自动调的,不用我们调,我在什么时候调呢?就是十八行,这这我选中这一行代码一创建就给一,一执行就会调用 in 的, 其实在调 in 的 时候,他这个对象 已经创建出来了,创建出来之后它会自动把刚刚创建出来这个对象的作为参数传给应用。传给了谁啊?传给 self 这个参数,那么 self 其实就代表当前你刚刚创建出来这个对象的本身。 找吧。好,然后 self 点 brand, 就 表示当前这个对象有一个汽车品牌的属性,给它赋值。这句话其实就是赋值了,不过这里赋值全部都是负的,人看到没?那如果说老师我想在创建这个对象的过程中, 我想把一些属性的值传进去,怎么办呢?可以的,就通过。那我们就要修改一个函数,在这个位的函数里面我们就多加一些参数,比如说我再传一个前参 brand, 再传一个开始念,再传一个 category, 那 我就可以写什么?我就可以写 self 点 brand 等于 brand。 好 吧, self 点 tag 呢? cat name 等于 tag name, self 点 category 就 等于 kag。 好, 很多同学不太明白, 那你,你同样都是邦的,你邦的前面加了一个 self 点,那这个邦的就代表什么?就代表当前这个对象的属性。 注意,你把前面加了 self 这点,加了这个东西,那这个 brand 就 代表是对象的属性。那,那这个 brand 呢?这个 brand 它只是个行餐而已,还可跟我们这个对象没有什么关联, 这里要注意。好吧,为什么?因为我刚刚说了, self 代表当前对象,对吧? self 点,那就肯定是当前对象的什么什么?对吧?当前对象的 brand 属性,当前对象的 tablagon 属性,当前对象的 category 属性。所以这三行代码是什么意思呢? 这三行代码我给大家解释一下。先从第六行开始讲起,第六行就是在这个函数调用的时候,我们规定了三个行参,我们叫函数的参数,这个叫位置参数, 那其中有一个形态我并没有把它算,没有把它计算在内,是这个 cell, 这个这个这个参数并没有把它计算在内,这是因为是由我们的 python 解释器自动传进来的,不用我们管的,不需要程序员管的,知道吧?所以我们不用把它计算在内,它比较特殊。 那么这这三个呢?是需要我们程序员在写代码过程中,你需要手动传进来的,传了这三个形态,哎,这时三个形态跟当前这个 car 的 对象有关联吗?还没有关联。 那他执行第八行代码的时候是什么意思呢?是把你传过来的这个 band brand, 把传进来的这个 brand 赋值给 cell 点 brand 属性。来。这句话呢,我再讲一遍,我讲慢一点,你在我们在 在调用音点数的时候,需要传三个行餐,其中有一个行餐叫 brand, 那 这个行餐呢?和我们当前这个对象暂时是没有关系的,那当他执行第八号代码的时候呢,就会把传过来的这个 brand 的 行餐 参数的值赋值给嗽当前这个对象的 brand 的 属性, 这个时候当前这个对象的 brand 属性它就有值了。所以第八行其实是给当前这个对象 brand 属性赋值了。赋哪一个值?那你要看参数传进来的这个是什么就是什么。 好吧,那第十行代码是什么意思啊?给当前这个对象的 typeahead 属性来赋值了 不?谁的这个值是什么呢?那你要看你传进来是什么,第十二行也是依次累退。好,那这样的情况下,我们就需要在在十八行这里,因为十八行是创建一个对象吗?那创建对象的时候,你指定的需要有三个餐,详餐要传过来,所以你在创建这个对象的时候,你就需要传餐, 一个个传少一个都不行,因为这是必传参数,因为它是背置参数嘛。好品牌,比亚迪,对吧?型号是,我们叫汉,然后呢?这个类型他汉兰大家都知道,轿车对吧?轿车叫中型轿车,对吧? 好,然后我我再创建第二个对象,也可以传不同的,比如说我传一个是这个大众,一汽大众,这是他的品牌嘛?对不对?型号?迈腾,对不对?这也是那类型呢?也是中心吊射。各位,这是创建两个实力, 创建两个时历,我们一一我们,我们给大家解释一下十八行代码。十八行代码你发现没有?它在创建这个 car 这个类的时的对象的时候,它传了三个参数,这个三个参数其实分别对应 这个形态,然后这个号呢?对应这个 type line 啊,因为它是按照顺序嘛,依次传过来。 adri 对 应的这个中型轿车, ok, 那传到 int 函数之后呢? int 函数呢?就会执行里面的代码,里面第八行、第九行、第十行,第八行,第九行,第十行是什么意思?给当前这个对象的 brand 属性赋值。赋了一个什么值呢?赋了它这个值,这个值呢?是行餐,行餐是谁传过来的?比亚迪传进来,所以 self 点 brand 值,实际上就是等于比亚迪,好吧?呢?以此类推,好吧,好,那这就是 self 这个这个关键词,这其实 self 了啊, 本质来说它不叫关键词,好吧,它不是关键词,在这里我刚刚说错了,但我实际上也是特意说错,为什么呢?因为接下来我要讲这个,我告诉你,你不叫 self, 也可以。好,比如说我叫 self, 我 们来下划线, self 可以 吗?可以是,那这里都得改, 对不对?这这个这个形态的名字是可以随便写的好吧?是可以,是理论上来说可以随便写的。那为什么随便写?怎么会出现一个波浪线呢?又出现警告了,就是违反 p 一 p 八规则,知道吧? usually 什么呀?通常 usually first prime 就是 first prime 是 第一个,当我们函数的第一个,通常情况下,函数的第一个参数的命名应该叫 self, 看到没?就违反了 p 一 p 二规则,就是我们经常说的编程习惯, 这是就是大家伙们习惯了从拍档程序,习惯了第一个函数。啊,不,函数的第一个参数,大家应该看什么函数?这是这是,这叫成员函数好吧,或者叫对象函数,这个函数它的第一个参数呢?它就叫命名,最好就叫 self。 它代表什么意思呢?代表当前你刚刚创建出来这个对象本身,好吧,你用其他名字也也不是说不行,也是可以的。 ok, 这就是 self 的 本质,有了,有了 self, 我 就可以给当前这个对象来复制了。 说错了,给当前对象的属性来复制了。比如说点 self, 点 brand 大 夫,点 time play, self, 点 category 来进复制了,那你我未来还有很多的都是可以通过它来进行复制。那老师十次性这个 self 也是代表当前对象本身吗?对的,没有错。 总而言之,大家在内里面,未来在内里面看到了 self, 好 吧,就代表当前这个对象本身。这就是关于 self 这个 这这个非常重要的一个词的一个解释。好吧? self 什么意思?当前对象。好,那刚刚我们讲的这个属性叫什么属性呢? 其实叫对象的属性。好吧,那刚刚我们看到这些函数也叫什么函数呢?叫对象的函数,所以接下来我们就要就要给大家去谈什么叫类属性,什么叫 类属性?在后面什么叫类属性,什么叫类函数?以什么叫这个对象属性,或者叫什么叫对象函数。那现在呢? 我们先看这在类的,在类的外面去访问,以及在类的里面去访问,这什么意思呢?就是当你当你这个对象的属性你想要去用的时候, 你在类的外面怎么去用,在类的里面怎么去我们类的外面?先不管,先不着急,我们先看在类的里面看。这 如果你有对象属性,那么你在类的里面怎么用呢? self 点什么?什么?好吧? self 点属性名字,因为这是属于对象属性。 cf 点函数的名字,在这个函数呢也是对象的函数。那我回到代码中给大家解释一下,刚刚我在第八行、第十行、第十二行定义的这三个属性其实都是属于叫对象属性,说白了这个属性是属于对象的,就这意思。 好吧, ok, 我 我再给大家解,我再在这这加个就是 brand, 就是 这三个 brand、 type、 line、 category 都是对象属性, 为什么都是对象属性呢?其实你就看这个属性前面是什么,这个属性前面是 self 点,很明显了就是对象属性,因为我说了 self 就 代表当前当前对象本身, 那对象点属性性,那不就是对象的属性吗?属性都是当都是代表当前对象的属性, 那对象属性其实就表示这个属性是属于你这个对象的。好吧?属于你这个对象,属于你这个对象。好,那我在在类的里面去用到这些属性的时候,你直接使用 self 点什么什么就可以了,比如说我在这我需要用,我需要干嘛呢?我需要把这个 汽车的型号和品牌打印出来,那我就 print f, 然后呢? self 点品牌 brand, 好 吧?然后加个杠,我们再括号括起来,我们使用 self 点 叹号号的型号。好,那十六号啥意思呢?十六号的意思,其实我就是要把当前这个对象的 brand name 属性的值,以及当前这个对象的 type name 属性的值把它输出出来, 那我要访问,我要拿到这两个对象的属性值,那我就是 so 点什么? so 点什么知道吧? ok 啊,包括函数也是一样,像我们这个 run 这个函数是属于什么函数呢?它是属于对象函数,对象函数也叫成员函数,其实其实还有一种说法叫成员,其实我们对象属性还有一种说也叫成员,成员属性,成员啊,这里还有一种说法 叫元成员属性和对象属性的是一个意思。那为什么我可以判断出呢?这个 run 这个函数它是属于对象属性或者成员函数呢?重要原因就是因为它参它的第一个参数是 self, 所以 各位你发现一个特点没有,只要是跟 self 有 关的,几乎都是什么,都是什么,都是属于对象的属性,要么是对象的函数。 好吧,好,回,再回到文章中来,就是在如果,如果对象的属性和对象函数你在类的里面是使用的时候,直接 self 点,如姓名以及 self 点函数名就可以了。如果你在类的外面去使用的时候呢? 举个例子,什么叫在类的外面?请问第二十行代码是不是在类的外面?当然是的,比如我在这儿我需要印一下当前这个 c 一 这个对象 它的属性,它的什么属性呢?它的品牌属性要怎么写? c 一 点变什么点? brand 品牌属性。 所以在类的外面去使用的时候,对象名加属性名,对象名,点加属性名,然后一样的函数的话呢,就是对象名点函数名,这个是是,这个就是访问访问对象 c 一 c 一 的属性。好吧,那调用 c 一 这个对象的函数呢? 那就是 c 一 点 wrong, 这函数调用对象的在内的歪向什么特点?在内的外面都是通过对象名加属性名,对象名加函数名。但我这里面都是访问 c 一 这个对象的,那 c 二这个对象的呢? c 二这个对象的没有访问吗?那如果你想访问也是以此类推的,好吧,好,我们来运行一下。走出来了,打印的是比亚迪, 对不对?然后再调用 run 这个函数,调用 run 这个函数,说白了其实就执行第十六行代码,因为你掉了 run 这个函数嘛,就会进到 run 这个函数里头,执行第十六行代码。十六行代码打印的不是比亚迪汉嘛? 对不对啊?然后有一个开起来。对,那如果我调用 c 二这个函数了, c 二点点 run, 他就会打印的内容不一样了,他会打印一汽迈腾开起来,对吧?前面呢是比亚迪汉开起来,后面呢是一汽一汽大众迈腾开起来。 刚刚你现在更更好理解什么叫对象的属性和对象的函数吗?这是两个 c 一 和 c 二两个不同的对象, 当他都是调用 run 函数的时候,他他打印的结果是不一样的,原因是因为这个 run 函数以及里面的属性都是属于当前这个对象的, 那 c 一 这个对象的属性和 c 二这个对象的属性他就不一样,知道吧?这两个对象的属性不一样,所以 run 这个函数调完之后出现的现象或者结果肯定也是不一样的。好吧, 所以你看,所以我刚刚说了,对象属性是属于,是表示当前这个属性就属于当前这个对象的,它不属于另外一对象, 好吧,函数也是这个这个函数 round, 这个函数就属于 c 一 c 一 这个对象的,不属于 c 二的,当然 c 二也有这个 round 函数,知道吧?好吧,你要明白这一点。 好,那我们这节课先讲到这个主要讲什么了?讲 self 这官字,以及这个对象的属性和对象的函数怎么去用它怎么去呃,给它赋值等等,甚至包括怎么定义,这里都讲了十五行是怎么样定义一个函数吗?好,谢谢大家再见,记得点赞关注哦。

好,各位小伙伴,大家好,我是老肖,接下来我们继续讲面向对象。前面我们讲类属性,要注意类属性只能是通过类去修改, 如果你是通过这个类的对象去修改,其实并不是修改,而是给这个对象重新增加了一个新的属性而已。 好,接下来我们继续第四个,类函数和静态函数,你看函数也分为,呃,类函数,其实还有静,还有静态函数,还有对象函数啊。我们先说类函数,前面我们讲的那些函数,我告诉大家全部都是对象函数,也称之为叫成员函数。 那类函数需要使用装饰器,挨着符号是啥?是装饰器,辅助装饰器。后面马上就要讲了,不着急。总而言之,你你就知道啊,你暂暂时了解,这个装饰器就是一个标记。 好吧,那通过艾特符号加 class mess 来标识其为类函数啊。对于类函数的第一个参数,必须是当前这个类, 一般以 cls 来作为第一个参数的名字,当然了也可以对它进行重新命名。习惯上我们都用 c i s, 是 这样的一个函数,类函数。 好吧,那后面我们还有静态。不着急,我们先讲这个类函数来回到我们的拍档中,在拍档中我们这样的还是换一个,别跟那个换了一起了,换一个 别名叫类类三十六,还有进透和回撤, 我们还是定一个定下来,我这个类叫还是叫 percent。 无所谓啊,我原来我们一直在讲的,比如说下面 indy 的 像这样的一个函数,这也是一个函数,这个函数是什么函数? 成员函数,或者叫对象函数,比如 self 点 n 恒恩,这是给当前这个对象加上了一个类名属性,并且被它复制了。好,那这个函数跟大家说这个是念,或者叫对象哈,也叫实力哈。 好,把所有的名字都给大家写一下。好,那还有种情况,各位,我们这样子定一个,比如说每个人了,像每个人有一个什么样的好行为了?比如说每个人有一吃吃饭的一个行为。 好,就说出一句话,画括号,三号点内正在吃饭。好,我就打印这么一句话,那这个函数也是属于成员函数或者对象函数以及实例函。大家发现成员函数、实例函数以及这个对象函数它有什么样的一个特点没有?首先是在内的里头,第二 他的第一个参数,注意他的第一个参数 self, 后面的参数就无所谓了,你想是什么就是什么,只要第一个参数一定是 self, 那 这样的一个函数就叫做对象函数,或者叫实力函数。 那刚刚我我我给大家讲的这个类函数是什么意思呢?类函数样子,比如说每个人都要工作或 它的第一个参数就不再是 self 了。好,我们打印化每个人都要。同时这个函数上面加了一个装饰器 at, 是 这个装饰叫什么?叫 natas method。 那 么当前这个函数就是属于类函数。类函数有两个特点,第一个特点,第一个函数的第一个形态,后面有其他场所无所谓,比如后面我还有其他场所 other 啊,都可以的,或者说我还有其他 number 等于一百,像这样的这个有缺失参数的,缺失值的一个参数都是可以的。为了后面的参数的符合我们之前讲的那个 函数中参数的那些特点,有比如说位置参数,缺失参数,还有建值队的参数,还有不定长参数都可以。总而言之,第一个参数是 cls, 一 般用 cs, 我 换其他名字其实也行,知道这是第一个特点 好吧。第二个特点,这个函数上面得有个注册器来标识,当前这个函数是属于叫 class, class 类, next 是 函数的意思,所以叫类属性。有了这两个特点它,它才能叫类数,类类函数,类函数 啊,这就是类汉一样道理,这个类函数也是所有的对象都能够拥有的好吧。当然这个函数还是属于类的,只是所有这个类的这一项都可以共同拥有啊。那这个类函数我们怎么去雕一样呢?首先我们先创建一个 p 一 percent, 旁边一个张三,他的成员函数怎么调?这个我们之前讲过的,在外面就通过这个变量的名字,比如说有一个,那你就这样跳就可以了。那类类函数怎么调法?两种调,两种,跟我们之前讲的类属性的访问一样,两种动。 第一通过 p 一 点,通过看通过对象的变量名字点 worker, 这样也可以调,但 worker 这里面该传参。哦,这里面其中有一个参数传的是 arthur, 是 必要传的, cs 是 不用传 arthur, 我 就乱传一个把一个空的 abc, 但这里你可以打印一下这个 alt。 好。 嗯,还有一个方法就是通过类名去调 work e, f 这两种方法都行,一个是通过这个对象去调,第二个通过类名去调,你看是不是每个人都要工作,是不是打印了两次啊?每个人都要工作打印两次,前面张三在吃饭是是一起函数打印的。 好了,搞定了,这是类函数的调用函数,就这么多函数的定义函数不能去,不能去随意修改的,已经定义好之后,你就不能修改了,我们接下来继续。我们还有一个要讲,就是静态函数跟我们的类函数又有点不一样了, 静态函数需要通过一个装饰器叫 static method 来进行修饰的。静态函数这个方法也叫函数,在加倍中,我们讲方法在 python 中其实叫函数,这个我应该读过了,叫定义函数,既不需要传递类对象,也不需要传递实力对象。 好吧,也就是说,你第一个行餐是不是 excel, 是 不是 crs? 无所谓,第一个行餐没有任何要求,你根据你的需求来,你这个静态函数需要传什么行餐你就传,没有传行餐,那你就什么参数都不需要。好啊 好,接下来我们来定义一个静态函数,比如说每个人都可以行走,我定一个 run。 好, 跑起来,参数,我,我,跑起来这个词,我,我,这个函数不需要任何参数。来一句话,每个人,哦, 跑起来,这个没有定任何的一个行参,但上面我要加上一个叫 static method。 好, 这就是一个静态函数。静态函数呢,也有两种标法,静态可以摇种,第一个可以通过对象 p e 点啊,有一个软,还有通过类名 python 点软。那这样这两种方法是不是跟我们的类函数的调用是不是差不多,效果是一样的?对,是一样的。 那既然是一样的,呃,为什么还要搞这么一个静态函数了?还是有点区别啊。静态函数你看发现没有?是不需要有 self, 有 class, 还有当前这个类, c r s, 是 吧? 所以大家看一下,这后面有,我写了一句话,特点,当函数中既不需要使用实力对象,也不需要使用类对象的时候,也不需要使用使用这个实力,也不需要类的时候,那我们定义的这个函数就把它定义成静态函数。 这种静态函数我们发现一个特点,他其实跟当前这个类无关,跟当前这个对象也无关,是不是只是你这个当前类以及当前的对象都可以用? 我,我在写这个函数的代码的时候,不需要用到当前类,也不需要用到当前实力,所以我定义的这个函数,我就把它定义成静态函数。 那静态函数原因是因为它不需要做任何的 cell 法,也不需要传 cs, 也不需要传。好吧,它取消了不需要传递的一些参数,有利于减少 没必要的内存占用和性能消耗,这就是它的作用。好,那大家我们对刚刚我们说的这三种函数呢?再做一个总结,让我们回到代码中来。哪三种函数呢?在我面向对象编程中,第一个成员函数或者对象函数,或者叫实力函数,这个函数调用只能是通过当前这个对象去调。 好吧,在调这个函数的时候, self 就 代表正在调用的这个对象,比如说你 p 一 点 it, 那 self 就是 p, 那我 p 二点一,那我就是 p 二, self 正在被调用的这个对象。好,第二个函数是我们的成员,是类函数,第一个参数必须是 cls, 代表当前这个类,那比如说我在函数里面想要拿到当前这个类的名字的时候,其实就可以用这个 cls, 好 吧, 那一样的,在成员函数中,在对象函数中,我需要用到当前对象的时候,我就可以用这个嗽,比如说嗽福点内,我是不是用到了这个嗽,那一样的,其实我在这里也想要打印这个类的名字的时候,也可以用到这个 cls print cls 代表当前这个类,比如说当前这个类的名字下限。啊,那我当前这个类的名字, 那我可以用到它,甚至我还可以拿到当调用当前这个类的一些函数都可以,因为我实际上是拿到当前这个类了,当前这个类我已经通过参数传进来了, 那这个函数这样的函数就是类函数,当然上面还有一个装饰器叫 class method 类函数可以让每一个这个类的对象都可以共享。 当然如果我要调用调用这个类函数的时候,也可以通过类名去调用,也可以通过某一个对象的变量名去调用。静态函数的调用也是一样的,不过静态函数它的参数是是可以没必要传当前对象以及当前这个类,这是最大的一个特点。 好,那关于类函数以及静态函数,我们就先讲到,谢大家再见,记得点赞关注哦。

python 从入门到精通第二阶段第二章四点五地规函数学 python 我 只看糯米,哦 糯米,这里先讲一下什么是地规函数,这里糯米写错了文本,请大家忽略一下哈。其实地规函数就是函数自己调用自己,就像一个盒子,里面装着小盒子,小盒子里面又装着更小的盒子, 以此类推,就类似于俄罗斯套娃一样,打开的盒子里面永远有个小盒子。糯米,再讲一下地规函数的作用,我们为什么要用地规函数?糯米,这里举个例子,假设我们是一家 a 股上市企业, 我们要计算这家 a 股上市企业去年的总支出,那么这家 a 股上市企业旗下可能会有很多子公司,子公司旗下可能还有子公司。 这时候我们如果用普通的循环来计算所有子公司加起来的总支出,不知道要写多少个循环代码,这样很容易会写错代码。 这时候如果我们用递归函数就会简单的很多,这里我们只需要告诉函数总部的支出加上所有子公司的支出就可以了。那么所有子公司的支出怎么计算呢?这里我们直接使用这个函数就可以了, 这里的地规函数会帮我们自动计算到最底层,然后一层层的把计算结果返回给我们, 这个就是地规函数的作用。地规函数可以让我们的代码更加简洁。地规函数也是常用在文件系统里面,比如文件夹套文件夹这类系统,还有数学上的阶层,斐波纳奇数列等等。糯米再讲解一下地规函数的结构是怎么样的。 首先递归函数必须要包含两个关键部分,第一部分是基线条件,基线条件其实就是告诉函数什么时候停下来, 不再调用自己,这是递归函数的出口,防止函数无限循环。 第二部分是递归步骤,递归步骤就是函数自己调用自己,但是每次调用都会让问题规模变小,从而逐渐的逼近上面这个基线条件,也就是一步步的靠近停止函数,自己调用自己。下面这个就是递归函数的代码结构了, 糯米这里讲解一下这个代码结构。首先这里要写一个函数,接着下面就是要写 if 的 条件判断了, 就是我们上面讲的要写基线条件,然后如果传入的参数满足这个条件,会执行到 return 函数返回结果,给程序不再调用自身函数,如果不满足条件,会直接执行 else 语句。下面的代码 就是函数自己调用自己,然后传入更小的参数,得到更小的结果。程序拿到更小规模的结果之后,结合当前的数据,再组合当前这个问题的答案,直接返回给上一层,再次判断,再次循环,这个就是递归函数的基本结构。 这里糯米再提醒一下,这里的基线条件必须存在,否则地规函数会一直调用下去,直到内存耗尽,程序崩溃。 糯米这里举个实际的小案例,假设我们有一堆糖果盒,每个盒子里可能装着一些糖果, 也可能还装着更小的盒子,小盒子里可能又装着更小的盒子。我们来用递归函数计算一下一共有多少颗糖果,这里我们定义了两种情况, 第一种情况是这个盒子里面可能是个普通的盒子,里面只有糖果。第二种情况是这个盒子是个嵌套的盒子, 里面除了糖果,里面还有一个小盒子,小盒子里面可能还有糖果,所以我们要用递归函数做两件事情,也就是我们上面讲的递归函数的两个条件,第一个是期限条件,就是如果盒子里没有子盒子, 那么程序就直接返回里面的糖果数。第二个就是递归步骤,就是盒子里有子盒子,那么糖果总数就等于本盒子的糖果数加所有子盒子的糖果总数 糯米。接下来逐行解读下面的代码。首先这里定义了一个名为 count candy 的 函数,这个 count candy 是 属糖果的意思,然后这个函数接收一个参数 box, 这个 box 是 一个字典,代表的是一个大盒子,这个 box 大 盒子里面包含了 candy, candy 就是 这个大盒子里面的糖果数量,这个 box 大 盒子里面还包含了 children。 丘准表示的是大盒子里面的所有小盒子,就是小盒子里面的列表,小盒子列表里面的每个元素代表的也是一个更小的盒子字典。接下来是统计这个大盒子里面的糖果数量,这里的 toto 等于 box, candy 表示的就是先把当前大盒子里面的糖果数量写在变量 toto 里面去。 下面接着是矗立所有的小盒子,这里的负循环当中的 box, children 就是 便利当前大盒子里面所有的小盒子,就是便利 children 列表, 然后对每个小盒子调用 count candy 函数就是数糖果的函数,这里就是采用的递归函数了,这里的数大盒子糖果数量的,这个函数又调用到数所有小盒子的糖果数量, 这里的 count candy 会返回所有小盒子的糖果总数,然后把每个小盒子的糖果总数上形成了一个新的 toto 总数, 最后再使用 return 函数返回总数,那么直到小盒子里面再也没有盒子的时候,否循环就会直接跳出循环结束程序。 接下来我们再写一下这些盒子里面的糖果数据,假设这里是有三层嵌套盒子的结构,我们把它命名为了 bigbox, 最外层,最外层有五颗糖,然后里面有两个小盒子, 也就是这两个小盒子,糯米这里标记一下就是这两个字典。那么第一个小盒子里面是有三个糖果,没有更小的盒子。第二个小盒子里面有两颗糖果,里面还有一个更小的小盒子, 这个更小的小盒子里面有四颗糖果。那么这里我们的数据写好之后就要调用函数了,这里我们调用一下递归函数 count candy, 然后把大盒子 big box 作为参数传进去,传递归函数之后就会得到总的糖果数量,偷偷 candy。 最后我们打印输出一下有多少颗糖果就可以了。我们来运行下代码,这里就可以看到运行的结果了, 宝宝们这里可以自己思考一下这个代码的执行过程是怎么样的哦,也可以对比一下递归函数和普通的循环到底有什么区别。糯米这里直接把这两个问题的答案打包发到学习群里面。最后糯米这里做一下总结。 首先是递归函数的定义,递归函数的定义是函数调用自身的编程技巧,接着是递归函数的作用,递归函数的作用是优雅的处理具有嵌套结构的问题,让代码更简洁,更接近问题本身。然后是递归函数的结构, 地规函数的结构就两个条件,一个是基线条件,另外一个是地规步骤。其实地规函数它本质上就是把一个大问题拆成越来越小的同类问题,直到小到可以直接回答。这里宝宝们要记住,每次地规问题规模都要变小, 并且一定要有停止条件。掌握了地归函数,我们就能轻松应对那些看似复杂,层层嵌套的任务了。那么今天的课程到这也就结束了, 下一期我们要学习的是异常处理,我们要给代码加上安全网,让代码在出错的时候也能优雅的应对。关注糯米,持续带你掌握拍伞!

本期继续讲解如何在 excel 中使用 python, 这里有一份销货明细表,现在需要对它进行分析汇总。在 g 一 单元格中按快捷键 ctrl 加 shift 加 alt 加字母 p, 就 可以快速插入 py 函数,启动 python 模式, 然后选中所有的销货明细,就会自动插入一个叉 l 函数,从而实现把销货明细引用到 python 编辑器中。 为了方便后续的操作,可以将整个叉 l 函数定义为一个变量。先输入明细,然后再输入一个赋值计算符, 最后按 ctrl 加 enter, 就 会创建一个名字为 dataframe 的 数据源,我们称之为 python 对 象。如果要进行统计计算,在 g 二单元格中插入 py 函数,先输入明细两个字,也就是上面定义的变量名称, 然后输入一个点,再输入 describe 函数,最后按 ctrl 加 enter, 又会得到一个名字为 data frame 的 python 对 象。 如果点击这里,就会看到这个 python 对 象的具体内容,里面会显示计数平均值、最大值和最小值等,或者也可以点击这个地方,再点击 excel 值,相关的内容就会被解压并显示在 excel 单元格中。 再次点击这里,然后点击 python 对 象,内容就会被收缩到 data frame 中。如果要单独对数量这一列进行求和,输入 p y 函数,然后输入明细。 接下来要引用销货明细表中的数量这一列数据可以采用类似结构化引用超级表的方式输入。先输入一对中括号中,输入一对双引号,在双引号中输入数量就可以了, 然后输入一个点,再输入一个 sum 函数,最后按 ctrl 加 enter, 就 可以计算出总数量。既然已经用 python 了, 那么这段代码其实还可以简化一下,删除中括号以及中括号内的所有内容,然后在明细的后面输入一个点,再输入数量,这样就可以直接引用数量这列数据。 这里的点可以理解为中文里面的的整个代码的意思是对明细表中的数量这一列进行求和,最后按 ctrl 加 enter, 也可以计算出总数量。有小伙伴可能会问,计算总数量直接使用 sum 函数不就行了,为什么要用 python? 不是 复杂化了吗?

大家好,今天我来给大家用拍摄来画横线,呃,这边有五条横线, ok, 我 们这样打一下,我们大家想一下画这个横线呢,可以用函数的圈套,那这个因为要用可以用函数的圈套,会让可以让函数更简单,所以这样 d, e, f 来设定一个函数, 我来设 a 吧,然后括号,冒号。首先先要打印一条横线,因为是签套 jimprint 冒号, 这个就是横线。然后呢,因为要打印二十,这边大概有二十个,所以将乘以二十,现在就可以打印一条,要打印五条,很简单,再用一个 d, e, f, 然后现在可以再设置成 b, 因为是两个, 两个不停的冒号回车,可以用一个位循环让他们进行连起来。 i 等于零, 不能等于。一般一个用户输入五的话,那他只会跑四次,所以要用用户自己输入,所以还得用一个变量,用一个那个那个参数,嗯, 然后是位式循环,然后是我们得把这个和这个,我们得把 i 和这个参数进行比较, i 小 于,只要 i 小 于这个参数, 就跑,就跑这一个,就跑这个 a, 然后跑完之后 i 加等于一,这个函数就做好了。现在就是要做一个,就是输入,然后随便输入一个,比如说我输入十,他应该就会打印十条线。对, one, two, three, four, five, six, seven, eight, nine, ten 十角,你讲一下原理呗, 这幅是什么意思?这幅是设置函数,然后设置函数,就比如说调用这个函数, a 是 什么意思? a 是 这个函数的函数名, 我把这个打印一下,那 a 的 话,他就会打把这个取了,我只要用 a 这个函数,他就会直接打印一条横线,而我只调用 b 这个函数呢? 这是我就是,就是我得,我得自己输,这边可以自己输。然后呢我再教大家一个给函数进行命名,比如说这个函数有一点说明,就打印这三个这个, 然后就可以给函数进行一些呃,就是给它说明,比如说这个 a 就是 打印, 打印这是打印红线和 n, n。

函数还能自己调用自己吗?这种神奇的写法就是递归,像计算阶乘这样重复相乘的问题,除了循环,更简洁的写法就是递归函数在执行过程中调用自身 核心逻辑,就是把复杂的大问题拆解成和圆问题结构相似的小问题。现在我们来定义递归函数,比方定义 递归函数,这个名字可以随便起,里面是参数。我们用递归的话,必须要加终止条件,否则的话他就会报错,无限循环报错。如果 n 等于零或者 n 等于一,那么就返回一。为什么?因为零的阶乘和一的阶乘都是一,否则 我们来返回,这个是关键。 n 乘以这个函数本身,这就是一个递归函数,那么我们来调用这个递归函数 来接收,用 result 来接收一个结果啊。调用这个递归函数,五的接乘,我们最终返回的是五,再乘以函数本身,那这里就变成四了,然后接着把四放回去,到这里又四往下乘,乘以是 factory 三,然后再带回去,直到他返回的 n 等于零和一的时候,他就终止了。所以我们如果用 d 规的话,必须要加终止条件, n 等于零或一,然后我们来打印,结果 运行,我们就得到了五的阶乘是一百二,所以我们用 d 规的时候一定要注意,没有终止条件就会无限 d 规报错。下节课我们学函数 d 规二。

函数算完结果怎么传给外面用?我们用 return, 也就一句话,返回结果。 return 干两件事情,一个是把结果返回给调用者,一个是立刻结束函数。那我们之前讲过了,咱们再写一遍。先定义一个 叫 add 的 函数,里面有两个参数,我们定义完以后,我们需要用 return 把结果给它返回去,然后我们现在来调用这个函数来接收返回的结果。运行函数内部来计算 它们两个相加,然后将它相加的值赋值给变量 receive, 最后把它打印出来,所以我们得到的是三,那么没有 return, 默认返回,那比如定义一个 say hi, 里面没有参数,我们来打印 say hi, 如果我们不写 return 的 话,那我们来接收一下这个结果,然后再把这结果打印一下,我们看一下 它返回的,默认返回的就是那。因为函数里面是没有 return 的, 所以它自动返回的就是那 return, 它可以返回任意类型,比如 if, 我 们来返回 return, 我 们上面 return 返回的是数字,现在呢,我们不仅能返回数字,还能返回,这是字母串、列表、字典等来打印 print get inf, 也就是我们调用 get inf 这个函数 运行得到的就是直接打印的是 python, 所以 return 就是 把值送出去,你没有写 return 的 话, 它自动返回的就是 non。 调用函数的时候可以用变量,可以用变量接入返回的值,所以想让函数有输出,就必须学好 return。 return 就是 函数和外面沟通的桥梁, 下节课我们接着学函数返回值。

如果一个函数里有重复的计算逻辑,重复写代码是不是很容易?这个时候就要用到函数前套,也就是外层函数里面再前套一个内层函数。比如说我们计算圆的面积和周长,那这个里面就要涉及到拍 r 的 方,有一个派,二,拍 r 也有一个派,所以 要涉及到获取派的,那我们就得先得导入一个 max 模块,然后我们再定一个外层函数去计算圆的周长和面积, 这个外层函数里面的参数是一个半径。现在我们还需要去定义一个内层函数,需要派去乘以相应的半径的值,这是一个内层函数,这是传入的值。而我们要返回的是什么呢? 是需要派去乘以传入的值,所以我们用 return 我 们传入的 value 去乘以 mass 的 派,这是什么意思呢?这是我们导入的这个 mass 模块里面有派,它代表的就是派,派去乘以我们传入的值。这样的话我们就可以调用内层函数去计算圆的面积和周长了, 这是内层函数,我们是封装了 pi 去乘以我们传入的值,我们传入的值就是传入一个半径乘以它的平方 半径两个星号二代表的是平方,那就是 pi r 方了,这就是面积,周长就是二 pi r, 那 么我们传入的值就应该是二 r, 然后乘以 pi, 我 们得出 周长和面积以后,咱们返回周长和面积。等我们把这个整个前的函数设置好以后,我们现在来调用外层函数,而这个外层函数我们只需要 传入半径,那么就能得出它的面积和周长。传入半径,现在我们要得它的半径和周面积和周长,如果是这样的话,因为我们要保留两位小数,所以我们必须要把结果给它格式化, 这样子来写 f, 它代表就是格式化的意思,双引号里面我们就可以写上相应的内容。你这个变量我们记住必须要用大括号包起来,而后面代表的就是保留两位小数, 然后运行,那我们就得到了结果。下节课我们学函数变量作用域。

携修之一口气学完 python 基础每个程序员的第一步,打印 hello world, 使用 print 函数,括号,里面写需要输出的内容。 hello world 是 字母串,就用引号引起来。注意,这些标点符号必须是在英文输入法状态下写入, 否则会报错中文可以作为字母串用引号引起来,这样控制台就输出了中文。那么恭喜你 学会了 print 输出。接下来是输入,使用 input 函数获取用户输入的内容,括号里面写输入的提示词,输入的内容需要用一个容器去接收,于是有了变量。变量就是把数据存储起来的容器,比如这里输入了你好, 那么就是将你好存入到变量 data 中,在后续的代码就可以直接使用 data 来代替你好。 由于 data 是 一个变量,不是一个字母串,所以在 print 输出时不需要使用引号。有了变量之后,我们就可以进行运算。 比如我们输入一个正整数,将它乘以三后,输出步骤是先将计算的结果赋值给一个变量,再输出 result, 运行代码,输入数字一, 结果得到了三个一,一乘以三不是三吗?这是怎么回事呢?这是因为 impute 接收到的返回值是自负串儿类型,所以它会将一重复三次。如果想要它变成能够计算的数字,就需要进行类型转换, 这样再运行我们就得到了正确的结果。假设用户不按规定输入了字母或中文,这个时候进行数据类型转换就会报错。程序的 bug 就 出现了。 abc 怎么转数字我不知道,你不知道,程序更不知道,所以在转换之前就要进行条件控制。 if 如果的意思 is digit, 用于判断字母串是否只包含数字字母。冒号结尾下面写上当条件成立时需要执行的内容,这里要用户重新输入。注意,在 python 中,这个缩进很重要,用来表示代码的层次结构, 这样就能很直观地知道这是异符的子句。现在整个句子的意思是,如果 data 中只包含数字字母就重新输入,这不就和我们的预期搞反了吗?只要包含数字字母,应该就不需要重新输入, 于是加上一个 not, 就 好比一个硬币,本来反面朝上,我把它翻过来不就是正面了吗? 运行试一下,输入 a、 b、 c, 提示请重新输入,再输入一个数字十二乘以三,结果是三十六,现在就符合预期了。 这个时候恭喜你已经学会了 if 条件判断,理解这其中的逻辑,对于掌握编程的思维非常关键。接下来讲解循环。循环的意思是让一段代码能够重复运行。 第一种是 for 循环,作用是依次把列表中的每个元素迭代出来。例如执行这段代码,把 nums 列表中每个元素迭代给变量 x, 然后执行缩进快语句。运行结果是依次打印 nums 的 每个元素。那么我想要计算一到十的整数之合,怎么写呢? 可以使用一个 sum 变量来做累加。 range 函数,用于生成一个整数系列。 range 括号一逗号十一,就是生成包含一不包含十一的整数系列,也就是整数一到十。搭配 for 循环就可以实现累加。 第二种循环是 while 循环,只要条件满足就不断循环,条件不满足时就退出循环。使用 while 实现一到十的累加,就需要这样写, n 的 初始值是一,每次循环加一,当 n 不 小于十一的时候结束循环。我们拓展思维,优化一下这个代码, 如果用户第二次输入依旧错误,程序还是会报错,这样肯定不行。优化思路是利用循环,如果输入不正确就一直输,直到输入正确的数再进行计算。 这个就作为课后练习,大家尝试一下。接下来是列表,前面讲到 for in 的 时候,反复提到列表, 列表是一组数据,用逗号分开,每个数据都有对应的位置,称之为锁瘾。第一个锁瘾是零,第二个锁瘾是一,以此类推。在使用的时候,中括号里面写上锁瘾,就可以拿到指定的元素, 比如你想要拿到所引为二的元素,那就写 nums 二,这时恭喜你又学会了列表。最后是函数, python 之所以简洁,是因为函数,函数就是给实现某个功能的代码起一个名字,随叫随到。 比如现在定义了一个名为烤蛋糕的函数,只需要加入食材调料,就可以制作出美味蛋糕。这时你只需要写上函数名,括号里面写入参数,用一个变量 cake 去接收返回值,就可以得到美味蛋糕了。 掌握了以上这些, python 这座大厦的地基就打好了。如果还有什么没听懂或者想要学习的,欢迎在这里交流。

pie 从入门到精通第二阶段第一章四点二,嵌套函数学 python 我 只看糯米,哦糯米先讲一下什么是嵌套函数, 其实嵌套函数就是在一个函数的内部里面再定义一个函数,外面的叫外层函数,里面的叫做内层函数。那么为什么要用嵌套函数呢? 其实嵌套函数的作用就是让我们的代码更加简洁干净,让代码更加聚焦。那么嵌套函数的结构又是怎么样的呢?其实嵌套函数的结构和普通函数的结构是一样的,只不过是位置不同而已。我们来看一下下面嵌套函数的结构。 糯米这里标记一下,内层函数是从这里开始,然后到这里结束。糯米这里举一个生活中欠套函数的例子,便于进一步理解欠套函数。假设现在我们要写一个计算加班费的工具,我们的工资结构是由底薪和加班费组成的, 加班费的计算规则是,平时加班是每个小时三十元,周末加班是每个小时五十元。那么我们用嵌套函数写出来的代码就是下面这样子的。糯米,来解读一下下面的代码逻辑,我们从头开始解读一下,这个中文意思是计算工资, 然后括号里面的分别是三个参数,第一个参数是工作日加班时间的意思, 第三个参数 weekend hours 是 周末加班时间的意思,我们每个月的工资就是由底薪和加班费组成的, 那么我们就要对工作日的加班时间和周末的加班时间进行数学预算,这时候就要用内层函数来专门计算加班费了,这个是加班时间的意思,我们这里的内层函数直接不定义参数,这里直接使用外层函数的参数, 其实就是我们之前讲的行餐和食餐问题。接着下面就是对加班时间的数学运算了。先是把工作日加班时间,也就是 weekday hours 乘以三十, 那么这个就是工作日的加班费,然后把这个工作日的加班费复制给了这个变量。接着是周末的加班时间,也就是 weekend hours 乘以五十,那么这个就是周末的加班费。然后把这个周末的加班费复制给了这个变量,接着是使用 return 函数来退出循环, 那么这个工作日加班费加周末加班费就是我们这个月加班费的总和了。接着我们再调用这个内层函数,最后把它赋值给 over time 这个变量。接着是算总工资了,就是基本工资 base salary 加上加班费 over time, 然后用 return 函数结束外层循环,返回总工资 base salary 的 基本工资和加班费 over time。 最后再调用一下外层函数, 然后给括号里面的三个参数分别赋值。假设这里基本工资五千,工作日加班是十个小时,周末加班时间是四个小时,那么嵌套函数最后运算出来的结果,再赋值给 salary 这个变量,然后我们再打印一下这个月的工资是多少, 我们来运行一下程序,这里就可以看到运行出了本月的工资了。这个就是嵌套函数的实际运用了, 宝宝们自己可以实操一下,实操之后会加深自己对嵌套函数的理解。糯米来总结一下今天的知识点。 首先是嵌套函数的定义,嵌套函数就是定义在函数内部的函数,嵌套函数的作用,嵌套函数的作用就是让代码更加干净,更加聚焦。 嵌套函数的结构就是在外层函数里面用 def 再定义一个内层函数,并且在内部调用它。那么今天的课程到这也就结束了。下一期我们要讲解的是 b 包,关注糯米,持续带你掌握 python。

python 从入门到精通第二阶段第二章四点三 b 包函数学 python 我 只看糯米哦糯米先讲一下什么是 b 包,其实在 python 里面, b 包它本质上是一个函数, 但这个函数在定义的时候,它会记住外面函数的一些变量,即使外面的函数已经运行结束,这些变量也像被写进小本本里面,然后一直跟着这个 b 包函数。 那么 b 包的形成是需要满足三个条件的,第一个条件是要有一个函数,这个函数里面定义了变量。第二个条件是在这个函数里面要有一个内层函数,这个内层函数里面用到了外层函数的变量。 这里有一点我们要注意,就是这个外层函数的参数其实也是变量,本质上这个行餐是我们的局部变量,所以当我们看到内层函数使用了外层函数的参数的时候,也是相当于使用了外层函数的变量。 第三个条件是外层函数必须把内存函数返回出去,注意,这里是返回内层函数这个整体,而不是调用内层函数。 调用内层函数后面是要加括号的。调用内层函数其实是调用内层函数最终得到的一个值,这里返回的是这个内层函数的整体,其实最终返回的这个内层函数就是 b 包含数。那为什么要用 b 包含数呢? 其实使用 b 包函数主要有一个好处,就是避免用大局变量,如果我们不想要大局变量污染,又需要保存状态的话, b 包含数就是很好的选择。那么 b 包含数的结构又是怎么样的呢? 其实 b 包含数的代码结构非常固定,主要是三个步骤,其实就是我们上面讲的满足 b 包含数的代码结构。 第一步是要有一个外层函数,然后这个外层函数要么有变量,要么有参数,这两者是缺一不可, 但是这两者又是可以共同存在的。第二步是要有内层函数,内层函数里面要使用外层函数的参数或者变量。第三步就是返回内层函数,然后是调用外层函数,这里外层函数括号里面的就是实参, 最后就是 b 包函数,括号里面加上十餐,就等于最终的结果了。糯米这里来讲一个实际的小案例,糯米这里举一个超级简单的加减法的小案例,这样会简单易懂一点。 这里我们定义了一个外层函数的加法,糯米这里写成拼音了,然后里面是有一个参数 x, 接着是内层函数,内层函数,糯米这里定义为减法,这里是减法的拼音,然后参数是 y, 接着在内层函数里面我们要使用外层函数的参数或者变量,这里糯米写了个 x 加 y, 然后把这个 x 加 y 返回给了内层函数。第三步我们要返回这个内层函数,就是使用 return 的 函数返回这个减法函数, 其实返回的这个减法函数就是我们的 b 包函数,接着我们调用一下这个外层函数,然后里面的参数改成数字五,那么这个整体的嵌套函数执行完之后,会返回这个减法的函数,也就是 b 包函数。 我们把这个 b 包函数复制给了这个变量,那么现在这个 b 包函数其实就是五加 y, 接着我们把这个 b 包函数,也就是这个减法的参数 y 换成数字三,就最终得出我们的结果了。 最后我们打印一下这个结果,可以看到最终运行的就是数字八,这里我们可以看到,即使这个加法的外层函数执行完了,但他的变量 x 却被内层函数牢牢记住。 糯米这里做一下总结。首先是 b 包含数的定义, b 包含数是内部函数,要记住外层函数的变量。 b 包含数的作用, b 包含数的作用是让函数有记忆、保存状态,封装数据。 b 包含数的结构 b 包含数的第一步是要有外层函数,外层函数必须要有参数或者变量。第二步是内层函数必须要使用外层函数的变量或者参数。 第三步是要外层函数返回内层函数。那么今天的课程到这也就结束了,下一期我们要讲的是装饰器,关注糯米,持续带你掌握拍伞!

挑战一周,带你学完 python, 跟这个学完,你会发现你真的很牛!警告,本系列最新 python 教程应该是目前全网最系统易懂的小白专用课了,一口气带你学完 python 所有核心内容,存下吧,最新版错过就刷不到了! 新的一年, python 到底要怎样学习才正确有效?首先是基础部分,需要学习 python 软件安装、变量运算符、循环字母串元组。 第二阶段是进阶篇,会详细讲解各种 python 进阶知识函数、面向对象、正则表达式等知识,用最易懂的方式带你熟练使用 python, 为后面的路打下牢固的基础。 第三阶段,技能训练会从 python 爬虫、数据分析、人工智能、办公自动化等领域展开,让你可以把所学的知识进行变现,流进你的口袋。为了让大家轻松学习 python, 我们这套课程呢,会从语法入门篇、语法进阶篇、全站实战篇等三大方面来讲解。语法入门篇里面包含了 python 与 touch、 arm 的 安装以及环境配置学习、变量运算符、数据类型、控制、结构函数等。语法编程 语法进阶篇里面呢,我会详细讲解每一个进阶知识,从面向对象编程、异常处理、正则表达式等知识。全站实战篇会手把手教大家练习项目,比如爬取图片、视频、办公自动化、 数据分析、机器学习等。最后呢,会给大家一个小福利,有搭建开发环境资料包、 python 从零到一的学习计划表, 几十上百记,素材、书籍、课间等等,只要你能想到的素材我这里几乎都有,评论留言六六六即可全部免费打包带走!相信我,这套拍粉系统课程将会是全网最齐全最易懂的小白专用课,如果看到这对你有所帮助的话, 请给老师一个免费的一键三连吧,让更多想要学习拍粉的小伙伴看到这个视频。下一站上岸。 好,那接下来我们来学一下数据类型。之前我们在学到变量的时候,我们说这个变量它只是一个名字,它其实并没有类型,我们是把值复制给这个变量,而这个值它就是包含有类型, 无论是哪一种语言,其实它都会有它自己的一些数据类型。对于 python 来说,同样的,我们在学好这门语言,那它的前提一定是要把它的数据类型要把它学清楚,搞明白每一种数据类型,它包含有哪些特性啊,它的写法,这个都是我们接下来所要学习的重点。 ok, 那接下来我们来先在这个里面我们给他创建一个零四。好, 呃,这里的话,我们之前啊每一次是不是都得修改这个啊?代码的字体大小,这个比较麻烦啊,现在我告大家怎么样去统一修改,我们直接找到啊,这个左上角文件这里有一个设置啊,如果说你是英文版的话,这个地方应该叫 settings 啊,点开啊,然后在这个编辑器这个菜单的下边有一个字体, 这里默认的话他是十三,我们给他改一下,改成二十二。好,然后直接应用。哎,这个应用之后是不是这个字体就变了呀?好,我们来写一下数据 类型。 ok, 在 python 里面常见的数据类型包含以下几种,第一种是数值类型啊,这个数值类型里面又包含有整数啊,整数我们一般也叫做 int 型,还有浮点数,也就是我们经常说的小数 啊,浮点数叫 float, ok, 还有布尔类型啊,布尔类型就是布尔啊,最后还有一个是负数 啊,负数类型, ok, 好, 这个是数值类型。第二类是自互串 啊,字串一般也叫做 s, t、 r 类型啊,还有列表啊,列表也叫 list, 还有原组 tuple 类型啊, tuple 类型, ok, 还有什么?还有叫集合 set 类型啊,最后一种是叫字典 啊,叫 disk 类型, ok, 这里是主要的几种数据类型,而我们接下来所要学的就是数值类型, ok, 数值类型里面包含有整数、浮点、布尔以及负数。首先我们先来看一下整数 好,什么叫整数呢?这里我们把整数一般分为,比如说像我这里给它 负值为一个一千,那这个 number 一, 它就是一个整数啊,这个整数包含有正整数,还有零啊,我这里起一个 number 二, number 二叫零,零也是整数,还有一个是负整数啊,比如说负一啊,负一百,负一千,这些都叫整数。 那么有的同学可能会有疑问说,老师你说它是整数,它就是整数吗?我想知道对于 python 来讲,怎么样能够去验证它是不是整数?哎,这里其实在 python 里面,它有一个让我们去打印这个数据类型的一种方法,好,这个方法叫做 type 方法,我们来记一下,叫打印 数据类型的方法啊,其中有一个方法就叫做 type 方法 啊,或者叫 type 函数, ok, 这种写法所代表的就是在调用,这个叫 type 啊,叫 type 方法, ok, 怎么来用?好,现在比如说我将 number 一 放到这个 type 里面,那么它就会输出当前这个变量的数据类型。好,然后我们再通过 print 给它进行一个打印来保存好,我们来运行看一下。 哎,运行之后,大家会发现,此时运行出来这个类型 class 是 不是就是整数啊?或者说叫整数。好,同样的,我们把 number 二 和 number 三分别都给它输出一下来保存再来运行。哎,这三个是不是都是整数啊? ok, 好, 那除了整数以外,比如说我们现在还看一下能不能输出一个其他的数据类型。好,这里我再来上一个 number 四啊, number 四我给上来一个一点一。好,然后我们再把 number 四打印出来 来输出一下。欸,大家会发现此时 number 四它的类型是变成了 float 呀, float 就是 我们说的浮点型,也就是小数类型。 ok, 好, 这里是 type, 它能够去打印数据类型,另外还有一种方法也可以去判断数据类型。好,这里我们再来写一下,有一个叫 is instance, is instance 这样的一个方法。好,这个是用来判断数据类型。好,这个方法怎么来用呢?好,我们刚才说到 number 一, number 二, number 三它是不是都是整数的?那现在我就可以通过 is instance, 然后首先将当前的值给它传进来, number 一 传进来。好,第二个参数是传入我们要比较的数据类型,比如说我们想看一下它是不是一个 int 型呢?来,我们来打印出来 print 好,输出了之后啊,前面呢,我们先给他注视一下,保存来运行。哎,这里返回的是什么?这个叫 to 啊,这个 to 代表的就是为真啊,也就是它是一个整形,当然有 to, 那 么就有假,假就是 false。 ok, 好, 这里我们可以通过 is instance 来去判断当前的这个值是否是某一个数据类型啊,比如说,我们现在还可以再来验证一下,比如说这个 num 四,对吧? num 四它是一个小数,哎,如果说我这里用 float 来试的话,输出,哎,这个是不是也为 to 啊?但是这里 会有一个比较特殊的情况啊,这里我们稍微讲一点超纲的内容啊,大家不要害怕,我们现在来验证一个东西,比如说,我,现在啊,我们再来创建一个,好,这里,我们来在这个地方我们来定一个变量,叫布尔一啊,然后它的值为 two 啊,然后它的值为 two。 好, 现在如果说我用 is instance 来去判断这个布尔一,它是否为一个布尔类型,好,我们先来输出一下 print, 好,前面呢,我们先注视掉来保存运行,哎,这里输出 q 没有问题,但是你们注意看,我在下面我再来将这个 bar e 和这个 int 型做判断。哎,你们来猜一下这个结果。 好,先来运行看结果。哎,结果也是去,好,那看到这里有的同学说说,老师,这不对啊,这个布尔类型他不应该就是布尔的类型吗?啊,那为什么跟 int 类型相比,他的结果也是去呢?啊,实际上这里就告诉我们 instance 啊,这个 instance 他 所比较,他比较的过程中, 啊,在注意啊,这里需要注意,在比较的过程中,如果当前类型属于某类型 的子类啊,某类型的子类,那么这种情况下也会返回出, ok, 很 明显,我们这里其实验证了一个概念,叫做布尔类型,它其实这个类型是属于 int 型整形的一个子类,所以说当它与 int 型进行比较的时候,其实它也是一个处啊,这里其实也能够去解释,比如说后面我们要讲的啊,你像这个条件判断, 我们条件判断再去判断,比如说我们在判断这个 number 一, 哎,我这样写条件判断,判断 number 一, 然后我再去下面进行一个输出,输出什么呢?哈哈哈, 来保存,我们来看一下这个,哈哈,能够输出代表什么?代表是 number 一, 是不是为真呢?啊?也能够去解释这一个现象,所以说后面我们会讲到啊,这个子类和父类之间的关系,以及一个影视转换之间的一个关系。好,这里大家先提前了解一下就行。好,这个就是我们的一个整形。 好,那我们接下来继续来看一下这个浮点型啊,也叫 float, 小 数类型。好,这里我们还是一样啊,先来创建一个啊,这里我们给它新建啊,新建一个零五。好,这个叫浮点 啊,浮点型 float, ok。 好, 什么是浮点型呢?简单来说啊,比如说现在我们创建一个叫 name 一 啊, name 一, 零点一,这就是一个非常典型的浮点型啊,小数嘛。好,然后我们可以来输出一下,看一下它的一个数据类型,通过 type 啊,然后 name 一 好保存来运行一下。哎,运行之后,这里是不是看到 class 就是 float 呀? 好,这种是属于最常见的,当然。哎,有的同学可能还会有疑问,疑问什么呢?比如说我这里有一个一,对吧,我给他加上一点零,那么他是不是小数类型?之前我们说到一肯定是一个 int 型整形,那么一点零是不是整形呢?好,来我们同样的来输出一下, 好, number 保存。哎,同样的是不是他也是一个浮点型的?也就说现在我们可以得出结论,只要有小数点,无论他小数点有没有值,对吧?比如说这个是零,零也是一个值,对不对?所以说他都是属于浮点类型。 ok, 那 接下来我们再来看一下 这个小数涉及到的计算啊,它和整数是有点不一样的,我们如果说是一个整数,比如说 number 三啊,等于一, number 四等于一个二,那这里我们去打印 number 三 加上 number 四,好输出,这里少了一个括号,好输出。那这里的结果是不是一个整形呢?啊?如果说输出它的结果的一个值的话, 这里是不是就三呢?哎,没有问题,但如果说是小数,比如说我这里我把它改成零点二啊,零点一加上 零点二,那么你们再来看一下这个结果保存来运行。哎,此时你会发现这里输出了什么?零点三,零零零零零啊,好多个零,然后是四,对吧?它的结果并不是零点三。 可能同学们会有疑问说,现在电脑这么发达了,难道连这么简单的零点一加零点二都算不清楚吗?其实并不是这样的,这个其实涉及到啊这个编码以及计算机原理相关的一些知识啊,也就说后面大家就记住, 无论是什么语言,其实就目前来说,只要涉及到小数位的计算,它都是存在有精度的问题。你像这个 javascript 也是存在有这种双精度的问题啊,对于 python 来说,这个问题也是存在, 那这一类问题怎么来去解决呢?比如说我,现在我就是想计算得出来零点三怎么解决,哎,其实也有办法,这里我们可以引入它的一个库啊,通过 from from 引入,有一个叫 decimal 啊,然后 import 啊,这里我们需要给它起个名字,就叫做 decimal, 大 写的 from f o r o m。 ok, 好, 引入进来之后,这里是属于啊,这个 decimal, 这个库是属于 python 的 一个核心库啊,直接引入,引入之后,然后我们相当于是给他起了个名字,好,那这里怎么来使用呢?我们现在要解决零点一加零点二不等于零点三的问题,那首先我们可以创建, 比如说这里啊,我们把这一段代码给它拿下来啊,给它拿下来,好,这个零点一,我们通过 decimal 啊 decimal 调用这个方法,然后将零点一给它传进去,注意传进去的时候要把它改成一个字母串。好,然后同样的零点二也是一样啊,给它写进来。好,然后这里我们再让这个零点三啊,再让这个 number 三加上 number 四。好,我们来看一下,保存, 哎,此时他是不是就能够输出零点三这个结果来,哎,所以说对于精度的问题的确是存在问题,但是也有办法去解决。 ok, 好, 然后再往下,对于小数来说,我们还可以使用有一个叫科学计数法啊,来表示我们的浮点数 啊,怎么来写呢?比如说现在有一个叫 number 一 啊,等于三点一四啊,一七,这里一七代表的就是十的七次方,相当于就是三点一四啊,乘以十的七次方,好,现在我们来看一下啊,这个改成叫 number 五吧啊,然后再来打印 print number 来看一下结果, 哎,是不是三点一四乘以十的七次方啊?个十百千万,十万百万千万, ok, 没有问题,对不对?好,这个就是关于我们的浮点数。 好,那接下来我们再来看一下这个布尔类型和复数类型。首先啊,这个布尔类型,布尔类型它只有两个指啊,一个为 to, 一个为 false, 分 别对应的就是真和假。好,这里我们来写一下。好,还是一样的啊,新建一个啊,零六, 好,这里我们来看一个布尔型啊,叫布尔, ok, 刚才我们说到布尔类型只有两个字,好,这里我们起个变量啊,布尔一为 为 to, 对 吧?哎,还有一个是不二,不二为 false 啊,他只有这两种值,一般这个布尔真和假用的最多的,就是我们在用去判断,哎,比如说我们判断某一个值它是否相等,或者说某一个条件是否满足的时候,我们会使用到布尔,所以说这里啊,会与另外的一个计算符啊来做表示。 比如说现在我们举个例子啊,现在有一个 number 一 啊,为一,对吧。好,然后我们去打印一下,比如说我们判断这个 number 一 啊,是否等于这个一啊,你说这个变量是否等于这个一,很明显是相等的,我们可以来输出啊,重新运行一下。 哎,这里输出的结果是不是为处啊?哎,为什么?因为这个变量所代表的值就是一,而这里两个等号它就是比较这两个部分,左右两个部分啊,它的值是否相等,很明显,一是等于一,所以说会返回处啊。当然如果说我们再进一步研究一下,比如说现在我们再来看一个 来 print, 我 们之前说到过这个布尔类型,它是属于 int 型的一个子类,对吧?那我现在我把这个布尔一和这里的 number 进行比较,你说它的结果是什么?来,我们再来看一下。 哎,结果我们发现这个结果是不是也为处啊?可能看到这里,哎,有的同学会比较疑惑,说这个布尔一他的值不是为处吗?这个那么一,他的值是为一啊,为什么这两个结果他能相比较相等?哎,这里我们刚才说到过一个概念。好,我们来写一下这个两个等号,他其实比较的是什么呢? 啊?比较的是左右两边啊,左右两边对向的 值是否相等?好,那这里布尔一它是一个布尔类型,而 number 一 它是一个 int 型,这两个类型是不一样的,那它们为什么值相等?所以说这里会涉及到同一种,因为它们都是属于数值类型,对吧?同一种类型里面,它是可以进行一个转换的,比如说我这个布尔一,我将它转为 int 型,你们来看一下这个结果。好,我们再来说出一下 print 啊,通过 int 这样的一个方法。注意啊,这个 int 它是一个方法,我们可以将布尔 e 给它传进来,传进来之后来看一下它输出什么。 哎,你们会发现这个布尔为 true 的 这个值进行转化之后,转为 int 型,它的结果是不是就是 e 啊?哎,会输出 e, 所以 说,那这里 e 和 e 是 不是就相等了?好,那讲到这里,那不得不看一下,那我们再来输出一下 print int, 然后将不二给它传进来,来,我们来看一下它的结果是什么来运行,哎,我们发现这个结果是不是就是零啊?哎,所以说这个 to 和 false 对 应的数值也就是一和零。哎,所以说我们在去比较的时候,我们可以把这个 to 和一进行比较,同样的能够把零和 false 进行一个比较。 ok, 好, 接下来我们再来看啊,下面的这个 complex 啊,这个是负数型,好,我们把这个给它拿过来。 好,这个负数型啊, python 中的负数主要是应用于啊这个数学计算啊,主要 是用于数学计算啊,一般是用于这个高等的数学计算或者说工程领域啊。但是复数这个数据类型的话,在我们实际开发过程中其实用的是比较少啊,所以说作为 了解就行啊,作为了解就行。好,它的一个基本写法,基本写法我们这里用字母表示,就是 a 加 b j 啊,其中啊,这里的 a 代表的是 啊,代表的是十步, b 代表是虚步啊, j 是 虚数单位 啊,是虚数单位。所以说如果说我们想创建一个啊,这个复数的话,我们可以啊,这里比如说我们创建一个叫 number 啊,然后写上一个叫三加四 j 啊,三就是实部,四是虚部, j 是 虚数单位啊,这个是一个固定写法。 ok, 这里复数它其实也可以进行一个计算。哎,比如说我们这里来上一个 number 三是一加二 j 啊,一加二结,好,现在我去将 number 二和 number 三进行一个相加,我们来看一下有没有重名。 ok, 好, 没有,我们直接输出 print 啊,输出之后来我们来看一下它的一个结果,这里是不是就是四加六结呀?四加六结什么意思呢?我们这里它写的是十部与十部相加,也就前面这里的三会加上这个一啊,然后后边是虚部 与虚部相加,一会与二进行一个相加啊,然后带上这个虚部单位,哎,所以说最终是不是就得出来一个四加啊?三三加一,这个是四加二,写错了,四加二是不就是,呃,四加六结呀,哎,就是这样得出来的。 ok, 好,那接下来我们来学一下支付串,在 python 中啊,对于支付串的定义啊,他是这样讲的,他说用引号扩起来的都叫支付串,其中引号包含有单引号啊,也有双引号,另外我们也可以通过反斜杠来去转移一些特殊制符。好,那接下来我们来写一下。 好,这里我们还是新建一个叫零七,我们来写一下支付串。 ok, 那 最简单的字母串,我们是可以这样来写,先声明一个变量,哎,然后我们通过双引号,哎,比如说这个叫 alan, 那 么这整体双引号,整个啊所包含的这一段内容就叫做一个字母串,当然我们刚才说到他也可以通过,是不是单引号啊?哎,比如说这样写他也是一个字母串啊,还有一种方式,我们能够 啊通过三个引号,当然这里的三个引号可以是双引号啊,也可以是单引号啊,然后我们在这里面写上 alan, 这样也是可以。好,然后我们来输出一下 print 啊,输出一下 name 一, 好,然后再把 name 二和 name 三都给它输出一下,来保存来运行一下。 哎,是不是都能够输出了呢?但是最后一种大家可以看一下最后一个,这个三个引号,之前我们在讲到注四的时候,哎,我们说三个引号是不是可以啊?代表多行注四。同样的,这里的三个引号如果说直接复制给变量,那么它所代表的 整体意思就是一个乘法,并且这里它和注四一样,它是可以保留格式的。比如说我这里你们可以看到我这里一旦换行,那么前面他是不是就多了一个换行的部分呢?哎,如果说我不要换行,我这样写来我们再来运行, 哎,他是不是换行就没有了呀?所以说三个引号他会保留我们的一个代码的格式。好,这是关于字母串基本的一个声明,那第二个就是字母串啊,字母串中的转义字母 啊,转义字母, ok, 什么叫转义字母呢?好,我们举个简单的例子啊,比如说现在 我们声明一个变量叫内幕式,然后我这里我有一个叫艾伦啊,艾伦今年 十八岁,对吧?当然艾伦今年肯定不止十八岁,所以说这个十八我现在想要用引号给他引起来,比如说这里要用双引号给他引起来,那我这里能直接写上双引号吗?啊?能直接这样写吗?哎,很明显这样写是不行的,如果说我现在运行,你们可以来看一下 啊,直接输出 name 四,好,前面的内容我先给他注死掉来运行,哎,这里是不是会报错呀?哎,这样写肯定是不行啊,因为这里他会把前面的作为一个字母串,后面的作为一个字母串啊,然后中间又是一个数值类型,哎,所以说这样的写法是有问题的,那怎么样来写呢? 哎,我们这里就需要利用到转移制服,因为在我们的制服串中,引号他是有一个特殊含义的,所以说我们要把它正常显示出来,需要给他进行一个转移,转移使用 反斜杠,哎,比如说这里我给他加上一个反斜杠,哎,你们会发现他这里的颜色是不是就变了呀?哎,这个地方代表的就是当前这个引号,他不是字母串中的引号,而是被转移。好,我们再来运行一下, 哎,此时这个十八是不是就能够被引起来正常显示啊?哎,这个就叫转移制服。 ok, 那 转移制服其实除了我们刚才说到的反斜杠啊,去转移这个双引号以外,他其实下面的这几种他都可以啊,这里我们可以来写下来试一下。 好,首先第一个是啊,是两个斜杠,两个斜杠代表的含义。好,我们这里先给它来上一个注色,这里两个斜杠代表什么呢?比如说现在来我们这里来上一个 s t r 一, 好,然后我们输出一个 hello word, hello world, 然后在中间我想通过一个反斜杠,啊,想让它能够啊作为一个分割线。好,但是如果说我这里直接输出的话,来,我们还是一样来看一下直接输出行不行? 哎,直接输出他会报错,对吧?反斜杠也是在啊字不串中代表特殊含义,所以我们一样需要给他转译,翻译的话再给他来上一个反斜杠来走,哎,这里是不是就有了有了效果呀? ok, 好, 然后再来看一下,然后单引号啊,单引号其实和双引号是一样的。好,这里我们一样的来给他写一下 啊。单引号,好,然后它它所代表的,比如说现在我们来上一个 s t r 二,好,然后还是叫今年艾伦十八岁 啊,这里我用单引号来去写,那这里如果说我这里要使用单引号的话,来,你们来看一下。哎,是不是就可以啊?通过转移制服啊,这样给它改写一下呀?好,然后我们再把 s t r 二输出一下 来走,哎,是不是单引号也可以啊?好,然后再往下,再往下还有什么呢?还有一个叫我们来看一下双引号,刚才我们说了啊,然后我们再说一下这个在行尾作为连续支付一个反斜杠,好,这个是什么意思?来我们来看一下。 好,比如说我现在还是有一个 s t r 三叫 hello 啊,然后现在我想让它换行啊,我想让 hello 这个位置,接下来想让它换行啊,换行 来换行的话,我们这里用三个引号,三个引号啊,先来上一个 hello, 好, 之前我们如果说直接在这里写上 word 的 话,之前我们输出过啊,这里打印 s t 二三,正常情况下 hello 和 word, 你 们可以来看一下。 来输出 hello 和 word, 它是不是被换行了呀?那如果说我现在我想让它不换行,即使我这样写,我想让它不换行,那么在后面可以给它加上一个啊,这个行尾做一个续航符,这里代表的就是续航符的意思,它会把 hello 和 word 连在一起来 看一下,哎,是不是他是一个连接符啊,代表就是第一行,我这里还没有写完啊,然后接下来把下面内容给他连在一起,这样的话我们就适合在这种比较长的字母串里面,比如说我这一行啊,写了非常非常长,但是我不想让代码啊有这么长,然后我就可以在这里给上一个啊,这个续航符,然后直接换行来,写好,然后再往下。 啊,还有什么?我们来看一下。还有一个叫退格,好,这个退格我们拿过来反斜杠 b, ok, 退格是什么意思呢?好,我们还是一样来上一个 s t r 四,好,这个叫 hello hello 啊,然后来上一个反斜杠 b word, 好,我们这里给它打印出来 s t r 四,好,来看一下。这个效果,一看大家都能看出来,这里,哎,我加了退格符之后,你们可以看一下,之前叫 hello world, 现在那个 o 是 不是没有了呀?哎,它就会往前进一位,把前面的这个字符给它顶掉啊,这个就是退格符,好,我们再往下, 再往下,有一个叫换行啊,这个换行其实很好理解啊,杠 n 换行什么意思呢?好,来, s t 二五,这里,如果说我现在我把它写成一行,但是我又想让 hello 和 word 进行一个换行,那这里怎么实现呢?哎,直接通过一个换行符。好,我们来看一下, 哎,这样的话是不是也可以实现换行啊?这个和我们之前啊这个三个引号直接换行,这个效果是不是一样的呀?但这种方式写起来是不是比较简洁啊?好,来,我们再往下看。 好,再往下,还有什么来看一下。还有一个叫横向制表符。 ok, 来,制表符是什么意思呢?啊?我们这里还是拿 hello world 来举例。 好,这里把它改成制表符反斜杠 t 啊, print 打印 s t r 六来输出。哎,大家会发现 hello 和 word 中间是不是多了一个空格啊?注意啊,这个不是空格,你看啊,当我鼠标在这里光标聚焦的时候,它这整体 是一个空白,而这个空白肯定比一般的空格要大一些。这个其实在我们的键盘中你也可以打出来,是通过什么?通过 tab 键,比如说这里,哎,我来上个 tab 键是不是有一个大的一个空格呀?哎,这个就是制表符的意思,好,来,再往下最后一个叫回到行首啊,这个回到行首是什么意思呢?好,我们再来看一下, 好,来,来,上一个 s t 二七。好,比如说这里我们叫 hi python 啊, hi python, ok, 好, 我这里在中间给他来上一个制表符,制表符的话是反斜杠。二,好,然后我们把这个制表符给他夹在这里,好,夹在这里之后,我们还是一样先输出,看一下效果 来打印。哎,你们会发现我这里字不算,明明是 high python, 但是现在是只有了 python, 所以 说从字面上来看,制表符是不是后面的内容把前面内容替换了呀?啊,但是其实是不是这样嘞?哎,不是这样的,为什么嘞?比如说现在我在这个 high 前面加上,啊,三 四五六七啊,加上三四五六七,好,然后我再来输出,哎,这里发现还是输出的拍准,但是这个地方啊,存在一个显示上的问题,你们可以来看一下。我为什么说存在显示上的问题?比如说现在我这样写来,我把这整个的 print, 现在我通过命令行 cmd。 之前我们在讲到 python 代码的时候,我们说到 python 代码是不是有几种方式啊?比如说我们现在我们在这个命令行里面,哎,直接输入这一段内容,你们来看一下, 哎,这里输出的是不是叫 python 七啊?哎,为什么?我们根据规律来看这里,首先我们前面的是 high 三四五六七,对吧?这里我之所以写三四五六七,第三个字母,第四个字母,第五个字母三道顺序写的,而 python 总共有一二三四五六这个单词,有六个字母, 所以它这里是不是把前面的六个字母通过 python 给它替换掉了呀?哎,第七个字母没有替换的,所以说它最终是不是展示出来了一个 python 七呀? 哎,这个回到行首的意思就代表的是后面的字母串,它会把前面的这个内容是不是给它替换掉了,哎,如果说有超出的部分,那么就保留,如果说小于啊,我们后面制表符后面的这个字母串,那么它就整体的覆盖,对不对?是不是就这个意思? ok, 好, 这个就是关于我们的转译制符, ok, 那 接下来我们继续往后看,下边还有一个叫 intend 机子啊,什么是 intend 机子呢?在拍摄里面他这样说,说每一个字不串,如果说他没有空格或者说特殊符号,默认就会开启 intend 机子共享内存啊,这里靠引用技术决定是否销毁 相同的字串,默认只保留一份,当创建一个新的字串时,它会先检查内存里有没有这个字串,哎,如果说有,那么就不会再创建新的啊。这一句话什么意思?其实简单来说啊,我们通过下面这个代码可以来看一下, 这里我们来写一下,这个叫啊 int 值 intend 机制, ok, 什么意思呢?比如说现在我有一个 st 二八啊,它是 yes, ok, 好, 我们给它 copy 一 份,还有一个是 st 二九, 好,有这样的两个值不算。同学们,你们想一下,之前我们在讲到我们的每一个值,其实在内存空间里面,它都会开辟一个内存空间,而然后由这个变量去指向内存空间里面的这个值,所以说我们能够通过变量是不是访问到它呀?好,那这里 这两个都叫 yes, 那 你说它在内存空间里面同样的这个值,它有必要去创建两份吗?哎,是不是没有必要啊?所以说这种情况下,如果说它没有特殊制服,它长一样,它又没有一些特殊符号,那么这种情况下就会开启 int 机制,会共享缓存,在内存里面,它其实是共享的同样的一个地址, 我们来试一下,通过 id 来去打印一下它在内存中它的一个 id 来看一下 输出,哎,这两个 id 它是不是一样的呀?对不对?说明它们是共享内存,哎,如果说我把它改一下,比如说值不一样来输出,哎,这两个 id 是 不是就是不共享啊?同一个内存呢?对不对?哎,就是这样一回事。 好,那接下来我们来看一下什么叫格式化输出啊?顾名思义,格式化输出就是按照一定的格式来去输入相应的内容。 在拍摄里面,格式化输出主要分为三种,第一个叫百分号格式化站位符啊,这里面大家可以看一下下面的这些符号是不都是以百分号开头的呀?啊?百分号站位符,第二类是有一个叫 s t r 点 formate 方法啊,第三个是 x 句方法,这里面无论是哪一种,它所依赖的其实就是靠站位符来去实现的。 什么是占位符?顾名思义啊,就是占据位置的一个符号,这就好比啊,你接下来想要去看电影,那你肯定是先要在网上买票,对吧?你这个票买了之后,那么当前电影院的这个位置是不就被你占住了,变成不可购买的状态呀, 对不对?哎,也就说这个位置所代表的就是你本人,而站位符也是一样的,我们这里你像百分号站位符,那这里面这个百分号 s 所代表的就是一个字不串,我们后面可以传入一个字不串来去替换掉这个站位符里面的内容啊,它是一个占据位置这样的一个效果。 好,那接下来我们来写一下它的代码啊,这里我们还是先新建一个零八, ok, 好, 这个叫格式化,格式化输出。好,我们来说一下。呃,第一种是百分号 啊,百分号占位符输出, ok, 这里百分号占位符在我们的文档里面啊,总共有以下几种,其中用的最多的一个是百分号 s, 代表的是周串啊,还有一个是百分号 d, 代表的是实进制的整数。好,这里我们可以来举个例子啊, 比如说现在我有个变量叫 name 啊,值为 alice 啊,然后再来上一个 age, 年龄是二十五,好,现在我想输出一段内容,这里我们来上一个 print, 先给他定一个模板啊,这个模板里面 name, 为什么?为啊?这里我们就需要通过 百分号 s 赞助他,哎,然后再来上一个 age 年龄,通过百分号 d 赞助这个位置。好,那我们这个模板就已经写好了,接下来我们需要把 name 和 age 给它传入进去。好,这里传入。首先我们要通过一个百分号 啊,将模板和接下来的参数给它分隔开。好,然后我们再分别把这个参数 name 和 age 给它传入。好,写好之后来我们来输出看一下。 欸, name, alice, age, 二十五是不是就输出出来了?好,接下来我们来换一下,假设我们把这个 age 和这个 name 换个位置,我们来试一下,看能不能输出 来,我们把这个内幕放后边来输出。哎,这里是不是会报错呀?报的是什么?报的是我现在 a 级传入它其实应该是和它是对应上的,但是百分号 s 它是一个周串,对不对?而这里我们 a 级是一个 int 型,所以说这个类型对不上它也会报错。好,这个我们还是换回来。 ok, 好, 接下来我们再来看这里的百分号 s 和百分号 d, 除了我们这种写法以外,它其实还可以传入一些啊,传入一些其他的内容。比如说,我再来举个例子,现在还是我们想要输出一个啊,输出一个什么呢?比如说我想要输出一个 啊,输出一个叫 he 这样的一个字母。好,首先百分号 s 啊,然后输出一个 he, 这样写, 哎,我是能把 high 输出的,但是在这个百分号 s s 的 前面,我可以给他写上,比如说我规定当前的制服他有十个啊,他有十个,那现在我再来输出, 哎,你们会发现,此时我这个嗨是不是跑到后边来了?为什么呢?因为他前面还有八个空白占住了这个位置,注意啊,这里的十代表的是总共有十个字母,而其中的嗨只占据了两个,那剩下他前面是不是还有八个字母啊?哎,是这个意思,好,如果说我现在我再来定 啊,我再来定一个数字啊,定一个数字,这个数字 我也可以给他定义,比如说啊,这个数字总共有五个,哎,然后我传入,传入的时候我只传入一二三四,那这里是不是还会多留出来一个空格呀?来看一下运行, 哎,是不是一二三四输出了,但是前面还留有一个空白,如果说我想要用零给他补足,那么我可以在前面给他加上一个零,哎,是不是输出零一二三四啊? 注意啊,这里虽然说能够补足,但是它其实只能够啊,去补足一个零啊,就说正常情况号百分号,它的这个占位符,我们是不能够去给它随意设置补足的内容的。那如果说想要解决这个问题,哎,我们就需要使用第二种,第二种叫做 s t r for me 的 方法, ok, 来,我们来看一下 点 format 啊,点 format 方法, ok, 好, 还是来解决我们刚才说的这个问题,现在有十个字母,然后我想把这个 hi 先给它输出出来,那用 format 怎么来实现呢?好,我们先把前面的先给它注死掉, 那我可以这样来写啊, print 好,这里我们先定一个模板来看一下。这个模板的话,它其实是一个大括号啊,先是一个大括号,然后有一个冒号,这个冒号有一个大于号,大于号代表的是向右对齐啊,然后几个字母,十个字母啊,然后后面通过调用这个封闭的方法 传入啊,需要展示的内容啊,是这样的一个结构,好,我们来写一下啊,先来看一个大括号,冒号,向右对齐,总共十个字母啊,然后通过调用 for me 的 方法将我们需要展示的内容给它传递进来。好,来,输出,看一下是不是和他长一样啊?来,走, 哎,是不是也能够输出这样的内容啊? ok, 好, 它所代表的意思是向右对齐 啊,又对齐,然后我们可以指定,比如说我这个 high 前面我想用用 a 给它把剩下的内容给它补足,那这里我们在这个大于号和这个冒号之间啊,添加上我们想要补足的内容。来,走, 哎,这里的话 a 是 不是补足了我们前面的八个位置啊?哎,看到没,所以说这里叫右对齐,用指定符号填充。 ok, 好, 那除了右对齐以外,我们还可以让它左对齐 啊,左对齐,来,我们来试一下。这里左对齐,我们只需要把这个大于号变成小于号啊,变成小于号,让它指向左边。来,我们来试一下。哎,是不是刚好相反呢啊,叫左对齐好。还有一个叫居中对齐 啊,居中对齐好,居中对齐怎么来写啊?我们只需要把这个符号给他替换为一个尖号,这个尖尖是这样输出的。 ok, 来试一下。 哎,此时这个 high 是 不是跑到中间位置显示了呀?哎,这个就是 formate 方法,可以看出来啊, formate 相对于百分号来说的话,它的这个输出方式是不是变得更加简洁了呀?哎,同样的,它还可以去设置它的位置。 ok, 好, 我们再往下,再往下看最后一种, 最后一种叫 s 菌啊, s 菌是 python 三点六加代于,代表的是三点六版本以上它都是适用的,我们之前在 安装拍摄环境的时候,之前我们不是有一个版本号吗?对吧?哎,这里三点六以上的版本他都是适用的,而且这种是最新的,也是拍摄最推荐的一种格式化模板。好,他的一个写法,大家来看一下,其实也是一样,我们在输出的时候先去设置一个模板,这里 这个乘法里面所代表的,我们可以理解为就是一个模板的内容,然后前面它用一个 f 来表示我们这个啊内容,它就是 f 指令的这种输出方式,你看我们之前写的是还需要点 for me 对 不对?但这里连 for me 都不用了,直接一个 f 啊,然后跟上后面的一个模板,它就可以来去做一个显示。好,那我们来试一下。 好,我们先写一下这种叫 f 指令啊, f 指令的这种方式啊,这个也是最推荐的 啊,最推荐的, ok, 好, 怎么来实现呢?比如说我们还是把这个 high 先输出一下,第一步我们先可以定一个啊,定一个正算叫做好,然后向右对齐 啊,向右对齐,那么这里我们怎么来写?先来上一个 print, 先把这个模板定义出来啊,模板的话来我们这里 s t r 冒号大于啊,大于就是指向右边对吧?指向右边右对齐吗?十个字母。好,然后前面我们再把这个 f 给它加上,那这样的话,此时我来输出来看一下。 哎,这个 high 的 结果是不是被输出出来了呀?如果说我现在我想要用其他的东西给它补足,那这里,哎,比如说我想用 a 给它补足,那么直接把 a 写进来,哎,是不是能够得到一样的效果啊?好,然后同样的左对齐,我们都写一下左对齐, 哎,也是一样的,让他指向左边来走。 ok, 好, 再来看一下居中对齐 啊,居中对齐,好,同样的,这个是一个尖的符号 啊,尖的符号在我电脑上删 shift 六啊,看你们电脑上那个尖啊,找到这个符号,好,然后来输出一下,哎,是不是也能够输出啊?同样的,我们想事先最上面,比如说输出啊,这样的一段内容啊,输出这样的一段内容,那这个内容我们怎么来写?来试一下。首先内 alice age 二十五,好,然后我们来 print 输出一下,通过 f 群的方式,先来定一个模板,比如说我叫,啊,我叫,这里直接用一个括号,然后将当前的变量啊,先给它传进来,今年 啊,多少岁了啊?多少岁? ok, 好, 然后前面再来上一个 f 啊,然后把它改写为 f 的 方式,好,来试一下输出, 哎,我叫 alice, 今年二十五岁,对不对?哎,所以说格式化模板我们再去啊,尤其是输出一些指定内容的时候,可以说是非常方便的。这里面三种方式最常用的其实就是最后一种,大家知道这样的一个写法就行。

我们直接 round 一下 round, 比如说呢,直接输入一个三回车,圆的半径是三厘米,呃,面积是二十八点七,那能不能这个地方改成圆的周长是多少?面积是多少?圆的周长也可以做,很简单,加一个, 然后呢,加上一个圆的周周,周长长, 有的周长是一样的,直接给他复制就可以了, 我们现在可以给他稍微改一下,因为他每一个都这样,就不可不好看了。我们可以给他改成什么呢?很简单,然后给他改成不要不要集中了,全都在, 全都占左边。 ok, 然后呢,这个就是圆的周长,我们加,再加一个逗号,圆的周长的公式我们得梳理一下,圆中周长的是 d pi 什么意思?直径的 pi 呗,二 pi 二 pi, 二 加二乘 pi, 我们给他公式标准,不是二派,嗯?直接直径乘以派吗? 我们比如说半径是三,那直径就是三啊,半径就是三,直径是二十八点二七,周长是十二点四二他就全在左边。我们来算一下, 三加三等于六六的派位,就是十二点四三到十八吗? ok, 然后呢,这边周长明显不对,知道为什么刚才不对吗?因为二加二乘派,他会先算二乘派,再加一个二。所以有一点问题,我们得先做一个 d, 也就是,呃,圆的圆的直径,直径就是二加二, 直接输入二二就可以了,不可以报错的二加二,然后这边给他输入一个 d 乘派就可以了。 我们来这边看一下,这边应该没有问题啊, ctrl alt 加 l, 先规整一下 round, 我 们得先输一个半径,半径比如说是输小一点,好好验变半径,比如说是一吧,那半径是一,那么面积就是三点一,四周长就是六点二八,因为是二二 r 乘派,二派 r 没有问题。对, 大家有没有发现这一串代码太长了,完全看不全。 print 有 一个功能,可以把代码给换行敲回车,这样子就可以直接把代码换行 run 还是可以的,比如输入三,还是没有任何的问题。

如何来制作圆的半径呢?有面积,首先得做一个 pad 变量, pad 是 先点一四一五九,打开保留之后, 然后 r 上自己输入,然后就是圆的半径,面积和这个做出来的效果就是这边这边有三个这个,这边有三个星星,一共有一二三四五六七八九十十个占位符, 这边也是十个,每边都是有十个站位符,而且要保留小数点后面的两位,这该如何制作?首先制作一个 pad 变量, pad 等于多少呢?三点一四一五九, r 让自己输, r 让用户自己输入,所以之间因为 input 输入的是字母串类型,所以要给它转为符点型,也就可以。呃,数据识别的,所以加个 int, 然后就是 print, print 打印出来圆的半径, 圆的半径是什么呢?这边就得加一个大括号了,表示引用加个冒号 要用英文情况下的冒号。之后呢,这边是星星,所以按个星星,然后因为它是两边平均分布,所以用一个 shift 键,按上键盘上的六打印这个符号, 这个符号的作用是什么?这个符号的作用比如说六个有剩下六个占位符,那两边三个,剩下五个,前面两个,后面三个,然后一共有十个到十个这个,然后带一个点,因为要保留两位小数二 f, 这一个就做好了,然后就是它就是面积,面积是面积一样, 首先还是一个冒号,因为他也是这个,所以也是新号,一个梗号十个,他也是保留小数点后的两位,所以也是二 f, 那 你直接复制吧,可以。 然后最后就是再加一个 f o r m a t。 总结逗号, 然后这边里面输什么呢?输入一个二逗号,二就是半径,然后就是 p a r pi, pi 乘多少乘以二,再乘以二,因为二的二次方 pi 就是 面积, 所以呢,刚开始先输入圆的面,半径是,然后面积是 pi 的 二次方,二的二次方 pi, 然后我要把,呃,要把这个给它归整一下, ctrl alt 加 l, ctrl alt 加 l, ok, 我 们来撞一下这里输入,比如。