粉丝1386获赞1.4万

一分钟学 python, 接下来我们来介绍一下 python 中非常实用的一个小函数,拗函数。我们先来看一下这个拗函数的作用,在拗函数中便利了一个可迭代对象,如果它的每一个值都是处的话,那么这个结果返回的就是处。 如果有一个值是 false, 那 么这个最终结果返回的就是 false, ok, 那 接下来咱们通过代码来介绍一下这个拗函数,我们看一下这个例子,在这例子 我们来看一下这个例子,这里有个列表,它是一个可叠的对象,那接下来我们对它应用奥函数,首先呢使用放循环对它进行便利,然后获取到每一个值,判断它的值是不是大于等于六十。如果都满足这个条件的话,那么最终这个结果返回的将是处。 运行这里的结果返回的就是处。如果有一个值是小于六十的话,再来运行这个结果就是 false。 我 们再来介绍一个案例,很多时候呢,我们需要判断用户输的内容是否是全是数字, 我们来一个字母 s, 一 一二三四五,然后加一个 a。 首先来便利每个字母 for c 音 s 一, 然后使用 c 点 is digital。 这个函数作用是判断一下它是否是数字,如果每一个都满足的话,那么这个结果将返回是处,否则话返回为 false。 来运行看一下这个结果, 输出结果是 false, 因为这里有一个字母不满足条件,我们修改一下,再来试一下,此时返回的就是处了。那这些案例呢,都比较简单,接下来咱们介绍一个比较实用的案例, 看一下这个例子。当我们在做外部开发的时候,咱们经常会判断用户的权限,比如说用户是否激活,用户是否有这个权限,用户是否邮箱验证, 用户是否没有被禁用。 ok, 那 这些条件比较长,写起来也非常的麻烦,不够优雅。所以呢,咱们可以这样 设置一个 condition, 把所有的条件全部放到这里面,当所有全部满足的时候,咱们允许用户进行登录, ok, 这就是奥函数一个常见的应用,小伙伴你学会了吗?

python 从入门到精通第二阶段第一章一点二,函数的返回值学 python 我 只看糯米哦。哈喽宝宝们,今天我们要学习的是函数的返回值,那什么是函数的返回值呢?这里我们可以想象一下, 假如我们在一台智能制作奶茶的机器上点了一杯珍珠奶茶,智能机器做完以后,只是对着屏幕上显示了一句,珍珠奶茶做好了,但是并没有把珍珠奶茶投放在取餐口的位置上。 但如果智能奶茶机真的把做好的奶茶投放在取餐口的话,我们就可以带走珍珠奶茶。 在 python 里, return 就 相当于智能奶茶机把奶茶投放在取餐口上。 return 是 把函数计算好的结果,也就是函数的值,把这个函数的值交到函数的外面,让我们继续使用这个函数的值。那么 return 的 结构又是怎么样的呢? 其实 return 的 语法非常简单,就是在函数体后面加个 return 就 可以了。当程序遇到 return 的 时候,函数就会立即结束, 并且会把这个函数的结果,也就是这个函数的值交出去交给这个程序。如果这个函数里没有写 return 的 话, python 在 运行的时候就会自动在末尾加上 none, 表示的意思是这个函数什么也没交出来。 接下来我们来写一个制作奶茶的函数,我们来复制一下上一期的代码,在上一期的代码上进行 return 的 实操,我们先把多余的代码删除掉,便于代码的简洁性,要不然太复杂了。我们要使用这个函数产出的值,也就是这个的函数体产出的值, 这个值就是一杯加 toppy sugar 的 奶茶,我们来复制粘贴一下这个值,这里打上引号,还要统一一下数据类型,就是在外面打上字母 f, 接着我们给这个值的前面打上一个 return, 这样我们就把这个函数的值交给到了我们的这个程序这里,我们已经把这个函数产出的值给调用出来了, 我们要用到这个函数的值,那么我们就先给这个函数的值来变量命名一下,便于我们后期对这个函数的值进行使用。 比如糯米这里就变量命名为 my drink。 接下来我们对这个函数的值进行代码操作,比如我们来打印一下这个函数的值,这里就先打个 print 这个函数的值我们变量赋值为 my drink, 这里我们就复制粘贴一下这个 my drink, 接着我们来运行一下代码,这里我们就可以看到,我们是对这个实际的函数产出的值进行了打印的操作,而不是单独对这个函数体使用 print 进行打印。糯米假设一下,如果没有 return 会怎么样? 比如我们这里把这个 return 删除,我们再运行一下代码,这里就可以看到,如果没有 return, 程序会直接运行出 n, 表示的是并没有得到这个函数体产出的值。 这里糯米来总结一下, return 的 作用是让函数产出的这个值提供给程序使用,而不是只显示一下就完事了。 return 的 结构就是在函数体的末尾加个 return 就 可以了。 那么今天的课程到这也就结束了,下一期糯米要讲解的是函数的作用域,关注糯米持续带你掌握 python。

为什么这个在 python 里返回 false? 说些话,你本以为会是 true 吧,但 python 打印出的却是 false 等等, python 就是 连基础数学都算错了。其实并非如此, 这背后的原因很有意思,计算机存储数字的方式和人类不一样,人类用的是十进计,计算机用的是二进计。而问题的关键就在这里,有些十进计小数,比如零点一无法在二进计中被精确表示, 这就像一除以三的结果没法用实,竟计完美写出来一样。所以,当你在代码里输入零点一时,拍放实际存储的是一个近四值。 当你计算零点一加零点二时,得到的结果并不是精确的零点三,而是一个和零点三极其接近但并不相等的数。就是这微乎其微的差值,足以让这个比较硬算返回 false。 那 解决办法是什么呢?

给你一段英文,想知道一共有多少个不同的单词,怎么做?我们用字母串处理和集合去重两行逻辑来搞定。我们先去定义一个函数 define, 定义完函数以后,现在我们来统一大小写,也就是 text 等于 passenger, lower 就是 统一大小写。第二步我们要去掉标点符号,先用 for 循环把应该有的标点符号便利出来复制给 p, 然后我们再把 这标点符号用 replace 给它替换成空值就可以了。第二个就是我们要分割单词,用 split 直接按空格去把它单词分割了,然后我们去创建一个集合,因为集合是有驱虫功能的,所以我们给它 创建的是集合。最后我们需要返回两个东西,一个是这个字母串的长度,再一个就是这个字母串,这样的话我们就把这个函数定义好了,现在这是一段字母串,那我们直接 count, words, count 和 words, 这是我们返回的,一个是他的长度,一个是单词,所以我们直接调用刚才自定义的这个函数就可以了。调用完以后,我们现在来打印出来这两个,结果打印出一个是长度, 一个是单词,然后运行,我们这里多了个空格啊,去取消掉这个空格,然后再运行,那么就得到了他的数量以及单个的单词。

当你打开 network, 看到接口返回全是这种天书时,很多人的第一反应是,完蛋加密了,错,大错特错,我的天呐,来一招教会你怎么解决。当我们在做前端网页,你想分析的时候呢?我们使用这个开发者工具面板进行抓包, 可以看到下面有一个数据包,我们点击进来看一下它这个响应的数据,结果你会发现这种乱七八糟的数据到底是个什么东西,完全看不懂。那有一些同学有一定基础的可能会觉得它是什么,它是这个加密, 就开始啊,直接来搜搜他的这个加密逻辑,或者搜他的这个解密逻辑,又或者说呢,有一些稍微近近一点的同学,他的这个跟站分析,比如说在这里啊,各种各样的打断点啊,又是什么后缀代码的注入啦,又是 各种的叉叉断点啦,那其实在这个地方很多同学都犯了一个最基础的错误啊,是什么呢?就在我们遇到这种响应数据这种乱七八糟的 这个格式的时候,我们一般要去看一下它这个头部,你看像看到这个 s o h 的, 你基本上可以去判定这个可能不是什么加密,而是这个编码格式的一个音色,所以我们先去看它的这个载荷的这一个面板,在这个地方有一个叫做 encoding 对 应的 ag 杠一不是你常见的,比如说什么 g、 b、 k, 或者是这个 u t f 杠八的这个比较常见编码格式,那像这个 你看不懂的这个编码格式啊,其实是他的私有的一个印刷关系,其实很多同学都不知道什么叫做这个私有呢?对吧?而且呢这一个编码格式他又是什么意思呢?其实这个编码格式的话啊,他会对应的就像一个字典一样,它里面是有 是有这个很多数据的一些印刷规则,比如说啊,我们有一个这个,比如说我们有一个非常简单的一的数据,那么通过这个印刷规则啊,他可能就变成了这种就你看不懂的这种乱七八糟的字。 好,这就是这个 encoding 的 一个编码格式,因为这个 a g 杠一的这个编码格式是它私有的,所以说我们看一下怎么正确的,而且呢最为简单的来解决这种问题。 你看现在我们啊去通过这个正确的代码右键运行,可以发现呢,就是在这个地方它会出现这种乱七八糟的字,但是我们只需要去改一个东西,也就是这个 encoding 就 把它删掉就可以了嘛,用你自己的这个 u t f 杠八的啊这一套音色关系,那么你再去右键运行一下这个代码是不是就正常了?这就是获取到了这个 qq 音乐的啊数据信息,包括有这一些啊作品的名称。

好,各位小伙伴们,大家好,接下来我们开始讲递归函数和高阶函数,那这就属于函数部分的高级部分了。前面我们讲了一些基本的函数,包括这个函数的定义,函数的参数,函数中的一些访问值,以及 全局变量和局部变量等问题。第八节的递归函数和高级函数,难度要比之前的那种简单基本的函数要稍微难一点点。 不过了,未来你要在使用的过程中,那还是基本函数弄的多一些。百分之百分之应该是一个三比七的比例,大概百分之七十,你碰到了大部分函数都是一些基本的函数或者简单函数, 那百分之三十左右是递归函数以及高级函数,就比例还不低。好,现在我们从第一个递归函数开始说起。什么叫递归函数?这就是说在函数的内部自己调用自己,并且得有退出函数的出口。 啥意思?比如说我们现在定义了一个函数,在函数里面我再调了一下这当前本身的自己的函数,那照你这么说,是不是 在在这个里面又会调一下自己?那永远调来调去了,那是不是变成一个什么死循环了?是,其实在低规函数中,本身由于自己调和自己,它就是一个循环了。 虽然我们这里面没用到否循环以及否循环,但是由于在函数内部自己调自己,内部的自己又调了自己,你想想是不是形成了一个循环? 由于形成了这么一个循环,那么后面有句话很重要,你必须得有退出这个函数的入口,否则就会出现死循环的问题,这就是低规函数的一个最大的特点,对,低规函数最重要是什么?你在自己调自己的时候,你必须要确定什么时候退出这个循环, 退出这个函数。那递归函数有哪些应用?比如说我们可能下次下一节第九节我们就要讲到的就是便利一个文件夹下所有的文件,那由于文件夹里面还有文件夹, 文件夹里面有子文件夹,子文件夹里面还有子文件夹,你要一层一层的递归到最深的一层,那这个时候你必须要使用递归函数才能实现, 或者说实现起来方便一些。还有后续我们的算法课程中,我会用到一些什么排序的算法,我们快速排序啊,分区排序等等,也会用到地柜,而且积极学习里面一些算法也会离不开地柜,地柜确实还用的蛮多的。 好,那接下来我们就举个例子,这个例子实际上是这个图在这,我们先不是说这个图,等会再说这个图的问题,这个图是干嘛的?这等会我要讲的一个案例,这个案例是计算一个数字的结成。 计算一个数字的结成是啥意思?这个数学里面的结成的运算可能有些小伙伴忘记了,比如说要计算六的结成是什么?是六乘以五乘以四、乘以三、乘以二乘以亿 七的结成呢?就是七乘以六乘以五乘以四乘以三乘二乘以二、乘以一样的八的结成就是八乘以七乘以六乘以,以此类推。那你有发现规律没有任何一个整数 好,任何一个正整数他的阶乘,任何一个正整数他的阶乘,假设这个正整数是 n, 他的阶乘是不是等于那 n 的 阶乘?是 n, 后面加感叹号等于 n 乘以 乘。以什么乘的 n 减一的阶乘,减一的阶乘,这一点大家看懂明白吗?比如说六的阶乘是不是就是六乘以五的阶乘,五的阶乘是不是就是五乘以四的阶乘? 四的结成是不是四乘以单的结成?好,所言之,任何一个正整数,它的结成是这个 n 乘以 n 减一的结成,是吧?那么我求一个数字的结成,我是不是还得求它小比它小一的那个数字的结成啊? 如果要求这个比他小一数字的接乘,我是不是得求他比他小一的一个接数字的接乘?也就是说,我当我要求六的接乘,我是不是先把五的接乘算出来?我要求五的接乘,我先把三的接乘算出来。我要求三的接乘的时候,我先把二的接乘算出来。 好,当我要求二的接乘的时候,我先把一的接乘创出来,一的接乘就直接可以结束了,因为一的接乘就是他子就是一。 好吧,那这个不就是在一个函数的里头自己调自己吗?地龟,好,接下来我们把那个阿力用代码来实现一下,等会我们再回过头来看这个图,这个图其实很好的意见啊,回到我的还差五中 新建一个新的 p 王文念,我取个名字叫二十七。地龟回车 这个低位函数,我先说一下需求,就是计算需求,计算一个正整数的阶乘啊,那我先定一个函数,一个函数略这个就要定一个叫 tax, 那 他要计算一个正整数 n 的 阶乘,你是不是给他定一个参数?这个参数他类型一定是一个整数,当然一定是正整数,是吧?啊?当然这个类型我们可以不定,我们全面讲课,他返回时也是一个什么, 他返回是不是也是一个整数?计算一个数字的结成一定也是整数?好, 写个注是计算一个数字 n 的 结成,那么返回值就是一个数字的平方。注我就不写了。这行代码应该怎么写?这个代码其实写 我们写地规函数的时候,其实刚刚的定义中已经告诉大家了,在函数内部自己调用自己,对吧?但是后面还有一句话很重要,而且我重点强调了,就是在地规这样的函数里头啊,一定得有退出函数的一个出口, 而且你要优先考虑他,你要明白这一点。好,那既然如此,我们想想什么时候计算一个数字的阶乘,就直接返回,就直接退出函数了,不用再往下低规了。当计算一个数字 e 的 阶乘的时候,就不用再往下了,因为 e 再往下就是零的阶乘,没有任何意义。所以 左盘吗? if n 等于一啊,怎么了?直接 return 返回这个函数,返回这个函数就是退出函数。 对,之前我们讲过的,千万别写 break, 那 是退出时域环啊,两码事。好,这句话的意思就是说,当 n 是 e 的 时候,你要计算 e 的 进程,直接返回 e, 因为 e 不 用再递归下车。那这其实就是什么学主旨,这就是递归 函数背出的出口,这个很重要,得有这个出口,没有这个出口啊,我说过它就是个死循环。 那接下来根据你需求,我们再去写怎么个递归法,是吧?好,那先写了。好,那就是我计算一个 n 这个数字的结成,我直接拿着 n 和 n 减一的结成 相成就可以了,是吧?结成减一, n 减一的结成是不是? n 减一?是不是又是一个整数? x 这个函数不就是计算一个整数的结成吗?那我就调用一下 x, 把 n 减一作为参数传进去。对,在十二行这行代码中,是不是在函数的内部自己调用了,自己最后也来一个日测。为什么要日测?因为你十二行也是要返回不是?估计有有一些小伙伴们说,那十一号你已经返回了,为什么十二行也要返回了?你想想, 十一行的返回,是的, n 等于一的时候,他会返回的。那么 n 不 等于哪呢?你就不返回了, 你再想想,你发现这两句话都要加 read, 是 不是代码写完了?各位,写完了,这就是计算一个正整数 n 的 阶乘。 当你发现只有三行代码,感觉好像很奇怪一样。没有什么奇怪的,这就是最简洁的一种代码的写法。所以地归函数,别看它的思路有点复杂,但事实上它的代码是很简化的。 那我们来试试测试一下,我们打印一下 print text, 我 们先计算二的接生,二的接生就是一,就是二乘一。 ok 啊,我们来运行一下,二乘一等于二。没错,那五的接生,五接生应该是一百二十吧。对,果然是六的接生。是什么?六的接生是不是六乘一百二十? 六乘一百二十是一六的六啊?其实七百二十。好,我们计算一下六六的阶乘是不是七百二十?果然是的,你看,这就是计算一个数字的阶乘,就这么简单。好,那我们接下来再回到我们这个图中啊,计算一个数字的阶乘,假设这个数字是六, 那实际上先做判断,六是不是等于一啊?不等于一,那他就会执行下一行,就不会进入到刚刚我们说的义务条件。哎,义务,这个义务条件, 当 n 等于六的时候,是不是不会进到这个义务条件?不会进到义务条件,就会执行这一行代码,那这一行代码是把着 n 用 s, 六乘以 x 五,对不对? n 减一附着五等于 x 五。 所以当 n 等于六的时候,实际上就是是拿着六是乘以五的阶乘,当 n 等于,那这时候他就重新调了一下自己参数,传了一个五进来。所以说白了就是第二次调用的时候是在内部调的,调的是参数,传的是五 啊。计算的是五的结成,那五的结成是不是又是拿着五乘以四的结成?所以第三次调用处传为四进的四,再乘以三的结成,依次 a 退。当第六次调用的时候, n 就 等于一了, n 等于一, n 直接返回,他会依次往上返回。因为由于 n 等于一的时候能够直接返回,所以 n 等于二的时候的结成就可以得到结果。 由于二的接生可以直接叠得到结果,那三的接生也可以直接得到结果。三的接生得到结果了,四的接生也可以得到结果。四的接生得到结果了,五的接生可以得到结果。然后以此类推,六的接生也最终能得到结果,所以最后直接返回。 所以你发现没有,地规是一个先一层一层的往下地规的很多层就不一定的,要看你这个数字是多少,是不是 到了这个函数的退出,函数的出口的时候,再一层次的往上返回,这就是所谓的递归函数的特点,几乎所有的递归函数都这样子了。好,那关于递归函数就讲到这,感谢大家再见,记得点赞关注哦。

五小时带你速通拍算!上次课我们学了如何创建自定义函数,今天咱们搞定两个间接知识点,变量的作用域和函数的返回值,你的代码会更强大,更规范。什么是变量的作用域呢?通俗的说,变量的作用域指的就是变量的使用范围。 举一个生活当中的例子,我们自己的水杯是不是只能自己用?它就像在函数内部定义的变量, 当然也只能在函数内部去访问,你外部是无法出答的,那你的水杯别人拿着喝水,那太不合适了,那对应的像公司的饮水机,它就是一个全局的变量,饮水机里还有没有水,大家都能看到,而且都可以去饮水机那接水喝, 这就像函数外部的全局变量。我们先看一个错误的例子,你来测一下会不会踩坑。这个场景是算奶茶团购的价格,我先定义一个外部变量, milk tea price, 一 杯奶茶的价格十八元,贵吗?在函数的内部 我想改这个价格,改成了二十,我要买多少杯,调用的时候我就传一个数量,这样五杯二十,函数内部打印多少, 我是能猜到,应该是一百元了,有点贵了。函数调用结束之后,程序会执行到这,大家想这个时候我打印一杯奶茶的价格,它是十八呢?还是二十呢?这个二十会不会影响到外边的这个变量?测一下 用代码讲话运行,结果有了,这个奶茶的价格还是十八元。通过这个例子我们看到,虽然在函数内部把这个价格临时改成了二十,这个结果确实也是一百元, 但是对于外部变量来说,它的值是没有改变的,所以函数内部的这个变量和函数外部的变量它是互不干扰的。现在我们明确两个核心的分类,全局变量 和局部变量。全变量就像他的名字一样,是定义在函数的外部的一个全局的位置,他不属于任何一个特定的函数,那这样的一个位置的好处就是说,将来这个术语覆盖整个文件,你在任何函数内部都能访问到这个全局变量, 而且从程序定义的时候开始,直到整个程序结束运行这个变量,它都是存在的,所以它生命周期是比较长的,作用范围也是比较广的。那我们对比一下局部变量,局部变量就是在函数内部定义的,那它的这个作用范围就是它的作用域,仅限于这个函数内部使用, 外部是无法访问的,生命周期也就比较短。函数调用的时候有了,函数调用结束,这个局部变量咱也就不用了,也就销毁了。 大家在回忆这个场景,如果我确实需要在函数内部修改这个全卷变量,怎么办呢?这样写是实现不了的,我们可以借助于一个关键字 global, 把这个关键字一加,相当于明确告诉编辑器,我将来要改的这个变量是外部的这个全卷变量,我们基于这个代码做一个调整,修改全卷变量。假如我们定义一个函数叫做更新奶茶价格参数,就是你要更新的那个新的值。先声明这是一个全卷变量,加上 global。 然后我们提示一下函数外部做一个调用,比如说这个奶茶涨价了,从十八元变到了二十二元, 这次的结果是对的,两个打印都是二十二元, global 生效,不过提醒一下,一般我们在开发的过程当中,尽量的少用这个 global, 因为他会增加代码的偶合度和调试的难度。如果你确实想改,可以通过函数传参、函数返回等一些其他的方式来实现,这样更规范些。大家看我们现在写的函数,都是在函数内部做一个打印语句,如果说想把一些结果给后续函数调用,接着使用这个就做不到, 你打印的内容在函数的外部你是拿不到的。那如果我后续有些其他的预算,比如多次团购奶茶的一些总价格,什么总的配送费用等等,那这一种实现方式就太单调了,不能满足我们开发的需求。现在我们可以给函数添加一个返回值, 这个返回值相当于把这个函数的计算结果交出来,后续接着用返回值的语法特别简单, 你在你的函数内部加上一个 return 关键字,把返回的值写到后面。我们看一个程序场景,比如说我们日常生活当中要打车,起步价假如是八元,超过三公里的部分,每公里价是一点五元。如果你打车是一公里、两公里、三公里,起步价八块, 那如果你四公里了,那超出了一公里,要额外再加一点五。这个大家应该都是很熟悉的,我们可以定义一个函数参数是你实际打车跑了多少公里,返回值就是你打车的费用。你看代码怎么写,我们新建一个拍摄文件第三十个程序, 这些代码都是可以发给大家的。一个打车计费的函数代返回值,计算打车费用参数。你走了几公里?起步价八元,你的城市是八元吗?如果大于三公里了,那就是这个起步价,然后再看你超出了多少,超一公里一点五,如果没有超, 就是一基础费用,我们返回最重的打车费用我们多调几次。比如你今天出去玩,打了好几次车,第一次五公里口算多少钱?第二次十公里,那两次打车的合都得你出钱呢,加一块, 两次打车合计妥妥。当然也可以打印一下明细,第一次五公里,那就是起步价八块,加上超了两公里,加上三十一块。 第二次十公里,那是起步价八块,再加上七乘一点五十点五十八块五,没问题吧? 一共花了二十九块五。如果你在函数内部 read 之后又写了一句话,大家想这个提示能打印出来吗?你会发现打印不出来的。所以对于程序的运行来说,他先执行这个调用这句话,他会跳到函数的内部执行,这样一行一行的来, 这有一个分支 return 之后这个函数就调用结束了,后边的代码它就不会执行了,你要知道它的逻辑,因此这句话是没有意义的,是作废的,你要删掉它。那么 return 的 这个 feel 它返回给谁了呢?它返回给了你前面写的这个接收的变量, 然后紧接着再执行这个函数,又跳到函数的内部,他的返回值又给到了另外一个接收的变量。 v 二,大家知道这个逻辑好不好?我们之前写函数的时候,没有返回值,没有写 return, 相当于他返回的是一个空,得不到值。 派森很强大,非常灵活,你可以返回多个值,像 c 语言当中是不可以的,你只能返回一个值。你如果想返回多个,你要想办法,比如说通过参数来个独起之争,那我们看这,这是一个返回多个值的场景, 有同学他想象不到,你要是知道场景了,才知道这个多个值它的价值我们看,比如说我们网购的时候,经常有商品的满减的活动, 如果你的消费超过五百块了,优惠的是一百,优惠力度比较大,那如果你的消费是两百到五百之间的时候,就是优惠三十。或者你去一个地方充个会员,充的越多,他优惠的越多, 那如果你消费比较少,他就没有优惠。那在这个场景当中,我们可以定义一个函数,输入的参数可以是你原价返回值第一个,你可以返回一下你最终的消费价格, 同时呢,你告诉用户,咱这次消费占到便宜了,给我优惠了多少,我们一起写一写。你可以暂停,先自己试试。商品满减的一个函数要返回多个值,前边还是 df 开头,这是不变的参数,就是你的原价, 如果原价大于等于五百,这优惠金额就是一百,那你的最终结账价格就要减掉这个优惠。如果你的消费金额是大于等于两百,那就是 else if 优惠三十, 这是最终结账价格,如果你消费金额不足两百,那就没有优惠了,原价支付。现在我想返回两个值,还是 return 后边用逗号隔开好不好?记住这个语法,返回 final 和你优惠的这个金额。 discount 强调一下,怎么返回多个值呢?在 return 关键字后面,通过一个逗号把这多个值分开。其实在 python 内部呢,它会自动将这些值打包成一个元组。那我们调用的时候如何接收多个返回值呢?一样的, 这个变量的个数要对应,我是多个变量,并用逗号隔开来去接收,数量一致,这个位置也要对应,注意这个变量的顺序。现在我们调用一下函数名称, 写上传一下参数。假如说你消费了四九九,那返回值的第一个变量就是你最终消费的价格。假如我们叫 final price, 然后我逗号隔开,再加上我省了多少钱,我们写直接一点 sale money 好, 加一个等号,看到没有?维特曼第一个给这边第一个,我们看对不对,反应一个提示,最终价格省了多少钱? 最终价格是四百六十九,省了三十,对不对啊?很遗憾是吧?没有达到这个,那我们改一改,假如说凑两块钱的五百零一,这可以,这很划算,是吧?五百零一省一百 四百零一。最后给大家看一个综合的场景,它既涉及到了变量的作用域,也涉及到了函数的返回值,就是手机套餐中流量的计费,最基础三十九元, 二十 g 的 免费流量很熟悉吧?大于二十 g 的 时候额外给钱了,一 g 五块。同样的,你的话费里边有三百分钟是免费的,超过三百分钟之后,超出部分零点一元一分钟一毛钱就要写函数了。 比如这封装一个函数,这又封装一个函数,这俩函数返回值加一起,那才是我们最终的一个费用,同时这个三十九 可以作为一个最外边的全句变量,大家可以自己写一写代码,在这里全句变量三十九,这是一个函数, 返回了一个值。 extra 就是 流量超出的费用,这是另外一个函数,跟话费相关的,你看返回的是超出通话的那部分额外的费用,那你最终的话费就是你的基础的那三十九,再加上这两个超出部分,编程语言一点都不难,而且现在有了 ai 的 工具,你的基本功课扎实之后,你就可以指挥 ai 干活了, ai 帮你写, 你就会像加公式一样变得越来越强大好不好?那么需要我们完整版编程教程的同学你可以预约。注意,如果你基本的语言不懂,直接用 ai 你 是用不好的,所以老师还是给大家把这些基础知识讲一讲,你也要跟着敲跟着练的,加油!

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

今天只学两招,判断加循环,学会就能批量干活!判断条件语法在条件语法中有单判断、双分之、多分之三种形式的写法。第一种单判断,基本语法是 f 判断条件,冒号结果重点如何被识别,判断是对的呢? 只要判断条件的结果是非零或者非空,都是赤裸。第二种双分之,基本语法如下,如果判断条件是真的,则执行这里的代码,否则执行这里的代码。第三种多分之,基本语法如下,在双分之的基础上,中间加入 ellif 关键词,进行多次判断, 执行顺序从上往下,当遇到判断条件为 true 时,执行对应条件下的代码,并停止往下继续判断。 i 杠中有两种循环语法,一个是 for 循环,一个是 while 循环。 for 循环的基本语法如下,循环数值可以是字母串、列表、圆组等数据类型。 while 循环的基本语法如下,需要注意的是, for 循环是在循环数值,所以它的可执行次数取决于数值的长度。而 while 循环是依靠循环条件,如果循环条件一直都是 true, 那 就是无限死循环。 打破无限循环的方法是在循环体内加入 break 或者看天牛, break 式结束整个循环。看天牛式结束这一次循环,继续下一次循环。下面展示一些基本语法的编程案例, 如果觉得本期视频对你有帮助,记得点赞、收藏,关注三连,我们下期再见!

好,各位小伙伴们,大家好,接下来我们开始要讲 python 中的第二个系列了,那就是列表,列表就是由一系列变量组成的可变系列容器, 这个列表一次性可以存储很多个数据,到底有多少个?来看看你的内存有多大,要是你内存足够,我可以存无数个,而且可以为不同类型的数据。 这跟我们前面讲的那个自创不一样啊,杜创也是存放多个数据的一个序列,但是自创中只能是一个一个的字母, 里面的数据只能是字母,不懂是其他的,如果是其他轮的不叫自创。但是列表不一样,列表是可以在这个序列中啊,存放不同类型的数据, 你可以放一个自创,可以放个整数,可以放个浮点数,甚至放一个你自定义的类,自定义的对象都没有问题,类型是可以随意的。 那么怎么样去定一个列表?中框括起来,里面接一个的数据,每个数据的使用逗号隔开就可以了,就这么简单。好,那接下来我们回到拍唱中,我给大家先创建一个比较简单的一个列表,那我要新建一个新的片文件了,在这新建一个新的零十十六倍 列表。回声,首先我们创建一个列表, lsd, 等于中框括起来,其中框里面你什么都不添,它也是一个列表, 只是空列表,这里头没有任何内容,空列表也是一个列表,那如果你还可以往里面填,你可以填个数字十二,把逗号隔开,再接一个字母串 a b。 可以 的,没关系,我还可以再接一个什么无限数,比如说三点一四,三点一四,那类型完全都不一样,是不是? 你甚至说我在列表里面,我再接一个列表,我里头再是一个列表,可以吗?可以的,没问题,这样也行。这,那实际上就是列表的签套了,这里看到没?这就是我们定好的一个列表, 看到没?好,那定好列表,定好列表之后,接下来我要讲一讲会列表里面一些相关的操作。列表的操作比较的多,你看我给大家列出了一共是十三种操作,但不是每个都是,很重要。首先还是下标 和切片,下标切片我就不再举例的了,就跟跟我们之前讲的自我创是一样的。而且我再次强调一下,所有的序列都可以进行下,呃,都可,都有下标以及切片。 好吧,他那我们的列表里面使用下标和切片来干嘛?也是帮我们做查找,做截取,但是还多了一个可以帮我们做修改 啊。我们重点去讲一下这个修改,回到我的列表中的第二个数据, a b 这个数据,我想把它改一下,改成 abc, 那 怎么办?那我就要把 l s t, l s t 中跨下标了。第二个数据,其实它下标是一,我重新给它附一个新的值,这个新的值是 abc 啊,其实就是把它修改成 abc 了。 好,修改完之后了,我再打印一下 l s t, 等会就能看到 l s t 里头的内容被你更改成原来是 a b, 现在被你更改成 abc 了, 所以你看我们可以使用第四行这种方式来做什么?哎,对,链条修改操作马上就给大家讲完了,这就是使用下标来做修改操作。 好,接下来继续。那还有可以什么 index 做查找, ctrl 做统计,嗯,也是做统计。好,我这三个函数的一次性给大家讲了, index 的 其实就是返回指定数据所在的下标,这跟我们的字串如果来给 index 函数其实一样的, 如果没有找到会报错,注意,这个没有找到会报错啊,但是这里面没有放,注意,列表中没有放的,此时有字母串中有,但字母串中我们直接输入这个放的函数的函数中没有找到,返回负一,是不是 啊? index 没有找到会返回,不,不是返回,什么是报错,直接报个一枪出来啊。 ctrl 是 统计指定的元素在列表中出现的次数,这里要注意一下,是列表中的元素可以重复出现的。 好,可以重复出现是表示访问列表的长度,就是列表中一共有多少个元素。好,那我们来接下来回到排序当中,现在我特意给它一个重复的值,比如说我这里再弄一个十二,两个十二, 是吧?这两个十二它会自动去掉,去掉一个留下唯一的吗?不会重复的,是重复的。好,那现在我们要做一下相关的处理,比如说我要去看看十二在什么,在这个列表中的下标哪个位置,那我叫 l s t 点 l s t 点 index 啊,我们这看十二它在哪里出现了,那它的下标是零,因为它只会返回第一个查到的位置零,其他的我就不做处理了。我在 l s t 统计一下十二出现了多少次啊?我使用 com 十二,这是表示。我去统计一下,十二这个元素在当前这个列表中一共出现了几次,那出现了两次,它会帮我们去统计出来,看到没? 好,那还有那是属于类制的函数,类制函数它也就是说直接拿这函数来调的,里面就接一个序列,接 l、 s、 t, 那 这实际上是 得到了这个列表,他的长度的意思,其实就是列表中一共有多少元素?列表中一共有五个元素啊,五个元素这样子的,哎,这是一个元素,这是一个元素三个了,再加三零一四四个了,这是一个整体的元素,千万别把里面拆开了,实际上里面的这个列表他自己本身是两个元素, 但是我们粘到外面这个列表,外面这个列表其实是有五个元素,只是第五个元素,他是一个也是一个列表而已。好了, 这是关于查找了三个函数,这个三个函数先不注试,我们等会也可以打印出来,没关系。好,我们继续回到本单中了。 接下来是做一些追加添加数据用的,有 append, extend, 还有音色者,这三个都是做新增数据的,其实刚刚那个是查找,为大家做一下分类查找操作。接下来的是添加 数据的操作啊,添加数据的操作有三个,这三个的分别是刚刚大家看到吧,分别是 append、 extend 以及音色到三个的区别。首先 append 是 列表的结尾追加数据,如果你想从结尾计算数据,那是 append。 好, 那 这个 extend 也是列表的结尾值加数据。如果数据是一个序列,则将这个序列的数据逐一添加到列表中,你看,所以它的区别跟这个啊判的还是不一样的,等会我给它用代码给它,呃,写出来你就能直观的发现这两个函数的区别了, 一色是可以在任意您指定的位置来做新增数据的啊。回到我们的排序中,我们先讲几个简单的,而且也是未来用的比较多的。 那拿着 i s t。 点啊 pan, 好, 我在里面添加一个。什么?添加一个新的作坊,这个新的作坊叫哈喽, 这可以了,我还可以 i s t 点啊 pan, 先执行一下,等会我再讲。后面的函数都啊填上,后面填了是个哈喽,而且是在 在下标的最后去添加哈喽,那你要注意好, i s t。 现在我们来说说这个 excel, 它参数只能接一个。什么接一个可迭的对象,昨天是输入上的都是可迭的对象。 知道,你看,如果我是往里面添加一个字创,叫 word, 就 跟我们前面的啊 find 就 不一样了,你看效果就不一样了。不是在我们的列表后面添加一个字创 word, 而是把这个 word 的 每一个字母都一个一个的展开,一个一个的添到我这个列表中,你看到效果了没有? 所以啊,判断一,跟这个 extend 区别在哪里啊?判断是把整体,不管吃什么东西,把整体添加到我们的列表的结尾。那如果是 extend 了,先把这个 列表补充,不对,先把这个字库创,或者先把这个虚列把它展开,展开之后呢,一个一个的元素添到我们的这个列表的后面。 好吧,是这,这就是区别,这答案呢,各位,你要把这个文档注是笔下写一下,就写到注是上面就可以了。好,完了呢,接下来 i s t。 我 们这个 excel 的 话,我就把它注了。我这个列表的话就有一点有点奇怪啊,现在我就将用这个音色,音色子就可以在任意你指定的位置去插入新的数据, 那他要串两个参数,一个是下标,是差,比如说我在在的第一位置插入插入一个一百, 对吧?这在第一个位置插入一百,来运行一下走,你看是不是第一个位置插入一百,那后面的后面的位置啊,就往后移了, 好吧,好,那我在十二的后面,那你要看十二的后面是哪里?十二的下标是零一二三,我在这个十二的后面。好,那也其实说白了是在四这个位置插入一个,对不对?下标为四的这个位置插入一个啊,我再插入一个什么呢?下标为四, 我插入一个组合串,这个组合串叫 word 来运行一下,走,看到吗?是不是?是不是在这个十二个后面,所以你想在哪个地方插,你就指定下标就行了,这个印色的。 好,关于这个添加数据啊,继续讲。完了,那我们接下来再看这个删除的数据。删除的数据呢,是三个函数,把三个函数了, pop 以及 d, l 的 表达式以及 re, m, v, pop 呢用的最多, pop 呢,是删除指定下标的一个数据,当然你也可以不接参数,不接参数,当默认这是最后一个, 而且了 pop 它一个特点,删除完之后了,并且把这个删除的数据返回给你,这个任务最多 remove 了,是不是?不是根据下标了?是根据数据本身是删除一个,删除这个第一个匹配项,比如说你要删除十二,它会找到第一个十二版的十二。删除 dl 的 话呢,是一个类似的表达式,它是可以删除所有东西的。好,来我们接下来回到。 呃,拍上面写个注,是删除,在删除之前呢,我先我要把这个 ctrl d 把前面的那个列表打印一下,删除操作。这次呢,我这样子的啊,我想把这个把这个 abc 删掉,那应该怎么做?那我们可以两种方法。第一个呢,我们可以使用 s t 点 pop, 如果你就直接 pop, 他 删什么删?最后这个 hello, 来,我们给大家看看效果来,看到原来是有这个 hello, 现在 hello 没有。 好吧,因为你不经常做,默认就删除最后一个。那我现在我说了,把这个把这个 abc 删掉,那 abc 他的下标是零一二,对吧?零一二,他的下标是二,我我这里写个二,他这样子的话呢,他并不会把 hello 删掉,反而是把这个 abc 删掉了,看到没? 好,这叫 pop。 而且 pop 呢,它会有返回数据,它删掉什么,它就会把这个数据返回,返回的话呢,我们就可以把它打印出来,它删掉了 abc, 它返回了,这个 pop 也用的最多。 好,然后接下来了,我们还可以使用 d e l d r d l 的 话呢,一样的,我们要删除哦,把这个助手还删除这个 abc, abc 在 哪里?在下标为 i 的 这个地方。那我可以这样解, d l s d 中括号下标为 i, 这样也是删除来 看是不是也没了, abc 也没了吧。原来是有 abc, 现在 abc 也没了,还可以使用什么?使用这个 remov, 把上面二十一行啊,把它主试一下,然后接下来是 lsd 点 remove。 remove 是 删除值啊,不是根据下边来删,那这个值的话是 abc 啊。 ok, 那 我们就删除这个 abc, 这个值来运行走看,一样的 abc 也删掉了, 但是如果你想只是删除十二的话,他只删第一个十二的车标,注意一下,来,我们走,你看第一个十二并没有删掉,因为他在这还留下了 讨论,所以你,你要你要知道这三个删除的操作为你分别有什么样的一个微小的一个特点,区别不大,对吧? 好了,这是删除的相关操作,接下来了,最后了,就是一些特额外的力,一些额外的,包括这个力序啊,路由重新帮你做排序,然后负循环做便利。好,我们说一下这偶尔的三个。首先我们说一下力序, 例序的话了,直接有一个函数,即使我们用例序,我们用,我们用切片也可以做,记得还记得不?你看我们先用切片的方式, lsd 啊,中冒号,冒号负一,这就是例序啊,点 print 给大家看看效果走, 这是不是例序了,看到没,对不对啊?送,那我们我们还可以调用这个 sd 的 这个 reverse 的 这个函数,它也是可以帮我们直接做例序来 print 一下,走, 好,他不是他这个函数了,没有,反而直直接直接打印去,是利绪了,这,这是二十七号这个地方,欧巴欧巴,二十四号注示吧, 这个也是可以做利绪的,也会注示对序,这两个代码都是可以的,再运行一下给大家看看效果是是不是,是利绪吧,这里面我们只调用了这个 rebo, 接下来了就是排序了,排序了,调用这个哨,那现在我们这里面不能拿着当前这个列表进行排序,因为当前这个列表没发现吗?他没办法比较, 有一些呢是整数,有些呢是自创,有些呢是一个复杂的对象设置,本身还是个列表,对吧?所以它没办法针对当前这个列表中的每个元素进行比较。那我们就弄一个新的 l s t 啊,网约奔跑,我们要不全是自我唱,要不全部都是数字,知道吧?都可以,这就排序了,一般了,是同样类型的才好排序,对不对?才好比较嘛,因为排序肯定需要用到比较,那我们是全部都是数字吧,比如说我们这是四九,冒写的是九十八,三十二, 然后二,然后十二。好,就就搞这么几个吧。接下来了,我们就调用一下 s l s t r 点少少,什么这个,这个,我们仓什么操作不接,然后我们打印一下,确认着 l s p r 什么操作不接。打印完之后呢,你可以看到他现在已帮我拍过去了,二四九十二升序,对吧?什么都不接,他就是升序。嗯,其实你想,你要想立序的话了,加一个 reverse 等于处, 那么他就是逆序了,来开了吗? reverse 其实就是刚刚我们说了,其实这是反逆序的意思,等于处就是可以逆序。确认逆序的意思就是你不接,那他就是升序,对吧?如果你接一个 reverse 也是处了,那么他就是倒序,或者叫逆序都行。 好吧,四五串也是也可以,四五串也是根据这个 x 码值来进行排序的。好吧,好,接下来最后一个就是 for 循环的变例, f 循环便利的,其实非常简单了,我们之前讲过 f 循环,它只是针对一些虚列,针对一些可叠的对象来进行循环的,比如说我要拿到其中的每一个元素,用 i, 用变量 i, 后面接 l, s, d, 对 吧?这就是便利嘛,对吧?出人者 i 每一个元素都打印出来,并且换行,是吧?这不是每一个元素都打印出来了吗?对吧?好了,这是 f 循环,是非常简单的。好,那关于这个列表的相关的操作,我一个一个的都给你讲了, 那这里面呢?说实话,说这个哪些是重要的?肯定切片比较重要。好吧,然后呢, pan 的 最佳的函数,添加数据的函数比较重要,以及 p, o, b 这个删除的函数也蛮重要的啊。其他的呢?是可能会用到,可能不会用到,一样道理。大家是敞文的,记得点赞关注哦。

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

拍放,每日学一个小知识,今日学习 intersection 函数。 intersection 函数的作用是求两个或多个集合的交集返回一个新集合,包含所有集合中都存在的元素,不修改原集合。 使用语法固定写法, set 一 intersection set 二, set 三,参数为一个或多个集合,可迭代对象、列表、源组等。注意要点是,一、返回新集合,原集合保持不变。二、无共同元素时返回空集合。三参数虚伪,可迭代对象。 下面将十秒案例展示,稍后提问。 提问, s 一 等于十二十三十 s 二等于二十三十四十 print s 一 intersection s 二的运行结果是多少?知道答案的小伙伴把答案打在评论区。