拍损零基础入门第一章一点十数据类型转换大家好,欢迎来到今天的拍损小课堂,今天我们就学一个超级实用,天天都要用的技能,数据类型转换。在开始之前,我们先简单回顾一下上节课学过的几种常见数据类型 等数福点数、字母串,还有沃尔兹。在写代码的时候,你经常会遇到一个问题,这个数据的类型不对,用不了。比如你想做计算,可它偏偏是文字, 你想拼接文字,它又是数字,这时候就需要把一种类型转变成另一种类型,这就是我们今天要学的数据类型转换。学完这节课,你将掌握自动转换原理、强制转换方法以及如何避免常见错误。首先我们来看第一种 自动类型转换,也称之为影视类型转换,意思就是拍损自己会帮你转,不用你手动。 比如整数和浮点数一起算的时候, high sum 会自动把整数变成浮点数,结果更精确。像五加三点一四, high sum 就 会自动转成浮点数,结果就是八点一四。还有布尔值。 two 和 force 在 计算的时候, two 会被当成一, force 当成零, 所以 to 加一等于二, force 加一等于一。不过要注意一点,不是所有类型都能自动转换,比如数字和文字就不能直接放在一起运算,拍损会报错。这时候就需要第二种 手动强制转换,也叫显示转换。拍损给我们准备了三个最常用的转换函数,第一个转整数,福点数转整数会直接砍掉小数点后面的部分,比如三点九九转整数,结果是三 字母串,转整数里面必须全是数字,不能有字母符号空格。比如一百二十三能转成一百二十三 a 一 二三就不行 或值转整数就会输出一, fos 会输出零。第二个转福点数,整数转福点数会自动加上点零,比如五变成五点零。 字母串里如果是正常数字或带小数点也能转。比如三点一四可以转成三点一四去转福点数是一点零, fos 是 零点零。第三个转字母串, 这个最简单,什么类型都能转成文字,数字四十二可以变成四十二。福点数三点一四去和 fos 转字母串还是去和 fos 不是零和一?前面我们说过,数字和字母串不能直接运算,想把它们拼在一起,就要先把 数字转成字母串再拼接,这样就不会报错了。好了,今天的内容就讲到这里,简单总结一下。首先学会了 python 的 自动类型转换,然后掌握了 int、 float 三个强制转换函数, 最后知道了哪些类型不能混用,怎么避免出错。课后你可以自己多试几组不同类型的转换,看看结果是什么。 最后我留了一个小练习,大家动手做一做,就能把今天的内容彻底练熟。下节课我们将正式进入第二章,学习更多的 python 基础语法。
粉丝225获赞539

将规定字母串转为列表后,去重看一下题目要求,首先创建一个空列表啊, s t r 杠历史使用负循环来便利字母串啊的每一个字母,并将每个字母呢添加到什么列表? s t r 杠历史中, 将列表 s t r 例子转化为集合的 set 杠例子用来去重什么重复项,最后使用这个缩减的函数对集合进行一个什么排序,打印排序后的列表啊,这里的知识点呢?有变量的赋值, print 输出啊, for 循环列表集合等等。好,我们一起来看下代码, 那代码总共就是这个样子的啊,首先要定一个什么字母串,字母串里面呢,就有什么有重复的这么一些字母啊,是不是两个 b 啊,两个 c 啊,两个 j 啊等等。 那么这个过程上我们怎么去做的呢?我们首先是吧把这里面的每一个字母给它取出来,放到我们的列表当中去啊, 是不是把它取出来啊,编辑这个字母串,然后什么给它添加到我们的空列表当中去,添加完之后呢?然后什么 再去给他进去去去虫啊,我们可以往上看出来,可以把什么把这个字母把这个列表给它转换成集合了,跟在函数对不对啊?转换成集合,那么这里得到什么?一个集合 哎,这个过程中什么在你转换之后它什么进行了一个去虫啊,这里是原模原版的是吧?把一个字母给它添加到空列表当中去了,但是在这里去转换成集合之后,它就会给我们进行一个什么去虫啊,因为集合有个特性,就是可以什么去虫啊, 最后什么再把这个去重完的这个集合进行一个排序,用缩减函数。 ok 啊,我们来看一下效果, 是不是字母串啊,变成列表之后就变这样了啊?本来是个字母串,现在是个列表,接着什么使用集合去重之后啊,你可以看到啊,就没有重复的了是不是? 是吧,本来有两个 b 啊,两个 c 的 是不是都只变一个了啊?这就是集合的一个特性啊。最后什么进行一个排序啊,最后以什么列表给它输出 啊?用缩底的一个返回值,是吗?是个列表啊,那么这就是这道题主要用到什么这个集合的一个特性去去重啊,然后这里面设计的什么四五串去变成这个列表啊,列表呢?又要变成什么集合啊,以及有一个缩底函数, ok 啊。

好,本次内容是各种类型相互转换,到目前为止我们已经了解了 python 的 基本数据类型,比如说赋减数、整数、括号等等。 给一个变量,我们可以通过 type 函数来查看它是具体什么类型,整数还是浮减数等等。 为什么要使用 type 来查看变量的类型?我们知道每一个数据类型对应的运算方法,还有一些运算类型是不一样的,尤其是当我们后面学到数据结构,比如 列表、字典,它们对应的方法是不一样的,所以一定要用 type 来查看。还有我们在后面在学习数据分析的时候,对于不同的数据类型,比如说是数据框或者序列等等,也是有不同的计算方法, 所以大家一定要记住 type 这个函数,后面我们也会给大家一定的演示。那么这些数据类型之间在 python 里面是不是可以相互转化的? 意思是整数转成浮点数或者字母串转成浮点数等等,答案是可以的,他们之间相互转化,这样对我们实际工作中非常有用。比如说我们要做一个数据分析,有的时候他们统计出来的一些信息, 比如销售量之类的都是字母串,我要对它进行一个求平均值,平均销售量等,这个时候需要把字母串转换成整数或者浮点数,再进行计算。那具体该怎么样去转化?我们用到的语法 或者说是方法是这样一个 float 或者 i n t, 第一个就是把变量 a 转化成浮点数, 第二个是把 b 转化成整数,第三个是把 c 转化成字母串,这三个需要我们跟背书一样把它给记住,背下来,哪怕你每天去背单词,一样把它给背下来。其实你查一下 float 就是 浮点数, int 就是 整数, string, str 就是 它的一个缩写,就是表示字母串,这是整个语法。 那么接下来我们使用 python 三剑客的 pycharm 进行代码演示,这里还是有个小建议,希望大家能根据视频敲一遍代码,所有代码已经放在左下角的参考资料。好,我们进行代码演示。部分 演示的知识点是类型互相转化,一共两个,第一个是使用 type 函数查看变量的类型,第二个是类型之间的互相转化。我们首先定义一个变量,它的值是一百名字 number, 然后我们使用 type 函数进行查看它是什么样的一个类型。我们运行一下代码, 我们可以看到它的类型就是整形, i n t 表示一个整形,这个就是它的一个输出。 那接下来我要把这个整形转换成浮点数,该怎么进行一个转化?我直接使用 float 这样一个函数即可,前面跟上我要转化的一个变量的名字,转化完了之后我要给它起一个新的变量名来保存它,比如 float number, 那 么这个时候我就可以去输出 float number, 我 们也通过 tab 查看一下它的类型,然后再输出它的值,我们看一下结果运行代码, 我们可以看到说它的类型已经变成 class float, 这个时候从 i n t 到了 float, 它的值已经从一百变成了一百点零,这个就代表是浮点数。 那么紧接着我们再把 number 转换成字母串,该怎么去转化呢?还是同样我们直接调用 string 这样一个函数,后面跟上变量,我们想要转化的名字,然后把它导存在一个变量里面,比如说变量的名字就叫做是 string number, 然后这个时候我转化完成了以后,还是使用 print type 查看一下,然后再输出好代码写完我们运行。 我们这个时候可以看到说 number 已经转化成字串,我们可以看到输出还是 str, 它的输出还是一百, 那么字母串能不能转化为整形或者是浮点数呢?这个时候我们知道 string 杠 number 已经是字母串,它的类型是 string, 我 要把它再转回来变成数字型,该怎么办? 我还是用同样的方法,直接使用 i n t, 后面跟上我要转化的变量名,然后转化完之后给一个变量存储, 那么变量就比如说起名字就叫 int string 杠 number 这个名字大家可以随便去起,只要符合变量的命名规则即可。这里有一个小的建议, 建议大家这个变量名一定是具有描述性的,看到变量名就知道它代表的意思,比如我这个变量名一看就是要把字母串转换成整型,对应的变量是 number, 那 么这个时候我就可以去查看它的一个类型, 那么我并且也可以去输出一下,我们看一下结果 我们可以看到说是 i n t 杠 string number 这个变量的类型已经变成了整形值还是一百,那么最后我们再看一个怎么样把字母串转换成浮点数,同样的我们直接调用 浮点数,后面跟着我们要调用的这样一个变量的名字,那么前面也是给它起个名字,比如叫做是 float 杠 number, 然后前面再添加一个 string, 为了跟前面的有一个区别。好,这个时候我们可以去查看它的类型,然后输出它的值。 好,我们运行代码,这个时候我们可以看到 float string 杠 number 已经变成了浮点数,它从一百变成了一百点零。好,我们转换结束,现在我们只是简单的很, 给出一个变量等于一百进行转化。在实际的项目中,可能给你的是一个 excel 文件或者一个 cic 文件,你需要对某一列进行去转换,这个和 一个变量的转化是一样的,不要看它需求很复杂,实质是一样,只需要记住说类型转化的几个函数, flood、 stream、 n, n, t 即可。 我们总结一下今天学的内容,本次内容主要有两个,第一个是函数 type 来查看变量的类型,这一点很重要。第二个是我们学会了 各种类型互相转化,有方函数。好,这就是我们这一节的内容,欢迎大家加入课后 qq 群与老师取得联系,有问题及时解决,谢谢大家。

小黄人,今天咱们来学习 python 函数的入门教程。首先我们来看一下目录, 好,首先我们来看一下什么是函数,它基本定义就是已经组织好的可重复使用的代码段啊,就可以用于实现单一或相关联的功能。它的核心作用就是提高应用的模块性啊,减少那个程序的代码, 就是显著提升代码的重复利用率。形象类比就是如同加工厂输入原材料,也就是参数,然后内部处理,然后就产出产品,也就是返回值。函数工作的原理是一图。 函数就像一个封装好的黑盒子,你只需要关注它的输入和输出,而不必关心内部复杂的思想体现。 如何定义函数,它的基本的语法结构如下, 代码是例,一个 great 函数向指定的人发出问候,当然有,这有个冒号,我们一定是要让它有缩进的,没有缩进的话就相当于也 python 的 这个。呃,文件判了死刑 好,如何调用?首先我们可以调用函数,把这个值啊返回给这个变量,然后再输出我们的这个变量,也可以直接把它这个值给它,给它输进去。 核心的调用规则使用,看一下语法结构,调用函数时,直接使用函数名加上括号,然后参数传递,如果函数定义了参数,就需要在括号内传入对应的值。 返回值处理,函数的返回值可以被赋值给变量,或者直接参与计算。 首先我们来看一下位置函数,就是加减,这个是返回值的意思,返回 a 加 b, 然后呢,再把这个调用过来,他就可以输出 a 加 b 的 值。 关键字的参数啊,就是可以用什么等于什么,但是跟顺序无关。默认参数就是好直接给他给赋了个值啊。 可变参数就是接受任意的数量的参数啊,这个就是填这个 x, 大家一定要记得加上缩进。有返回值的函数,就是可以 resort 等于 square 五就输出二十五,然后 无返回值的函数,就是哦,啥都没有。核心知识点总结,如果 return 语句可以将这个结果返回给调用者的话,那就支持单个值或者多个值, 如果函数中没有 return 语句,或者 return 后没有值,它就默认返回 no 变量的作用域代码是里。 首先我们定一个全区变量,然后呢?这是局部变量,局部变量就是只能包括在这个函数里面的 啊,然后就可以输出这个局部变量值,然后这个就输出这个呃全区变量的值。全区变量通俗一点说就是在呃函数之外,然后呢,局部变量就是在函数之内,但是啊,我们可以使用这个 global 语句, 好使用,然后让这个里面的一些呃语句。首先我们定一个函数,假如我们定一个 啊,就是相加函数有一个 a 参数和一个 b 参数,当然这里不填参数也行啊。假如我们就首先啊,先定一个东西,定一个函数,比如说里面 print hello world, 就是 就是呃打招呼的函数里面啥参数都不填,但是直接调用它就可以呃输出 hello world 来,我们来看一下 great, 这里面啥都不填,直接运行, 我们能看到 hello world 就 被调用出来了。好,但是我的名字不叫 word, 我 的名字叫小黄人,我们就可以填一个参数 name 在 里面就可以 print hello, 然后呢,后面就是可以填上加上我的 name, 然后再调用,就一定要把这个参数填上,小黄人, 他就输出。哈喽,小黄人,嗯,有可能这里大家可能会一头雾水,我来给大家解释一下啊,就是呢,这个空, 就是你定义一个 name, 就是 name, 就是 参数,这个参数就是相当于一个变量, 然后呢,这里输出,这里调用的时候就输出这个参数里面的变量,然后呢,我们把它调用出来时候,这个变量复制为小黄人,然后就调用到里面的 print, 后面的这个 name 就 被复制为了小黄人,于是他就会输出。 hello, 小 黄人 哦,当然它里面也是可以有多个参数,但是呢,这是得排序的,那比如说 name 一 啊, name 二, 但是呢,这有一个缺点啊,是什么呢?是,比如说我必须得填很多人啊,比如说,嗯,我必须得按顺序,比如说第一个是小红人,第二个是小红人,第三个是小白人,是吧?我们必须得按顺序, 这样我们就可以使用到这个。哎呦我去,这样我们就可以使用到一个 name 等于 no 啊,你啥都没有。 我们来解释一下这个 name 等于 no 是 什么意思?就是说我们也是定义一个 name 变量,但是好,我们让它给它赋值为 no, 也就是啥都没有,但是呢,我们可以不用按顺序来填好,比如说像这样子 age 等于 no。 好, 然后我们就输出,比如说 name, age 碎了, 好,我们可以使用这样子啊,比如说 age 啊, age 等于,比如说 age 等于十三,然后呢, name 等于小黄人。 你不按它的顺序,也不按它的套路出牌啊,它还是可以 哦。我知道是啥意思了,因为 print 它本身就是一个函数,如果你把它填 age 等于十三的话,它就会误以为 age 就是 这个 print 里面的一个参数。但是呢,它其实是我们 great 里面的参数。 所以说啊啊还是搞混了。应该挺 great 啊。我们 name 等于十三啊。不对, age 等于十三啊, name 等于啊。小黄人, 我们来再来试一下它肯定是可以啊。对,输出了。小黄人十三岁了啊。那我们这节课就到这里,拜拜。

pasa 学习三十天,从入门到精通第三十天函数的定义学 python 我 只看糯米哦!哈喽宝宝们,今天我们要学习的是 python 中的函数。 其实我们可以把函数想象成一个盒子,我们先教他怎么做一件事,比如计算打印消息之后,我们只要喊他的名字,他就会立刻帮我们完成计算和打印消息。 其实我们早就用过函数了,比如 print 是 用来输出内容的, input 是 用来接收输入的,这些都是 python 自带的内置函数,相当于别人已经帮我们做好的盒子。今天我们要自己动手写一个专属函数,叫做自定义函数。 那么我们该如何创建一个函数呢?其实写一个自定义函数,它的格式非常简单,下面这个代码就是我们函数的格式了。 这个 def 是 define 的 缩写,当我们看到这个 def, 就 知道接下来要新建一个函数了。 d f 后面接着是函数名,函数名是我们自己命名的,我们可以随便取个名字,但是取名的时候是要满足赋值变量的规则,就是不能以数字开头,也不能有空格。 函数名后面必须跟一对小括号和一个冒号,然后下面就是函数体。函数体前面必须加上缩进。 函数体就是我们要让代码执行的具体任务,比如 print, 打印 input, 让用户输入信息等等。接下来我们动手写一个小函数,作用是友好地问候一下别人。这里先打个 d f, 然后给函数命名为 great。 接着是加一个括号和一个冒号,再回车一下,下面就要写函数体了,这里先打个 print, 括号里面就写,你好呀,今天过得怎么样?那么这样一个问候语的函数就写好了。这里有一点值得注意的是,函数它是不会自动运行的, 我们要让函数真正工作,必须调用它,那么调用它的方式其实就是换行一下,然后打上函数名,加个括号就可以了。我们来实践一下,比如这里换行一下,然后打上 great 的 函数名,再加个括号,接着我们来运行一下代码, 这里就可以看到运行出来的函数的结果了。函数的好处就是我们只需要写一次代码,然后就可以无数次的调用这个函数。罗米来总结一下函数的两个关键步骤,我们事先要把函数的结构写出来, 然后我们需要调用函数,就是写函数名和括号就可以了。只要我们学会了这两步,就能把任何重复的代码包装成函数,让程序更整洁,更聪明。 那么今天的课程到这儿也就结束了,下一期糯米带宝宝们去进阶 python, 关注糯米三十天,带你掌握 python!

五小时带你速通 python 写代码的时候就别再复制粘贴了,学会 python 四定义函数,一次封装,无限次的复用,效率翻倍。那我们先明确一下什么是函数?其实我们一直都在用函数了,比如说打印用的这个 print, 还有我们算绝对值的 a、 b、 s 是 这样使用的,求长度的 l、 e、 n 这些都是函数,只是呢,他是 python 当中内置的函数,我们不知道他内部是怎么实现的,我们也不需要知道,你只要会调用就行了。我们今天学的是说我要怎么样创建属于我自己的函数,我们会把一些比较重复的代码和功能给它封装起来,这样我只需要写一次, 使用的时候直接调用,效率非常高,代码也特别好维护。先看一个返利,假如有这么一个场景,我们要计算多次奶茶团购的价格,第一次团购的时候买了三杯,第二次团购的时候人多了,买了六杯, 第三次团购八杯。假如不定义函数,我们看代码怎么写,感受一下新建第二十七个 python 文件。关于函数的, 先定义一个变量,标记奶茶的价格先写,第一次团购买三杯 top 一 等于三,一杯奶茶假如十八元, 那么团购总价放到这个变量当中,我们打印三杯奶茶的价格。第二次团购六杯奶茶的团购规则,我们写到前边每杯十八元,满五杯可以减二十元,逻辑是类似的,咱们注意这个满减, 这有优惠了,满五杯就是十八乘五九十,我们可以复制粘贴改一下六杯奶茶总价格,先运行一遍, 三杯五十四,六杯八十八没问题,如果我又团购,我买八杯是不还得再写一遍哦?这回咱们就记忆原来改了复制粘贴,一次团购八杯,这复制粘贴其实也挺容易出错的,该改的地方都得改。这个变量 cap 三是八 头,头三等于 cap 三三三三八三没问题。我们再总结一下,三次团购的代码,逻辑几乎是一样的,那如果团购第四次、第五次、第一百次,这个代码这样写就太难看了。 而且你每次的复制粘贴其实非常容易出错的,代码是特别不好维护。最怕团购的规则变了,比如说改成满四倍减二十, 你是不是每次团购都得检查一下,做相应的调整,这就是不写函数带来的一些痛苦。那我们现在解决这个问题,看怎么定义自己的函数,语法非常简单, d f 关键字函数名,括号里面填上参数, 接下来写你要封装的那些重复代码,使用函数的时候调用一下就行了。把刚才这个问题,我们用私定义函数重构一下,先写关键字 d f 函数名, 计算奶茶价格,你可以写的直观一点,需要传一个参数,你团购多少杯,后边是有冒号的重复代码呢?记得要缩进。我们先定义每一杯的价格,这有一个好处,如果哪天奶茶的价格调整了,涨价了,你这个地方改着变量就行。满减也给他做成一个变量,是满五杯减二十, 那就是满九十元,我们算一下总价格乘以参数一共多少倍,如果达到满减了,我们给一定的优惠,减多少减二十,也可以把这个二十放到一个变量里,给一个提示输出就行, 运行是没有语法错误的,函数是定义好了,那么该调用它了。这调用的方法非常的简单,直接写一个函数名,把参数传进去,咱们现在团购三次,三六八,你团购一百倍都行, 没有压力了。大家看之前的结果跟现在封装之后的结果是一样的,我们已经能够感受到函数的优势了,只需要一次调用, 即使现在团购的规则发生变化,比如说每一杯的价格满减的这个预值,它如果变了,咱们只需要在函数内部做一些局部的调整,然后调用部分不受任何影响。所以函数写了之后,代码就变得更好维护了。定义函数的时候,代码就变得更好维护了。定义函数的时候,代码就可以去适配一些比较复杂的场景。我们再看一个场景, 计算网购的满减,不同的商品他有不同的原价,满减的门槛,包括不同的优惠金额,所以我们将来写函数的时候,就要把这些变量都给它传进去。第一个参数原价,第二个门槛,第三个优惠金额。我们再建一个拍摄文件, 先写个注是 f 关键字,第一个参数原价,第二个满减的门槛,第三个减的金额。这个逻辑就很简单了,看你达到哪个档次了, 最终价格如果没有达到这个满减的门槛呢?就是原价,给一个友好的提示,原价多少,我们最终价代码就稍微有点长,我们调用一下我们传的这几种情况,因为商场的规则是经常变的,所以这些东西作为参数传进去更灵活, 结果没问题,再给大家看一下日常当中非常实用的场景,比如第一个咱每个月的手机的话费,那基础的套餐, 比如三十九元,超出一 g 的 流量加五元,那这个时候你这个函数模型就是要不同的流量使用,这样产生多少不同的话费, 这种场景特别适合写成函数,我们看怎么实现。定义一个函数计算话费的,这里要传一个参数,你用了多少流量? 基础套餐费三十九,套餐内包含二十 g 的 流量,那如果你超过了,是要额外收费的,超一 g 五元做个减法乘五吗?这两个得加一块,再给个提示,那如果没有超过,就是一个基础费用。给一个提示,先提示你用了多少流量,然后告诉你总话费转几个参数,调一下 只用多少流量,最终你的话费是多少。可以的。类似的场景,比如说我们生活当中打车起步价是三公里以内八元, 不同城市可能不一样,是超出一公里一点五,这个场景也特别适合我们封装一个函数,大家可以自己写一下代码,写到评论区,想看完整版拍森教程的同学你可以预约领取。另外呢还给大家提供了一些关于拍森的项目,拍森人工智能的学习路线,有需要的小伙伴可以领一下,加油!

pason 从入门到精通第二阶段第一章一点一函数的传餐学 python 我 只看糯米哦!哈喽宝宝们,今天我们要学习的是 python 中函数的传餐。那什么是函数的传餐呢? 我们可以想象一下,当我们去奶茶店点奶茶的时候,我们告诉店员,我们需要一杯奶茶。如果只说这一句话,那么店员就只能做一杯普通的原味奶茶。 但如果我们说需要一杯珍珠奶茶,或者需要一杯椰果奶茶,店员就会根据我们的要求在奶茶里加上不同的配料,这里的珍珠和椰果就是参数。 参数的作用是,我们可以告诉函数今天我想在奶茶里加什么料,他就会按照我们的指令做出不同的饮品。 这样一来,一个函数就能应对多种需求了,我们也不用为每种口味都写一个函数,这样既可以让代码变得简洁,又变得更加灵活。那么参数的结构该怎么写呢?函数的传餐基本结构就是像下面这样子,这里是在原有的代码上面加上了一个行餐和食餐, 行餐是在函数名后面的,行餐的意思就是形式参数,它只是一个占位符,表示将来会收到一个值,然后在函数体里面,我们一般用的也是行餐。 时餐在调用函数的时候,在括号里写上真正的数据,这个就是时餐,表示的是实际上的参数,它未来会代替掉行餐,比如这里的行餐都会变成数字一, 这个就是函数传餐的基本结构了。糯米这里带宝宝们来实践一下,我们就来写一个点奶茶的函数, 假设客户在点奶茶的时候可以选择加配料,比如珍珠、椰果、奶盖等等,也可以选择甜度,比如全糖、少糖和无糖。我们这里就开始写代码, 这里先写个 def, 然后再是函数名,这里就变量为 milk tea, 就是 制作奶茶的意思。接着就是要写行餐了, 这里先打个括号,这里我们就用 toping 作为行餐, toping 就是 配料小料的意思,下面我们就要写函数体了,就是实际的运行代码,这里我们就提示顾客,奶茶正在制作,这里就先打个 print, 括号里面就输入正在制作一杯加 toping 的 奶茶。这里有两点我们需要注意。第一点是我们要把这个 toping 转化为字典的数据类型,就是要给他加上花括号, 因为传餐本身不是一个固定的数据,这点宝宝们要记住。第二点就是这里我们既有字母串的数据类型,又有字典的数据类型,所以我们要把这一个整体转化为同一个数据类型, 就是在前面加个字母 f, 这点糯米在之前的教学视频中也有讲到过,在前面加字母 f, 可以 把这两类数据类型统一转化为字母串的数据类型,这两点宝宝们一定要牢记哦。 接着下面再写一个 print, 提示用户,奶茶做好了就括号里面输入您的奶茶做好了请享用。 我们接着换行一下,开始调用函数,这里先写函数名,就是 milk tea, 然后括号里面就写入我们的实际参数,比如珍珠,然后复制一下这个代码, 再粘贴一下,这里再把珍珠换成椰果,也可以换成奶盖等等。这样一个点奶茶的小程序就被我们写出来了,我们来运行一下代码, 可以看到这里的行餐会随着我们输入的时餐变化而变化。这里糯米想再点奶茶的时候让选择更加丰富一点,那么我们就可以增加第二个参数。增加第二个参数其实很简单, 就是在原有的行餐上面再写一个行餐,比如在这个滔聘的行餐后面加个 shiger, 这个 shiger 是 甜度的意思,然后下面的函数体也加个 shiger 的 字典数据类型。 这样我们就有两个行餐了,一个 topping 就是 配料小料的意思,另外一个是 sugar, 是 甜度和几分糖的意思。那么我们在写时餐的时候也要写两个时餐了,这里就写个全糖和扫糖,这里也可以加个无糖。 我们来运行一下代码,这里就可以看到我们一个函数就能做出不同配料和不同甜度的奶茶。最后糯米来总结一下,首先是参数的定义,参数是函数接收外部信息的入口,就像点单时告诉店员你要加什么料,要什么甜度。 再是参数的作用,参数可以让函数更灵活,能应对不同的输入,避免重复写相似的代码。接着是参数的结构,主要分为行餐和食餐这两部分, 那么今天的课程让我们掌握了如何让函数听懂指令的技能。下一期糯米要讲解的是如何让函数把结果交还给我们,也就是函数的返回值。关注糯米持续带你掌握 python。

五小时带你速通拍算!上次课我们学了如何创建自定义函数,今天咱们搞定两个间接知识点,变量的作用域和函数的返回值,你的代码会更强大,更规范。什么是变量的作用域呢?通俗的说,变量的作用域指的就是变量的使用范围。 举一个生活当中的例子,我们自己的水杯是不是只能自己用?它就像在函数内部定义的变量, 当然也只能在函数内部去访问,你外部是无法出答的,那你的水杯别人拿着喝水,那太不合适了,那对应的像公司的饮水机,它就是一个全局的变量,饮水机里还有没有水,大家都能看到,而且都可以去饮水机那接水喝, 这就像函数外部的全局变量。我们先看一个错误的例子,你来测一下会不会踩坑。这个场景是算奶茶团购的价格,我先定义一个外部变量, 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 你 是用不好的,所以老师还是给大家把这些基础知识讲一讲,你也要跟着敲跟着练的,加油!

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

好,同学们,那么这一小节啊,咱们要讲解的知识点呢是函数的参数的作用,同学们注意啊,老师这里必须必须提前讲,咱们这一小节讲解的是参数的作用以及最简单的参数的写法。 什么叫最简单的参数的写法啊?老师提前说,在咱们 python 编程语言当中,函数参数的写法有好几种写法, 那么所以呢,我们马上要学习的函数的参数的作用,只站立在最简单的参数的写法的基础之上,了解一下最简单的写法以及作用就可以了。那么随着课程的推进啊,我们会逐步的把函数参数的其他写法都做逐一讲解就可以了。 好,那首先啊,老师呢,先不明确,直接说明函数参数的作用,出一道思考题,哎, 接下来啊,老师提一道需求,这个需求呢是说一个函数完成两个数字一和二的加法运算,那程序怎么写啊? 哎,非常好,这个我们同学是不是应该都会写 d f 函数名小括号,冒号回正化行缩进, 然后把一加二的结果是不是复制到 result 变量里面,并且 print 打印 result 是 不是就可以了? 那么这个时候呢,当我们去调用这个函数的时候,那么函数题里面缩进的代码是不是都会被执行,那么最终控制台是不是将会打印 result 这个变量,对不对?哎, ok, 那 么这是我们最简单的一个函数,完成两个数字的加法运算,这个需求是不是就完成了? 但是接下来老师紧跟着啊,要问第二个问题了, a d, d i 的 number 一, 这个函数在现在这种情况下,是不是只能计算一和二的加法,结果对不对? 那比如说啊,老师如果站立在这样的需求,想要让这个函数啊变得更灵活,现在呢只能算一和二加法,那将来如果我们想要让用户指定两个数字,只要任意指定两个数,我们这个函数都能给他计算加法, 那么这个时候程序该怎么办呢?那同学们想想啊,咱们 i 的 number 一 这个函数是不是程序固定是一加二,那么这个时候用户是不是根本就没有办法传入他想要的真实数据,对不对? 那么这个时候在咱们编程语言当中会怎么做呢?听老师讲啊,我们一般会在定义函数这个地方,准备两个等待接收数据的参数, 当函数调用的地方,用户根据自己的需求书写真实的数据就可以了, 那么这样的话,将会把这个地方用户写的真实数据传入到函数里面来, 然后呢再做加法计算,那是不是就是用户书写什么数据,就把什么数据传入到函数里面,将来做预算的是不是也就是什么数据?那么这样的话,我们这个函数使用起来是不是就会更加灵活了,可以运算任意两个数字做加法了,对不对? 好,那么这同学们注意啊,老师说了,是不是在这可以写参数,是不是在这也可以写参数,那么所谓这个地方书写的和这个地方书写的,这就是参数,所以那么总结一句话,参数的作用是什么呢? 就是让我们的函数能够变得更加灵活,因为我们可以在书写参数之后,用户是不是就能传入真实的数据,让真实的数据带入到函数里面再做运算了,对不对?哎,那么这就是我们参数的作用, 那接下来啊,同学们跟着老师一块啊,咱们把刚才思考过程的这些代码,咱们把它实现一遍,由最简单的 固定一加二做加法,再去看一下参数的写法,咱们利用参数传入真实的数据啊,好了,那接下来同学们跟着老师一块啊,打开拍叉模, 在拍叉模里面啊,咱们这里边要做两个实验,第一个实验呢就是我这个函数固定数据是一和二,然后干什么呢?做加法, 然后第二步的话,我们是不是就是参数形式传入真实数据,然后呢是不是做加法运算是不是就可以了? 好,那么这两个步骤实现之后呢,首先我们来一个固定的啊,定义函数是不是 d e, f, 咱们来一个 i 的 杠 number, 比如说一这个函数,那接下来敲冒号,比如说我们来一个 e, f, u, l t rad 这个变量接收什么呢?一和二的结果, 并且想要看结果,我们是不是把它打印一下,那么这个时候啊,当我们去调用 i 的 number 一, 朋友们,当我们右键 run, 咱们来看一下,是不是既得到一和二的加法运算的结果是不是就是三啊? 对吧?哎,那么这个需求,我们第一个固定数据的加法运算是不就已经搞定了?那么接下来啊,咱们再来看第二个, 因为我们的 i 的 number 一 是不是只能计算一和二做加法,那么这个时候如果想要传入真实的数据该怎么办呢?朋友们跟着老师回到笔记当中,咱们先分析一遍代码,再自己写啊,打开笔记,在笔记里面向下滚动,朋友们来看啊, 重新定一个函数,这个函数呢,是不是 a, d, d 杠 number 二名字后面小括号里面,我们说是不是就书写参数的,但是同学们注意啊,这个地方是不是 a 和 b 两个参数, 将来做运算的是谁呢?是不是 a 和 b, 再打印 a 加 b 之后的结果。同学们来看,调用函数的地方, i 的 number 二小括号是不是写了十和二十,是不是这两个数据?那老师说一下啊,写在函数调用的地方的地方的, 是不是才是将来真正做加法的十和二十?那将来是不是就把十和二十是不是传入,传入到哪去呢?是不是传入到我们 定义函数的 a 和 b 这个地方?那么接下来老师问问题啊,将来做加法运算的是 a 和 b 还是十和二十? 哎,在我们现在的条件下,是不是就是十和二十?那么所以也就是说啊,此时此刻在这种条件下,是不是把十和二十分别传入到 a 和 b 这个位置,然后再做加法运算,对不对? 十和二十是真实的数据,那么这种真实的数据呢,我们应该一般给他定义了一个名字啊,叫做时餐, 哎,叫做实参。那么对于 a 和 b 这两个参数是真正做加法运算的数据吗?不是,他是不是只相当于是一个占位符号,将来是不是把真实的数据是不是传到这来, 哎,就是一个接收数据的这么一个占位符,对不对?哎,那么这样的这个占位符,我们一般在工作岗位下学习当中,我们都叫他为行参,因为他是等待接收数据的参数,那我们叫他为行参, 真实数据的参数叫做它为实参,特别这两个概念要区分一下,简单理解,调用函数的地方是真实数据,那么所以叫实参。定义函数的地方只是一个形式上的一个占位符号,等待接收数据,那么这样的 a 和 b 的 行餐,那么叫做, 哎,对,刚才老师都说漏了,对不对?哎,叫做行餐,这样的 a 和 b 的 参数叫做行餐啊,好了,那么当然啊,老师再额外问一个问题,非得叫 a 和 b 吗? 其实不是,就跟我们一个变量名一样,程序员自定义的满足标识符命名规则就可以了,所以这里面可以叫 a, b, c, d, x, y 是 不是都可以,对不对?好,那么代码分析了一下之后,朋友们跟着老师回到拍掌当中来,咱们自己定一个带参数的函数,再去用它啊,打开我们的拍账, 在 python 里边啊,这里边我们来一个 d, e, f, 比如说这个函数名呢,我们叫它为 i 的 number 二,小括号,是不是传两个参数,那比如说 a 和 b 这两个, 然后叫一个冒号,接下来呢,我们 r, e, s, u, l, t, result 这个结果啊,我们让它是 a 加 b, 就 不要再写一加二了,对不对?然后呢,在此基础之上,我们再打印 result, 哎,再打印它,那么打印之后啊,我们现在同学们注意啊, i 的 number 二, 当我们代码提示的时候,同学们看啊,是不是让我们传入 a 和 b 这两个参数,将来要接收的真实数据,对不对?这个时候啊,老师提前说,要不传会报错的,一会咱们再做测试啊,先按照正确的写,那我们来一个 i 的 number 二,比如说传入一个十逗号,再传入一个二十, 那么传入了真实数据之后,当我们再去右键 run, 同学们注意啊,走,你 是不是就是三十这个数据,那么这个时候啊,同学们来看,如果老师再去调用 i 的 number 二,比如说传入一个一百逗号来一个两百,同学们右键 run, 咱们来看一下啊,是不是就是三百这个结果, 所以同学们来看一下啊,由于 i 的 number 二这个函数是不是定义了参数,将来用户传什么数据进来,将来做加法运算的是不是就是什么数据?所以那么参数的作用是什么呢? 哎,是不是就是让我们这个函数使用起来更加灵活,可以适用更多的爱工作场景, 对不对?哎, ok 啊,那么这是我们参数的写法,那么当然刚才老师说了,这里边同学们注意啊,定义函数是不是 a 和 b 两个参数,传入的数据是不是也得是两个,但是如果不是两个呢, 对吧?咱们再来一个调用啊,比如说就传一个一百,那么现在右键转,同学们注意来看,是不是就报错了,哎,这是丢失参数的意思啊,所以说,那么这个地方啊,我们敲一个注是,哎,这一行代码啊,他是报错的,哎,报错的 报错,因为定义函数有两个参数,那么传入数据也要是两个, 对不对?哎,这个地方同学们要注意了, ok, 那 么这个关于函数参数的一些写法以及它的作用讲解完之后啊,同学们跟着老师回到笔记当中,来,咱们做一个回顾啊,打开笔记, 在笔记里面同学们来看,那么我们为什么要有参数呢?因为有了参数的函数是不是就适用于更灵活的一些工作场景了?传入什么数据,运算的是不是就是什么数据,对不对? ok, 那 么接下来同学们来看啊, 定义函数的时候有两个行餐,这就相当于是一个哎占位符,将来接收真实数据。那么调用函数的时候,传入的真实数据个数是不是也得是两个?因为这两个地方的个数是不得是一样的, 对不对?两个行餐,两个时餐,调用函数的时候是传入了真实数据,所以叫时餐。 定义函数的时候,只是相当于定义了两个占位符,将来去接收真实数据,那么这个 a 和 b, 我 们叫它为哎形残。好了,那么简单的啊,把我们这个知识点讲解完了,做一个回顾,老师把咱们的视频啊稍微暂停一下。

拍放,每日学一个小知识,今日学习 format 函数。 format 函数的作用是对字幕串进行格式化处理,将指定直按格式嵌入字幕串中,实现灵活的字幕串拼接与样式控制。 使用语法固定写法, st 二、 format 星号 arcs 星号星号 corks st 二为含站位符的字母串, arcs 为位置参数, corks 为关键字参数。注意要点是,一、站位服用表示可指定位置格式,如数字精度。二、 支持位置传餐、关键字传餐两种方式。下面将十秒案例展示,稍后提问。 提问执行姓名 name 年龄 h format name 等于张三 h 等于二十会返回什么结果?知道答案的小伙伴把答案打在评论区。

autumn 零基础入门第五章五点四高阶内置函数嗨,大家好,有时候我们想快速处理列表里的每一个元素,那该怎么办呢?今天这个视频我们就来认识一下高阶函数中的内置函数。 通常如果要对列表中每个元素做操作,我们都会用循环来便利所有元素。比如现在有这样一个列表, 我们希望得到一个新列表,得到原本列表中每一个元素的平方数。按照之前学过的写法,可以用负循环便利便利原本列表中所有元素,并且对原本的元素进行平方处理之后填充到新的列表中。 那么有没有办法不用循环就能对列表里所有元素进行统一的处理呢?在高阶函数中,我们可以借助一些更高效的内置函数来实现,比如 map 函数,它能更优雅地帮我们把处理完的值填充到列表中。你可以把 map 想象成一条传送带, 它会将原本列表中的所有元素数据一个个的传送到需要处理的函数中,然后把处理结果收集起来返回给 python。 那 么具体怎么使用呢? map 函数中需要传入两个参数,第一个参数传入的是一个普通函数,通常是对每一个元素应用的函数。例如,在这里我传入的是一个匿名函数,会返回每一个传入的参数 x 的 平方数,而 map 函数的第二个参数为可迭代对象。这里我传入的是 numbers 这个列表。 numbers 列表中的每一个元素进行平方处理,因为它会把每一个元素都传入到这个匿名函数 number 中。 需要注意的是,高阶函数里的这些内置函数,返回的通常都是可迭代的数值,并不是真正的列表。如果想要将其填充到新的列表中,那么就必须使用到 list 转换。你可以把 map 看成一个食品加工厂,输入的列表是原材料,加工机器,就是 map 函数 加工完的数值。只有用 list 包装好的新列表才算是一个好的产品。高阶函数不仅能按需求填充成为新的列表,还能过滤掉不需要的元素, 这时候就可以用 filter 函数。它的语法和 map 很 类似,也是传入一个普通函数和一个可迭代对象。比如现在有一个乘客列表,这个列表里面有四种人员。 filter 就 像一台安检机,它会自动放行安全人员,拦住可疑人员。当我们写一个函数,设定要过滤掉可疑人员和带危险品者时,用 filter 就 能直接过滤掉不符合条件的元素,得到一个新列表。 如果你需要对列表中所有元素进行累计计算,也有对应的内置函数 reduce。 reduce 函数在 founter total 中,所以使用前需要先引用这个模块,然后再使用 reduce 函数。 在 reduce 函数中有三个参数,第一个是一个二元函数。什么叫二元函数呢?就是指这个函数必须接收两个参数,比如左边这个 total weight 总重量这个函数中传入的这两个参数。 reduce 函数的第二个参数是可迭代的对象,我们依然可以传入列表或圆组等可迭代的对象。 第三个参数是出使值,这是可选的,不选时默认为零。出使值会作为第一次计算时的数字,比如左边这个例子,我们用 reduce 调用 total weight 函数,然后将 packages 这一个列表传入到里面,并且第一个出使值为零。 第一次传入 total weight 时,第一个参数是零,第二个参数就是列表中的五,这样就完成第一次计算。之后,它会将列表中所有的元素变为一次,第一次得到了初始值,加上列表中第一个元素的值。 第二次进行计算时,这个 a, c, c 参数就是五,而第二个参数就变成了列表中第二个元素,以此类推,直到便利完整个列表。你可以把 reduce 想象成叠三明治的过程, 每次都会叠放一层数据,最后才能做成一个完整的三明治。好啦,接下来是练习时间,我们来领略一下内置函数的魅力吧。 在 python 中,我们有这样一个价格列表,现在我们需要将价格列表中的每个元素都增加十元, 并且来计算出新价格表的总价格和过滤掉低于十五元的元素。那么在这里,我们需要将每一个元素都增加十元。我们可以写上一个函数, a, d, d 十元, 然后在这个列表中,我们写上一个数字,每一次返回这个数字加上十的结果,创建了这个新的价格列表,我们叫做 new price。 在 这个新价格表中,我们需要将原本列表中的元素,每一个元素都增加十元。那么需要使用上的就是 map 函数。在 map 函数中传入这个普通函数和我们想要操作的列表,因为 map 函数返回的是一个可以迭代的数组,并不是一个列表。那么我们需要在前面写上 list, 将它转换为列表之后才能够填充到 new price 中。现在我们来打印一下这个列表是否能够成功填充呢?可以看到已经变成了十一一二,十三,十四,十五,十六,十七, 也就是每一个元素都增加上了十元。得到了新的价格表之后,我们再来计算新价格表的总价格。 计算列表中的每一个元素,我们需要使用到的就是 reduce 函数。 reduce 函数必须要导入一个 function choice cool。 那 么在文档的前面呢,我们写上 from function tools import reduce, 然后我们再来使用 reduce 方法。在这里我们写上价格 total, 用来保存新价格列表中的总价格。使用上 reduce 函数,在这个函数中,我们可以传入两个值,也就是对它进行加法的计算。在这里我就不再创建一个函数了,直接对它使用上匿名函数 lambda, lambda 后面接着就是我们需要传入的参数, 因为 reduce 函数调用的普通函数必须是一个二元函数,我们必须要在里面写上两个参数,写上 x 和 y, 对 它们进行加法计算,返回的值就是 x 加 y 的 值。那大家需要记住的一点,那就是参数与后面返回的值之间需要使用冒号连接, 进行 x 加 y 的 操作。之后我们写上需要传入的列表 new price。 现在我们再来打印这个 total, 看是否是新的价格。列表中的总价格依旧是运行这个代码可以看到九十八,这是价格的总和。接下来我们再来看第三步, 过滤掉低于十五元的元素,需要使用到 filter 函数。现在我们要创建的是另一个新的列表,是高于十五元的元素,那么我们可以起一个名字叫做 high price, 表示是高于十五元的元素。 filter 函数。 filter 函数与 map 函数的写法是一致的,需要传入两个参数。依旧。在这里。我使用上匿名函数, 返回大于十五元的元素,没有大于十五元的元素就会被 filter 函数过滤掉,那么过滤函数依旧是高阶函数中的内置方法, 返回的还是一个可迭代的数组,并不是列表。那么在这里我们再加上一个 list。 现在我们再用 print 来打印一下 high price 这个列表。运行这个代码可以看到十六十七都是高于十五的元素。 高阶函数的内置函数充分体现了 python 函数式编程的优雅之处,通过组合这些高阶函数,我们能够用更简洁清晰的代码来表达复杂的数据处理逻辑,相信你在实际使用中也能借助它们更高效灵活的处理各类数据。我们下个视频再见。

拍放,每日学一个小知识,今日学习 filter 函数。 filter 函数的作用是根据指定过滤规则函数筛选可迭代对象中的元素。返回迭代器仅保留使函数返回 true 的 元素。 使用语法固定写法 filter function a terrible function 为判断函数可难, a terrible 为待筛选的可迭代对象。注意要点是,一、 function 为难时,保留可迭代对象中不耳值为 true 的 元素。二、返回的是迭代器,需转列表原组查看结果。 下面将十秒案例展示,稍后提问。 提问, filter 函数返回的迭代器能否直接打印出所有筛选结果?知道答案的小伙伴把答案打在评论区。

passion 的 类串上面可以加上 property 和 setter 这两种注解,这样的话能带来很多方便。这本定义了个普通类 user, 在 good 函数里面呢,指明了它具有 birthday 这样一个属性。生日嘛,那很多时候啊,我想获得的不是生日,而是年龄。 这呢,我需要先从类史里面取得生日,然后再算出一个当前时间,两个时间相减才能得到年龄。如果我需要多次的读取年龄的话,每次都这样做就很麻烦。所以呢,我不如直接给 user 加一个属性,叫做年龄。 那如果说 user 它既有 birthday 又 age 这两个属性的话,每次修改 birthday 都需要同时一并地修改 age, 如果哪次忘记了,数据就会矛盾。所以呢,我就不能直接给 user 加一个 age 属性,而是什么呢?而是给它加一个 age 方法。 但是呢,我要在这个方法上面加一个 age 方法算出一个时间差作为年龄。 那么将来我如何去使用 age 这个方法呢?其实啊,我可以直接把 age 当成一个子段,当成一个乘法变量来使用。比如这边我先给 birthday 赋值,它等于两千年的十月三号。最后一行,我去打印 user 点 age 是 吧,直接把 age 当成一个普通的属性来使用,而不是方法,因为 age 后面没有加小括号嘛。 那么这样的话,它实际上会调到 a 级这个方法里面去,它会去计算当前年份跟两千年的一个时间差,算出年龄呢,是二十六。这样的话,既不造成数据不一致,用起来还比较方便。 这是 at property, 但注意一下此处,这个 a 级它是只读的,你不能直接给 a 级赋值, 只能给 birthday 复制。那如何才可以直接给 a 姐复制呢?我们需要再定一个乘法,它还叫 a 姐,但是呢,在上面加一个注解, at a 姐点 set, 打算给年龄复制,直接把年龄作为参数传进来。只不过呢,在这个 a 姐方法内部,我并不是直接给 a 姐复制,而是给 birthday 复制, 根据当前时间,根据年龄能够反推出他的一个出生日期嘛。那么这样的话,将来这个 a 节就可以直接当成是一个成员变量来使用,而且可以直接给这个成员变量赋值。比如这边倒数第二行优点, a 节等于十八 age, 后面并没有加小括号,那表面上我是在给 age 赋值,实际上我是在给 birthday 赋值。如果在结合着之前我们起的这个 property, 一 旦 birthday 改了,你下一次再去读取优点, age, 你 发现年龄也改了, 所以这边给 age 赋值,而这边呢,去读 age, 感觉逻辑是吻合的,但实际上背后它是借助于 birthday 来实现的。 介绍一下,我的 python 全栈开发课程,包含了后端三剑客、数据库缓存和消息队列,然后会基于加固框架开发一个外部项目, 包含 g u i。 桌面端的图形开发,由资源处理、整体大模型应用开发、图像、视频、音频的识别处理。这块呢,主要是偏应用,算法层面讲的很浅, 还包括了办公自动化、当派 pandas 数据分析,基于时间序的数据预测以及爬虫,感兴趣的可以点击视频下方的课程链接进行了解。

那么什么是 python 中的可变位置参数呢?一个视频教大家弄清楚。首先我们看这样的一个需求啊,比方说我这边定了一个函数啊,叫做自我描述啊,那我们就叫做自我介绍吧, 好,然后呢,在这里呢,我们就直接写上一个 name 和一个 hobby, 好, 那么一个是我们的名字,一个是我们的爱好啊, 好,来我们这边直接 print 一下啊,名字来,直接接入这个 name 啊,爱好,我们去接入这个 hobby 啊, 好,行,来,我们来调用一下啊,这个叫张三,爱好是这个篮球啊,好,行,那这样写完全没问题啊,然后呢,我们来运行一下 好,代码,没问题,对不对?那么未来如果有这样的一个需求啊,我有多个不同的爱好,对吧?那我能不能在这里呢,再写上一个号比一啊,再再写上一个号比二,代表我的多个不同的爱好,对不对? 好,那这边就必须填这个,一,要填这个什么呀?二,然后这边要传多个值啊,如果说你不传多个值,它会报一个错啊,叫做你遗失了一个必填的参数,对吧?后边啊,所以呢,这边你要去填上一个,比如说填上一个 rap 啊, 对吧?那这个应该是没问题的啊,非常的简单啊,非常的简单。好,我们来运行一下啊,答案也是没毛病, 对吧?但是如果未来还有什么 hobby 三, hobby 四啊,一直往后面去写,那就显得太复杂了,对不对?那这个时候我们有一个想法,我能不能把这个爱好用一个列表来表示呢?比如说叫 hobby 啊, hobby 啊,好,那么这个地方呢,我们就直接去输入这个 hobby 啊,也就是这边呢,我们不再用这种形式去传啊,用另外一种啊,叫做列表或者圆组的形式,对吧? 好,再来一个也没关系,对吧?好,那这个代码写完之后呢,我们来运行一下啊, 好,大家看结果没有任何问题啊,那么除了以这种列表或者圆组形式传呢,其还有另外一个写法啊,它和这个写法的其实作用差不多,但是在某些场景下,它语法更简洁啊,兼容性更高。 好,那具体这一方面我就不去谈啊,我只把这个方式给大家介绍一下啊,那这个方式就叫做可变位置参数啊,也就是说这个 hobbies 啊,就只要出现在这个 name 后边的从第二位开始的这个参数啊,无论你填多少个,我都被同一个参数来接受啊,就同都被这个 hobbies 来接受啊,也就是这边呢,你看 我把它撤掉啊,就不用这种列表的形式,这里不要啊,这里不要。那么在这里我传了几个参数呢?我还传了三个参数,对不对?那么这三个参数呢,我都想被这个 hobbies 去接受啊,我就只需要在前面写上一个星号, 好,它就是一个可变的位置参数啊,就只要出现在 name 就是 第一个参数之后的所有的值都会被这个 hobbies 接受啊,那么未来到底是不是这种就展现的形式,是不是我们想要的这种呢?会不会把所有的爱好写到这个 hobbies 里面呢?来,咱们看一下啊, 来,大家看是完全没问题的,对吧?所以呢,这个叫做可变位置参数,也就意味着我们只需要在第一位之后的这个参数接上一个新号,那么未来一第一参数之后的二三四五 六七八九十,无论你有多少个啊,都会被这个 hobbies 结束啊。好吧,那么这个,这个就叫做可变位置参数啊。好,那我们这个分享到这里结束啊。

拍摄零基础入门,那这节视频我们来分享代码测试,主要针对函数进行测试,这节视频是我分享系列视频当中的第六十六期。 啊,那我们知道,当我们在代码当中有一个函数被多次使用的时候,那我们我们呢往往会把它提取出来,放在一个模块文件里边。好,那比如说呢,现在我们有一个 functions 点 p y 这么一个模块文件专门用于存放。呃,函数啊,当然它里边的函数就是在多个地方去使用。 那比如说我现在有这样的一个函数啊, get 下角线 for mighty 的 下角线 name, 那 这个函数呢,就是针对给定的名称进行格式化,并且返回格式化之后的。 呃,名称,那在这我们接收或者说处理两个参数,第一个 first, 第二个 last。 啊,因为呢,我们,呃,这个一般来说啊,那我们外国人呢,他可能就一个 first name 和 last name。 好,那函数里边儿我们就把这个 first 和 last 进行一个字母串的拼接,拼接之后呢,我们用一个变量啊保存好,那这个变量呢,应该是夫下行键 name, 那 这个就是一个完整的名称,我们将这个完整的名称再调用点儿 title, 也就是 将这个字母串当中每一个单词的手写字母进行大写,大写之后再把这个结果进行返回,这就是这么一个函数啊,当然我们这个函数是准备在我们整个项目的多个地方去使用的啊,这样一个假设, 那接下来呢,我们因为学的是测试吗?那我们接下来就编写一个测试代码,对这个函数进行测试处理。 首先呢,我们先来编写一个文件,这个文件呢,必须是以 test 的 下划线开头的,关于后边的名称内容是什么?这个无所谓啊,好,那在这个里边呢,我们要测试刚才定义的那个函数,那我们就应该先把那个函数给它导入进来, 好,导入进来之后呢,我们要针对这个函数进行测试,怎么测试?无非就是调用一下它啊。好,那在在这呢,我们再定义一个函数,这个函数呢?呃,我们把它叫做测试用力 来,比如说,我再定义一个函数啊,在测试文件里边定义了一个用于测试函数的函数, 那这个函数呢,它必须是以 test 的 下颚线来开头的啊,它的名称啊,关于后边的内容呢,我们只需要说它这个名字能够说明这个测试的目的就可以了。 好啊,那我们再继续在这个函数里边,那我就调用一下那个要测试的函数,我们要测试函数,无非就是调用它,给它传呃时餐,然后呢,拿到它的返回结果,再针对它的这个返回结果进行测试,看看它是否符合预期 啊,那符合预期呢,就是我们这个返回结果,它应该是张空格三啊,那 z 和 s 大 写是这个样子啊,然后在我们这个用于测试函数的函数里边,也就是测试用力里边,最后不是 return 啊,它应该是 assert 啊,这么一个啊,叫断言, 我断定这个 r, e, s 它应该等于大写这张啊,然后呢,空格大写 s 三是这个意思啊。好,那现在我们是两个文件啊,第一个是函数,用于存放函数的一个模块文件,然后我们要测试它, 我们进行测试呢,是放在另外一个测试文件里边了,是 test 的 下划线开头的文件。好,在这个文件里边呢,除了导入我们要测试的这个 代码之之后,然后呢,我们在这个测试文件里边还要编写函数,用于测试其他函数用的。好, 那这个测试呢?我管它叫做测试用力,一个函数就是一个测试用力啊,那就是我们最下边的这这个函数,那接下来有了这个测试用力,我们就应该去执行一下,看看他执行之后能不能够拿到预想的结果 来。那在这呢,我们怎么去测试?我们要在命令行去执行拍 test 的 来,那我们看一下这个截图啊,那在截图这呢,我就是在命令行执行了一个拍 test 的, 直接回车。好,那这一行呢?现在我们看到了 root d i r 啊,是什么根目录,它告诉我呢,其实它在哪一个目录下边去执行的哎,在这个文件夹下边, collect 的 e item 是 说它有一个测试用力, 然后这个测试用力在哪?哎,在 test 的 下划线 functions 点 p y 这个文件里边,这个文件后边有一个绿色的小点,表示这一个测试用力 测试执行啊,或者说执行之后它是成功的,它达到了我们预想的这个要求啊,这个小点是这个意思啊, 好,当然我们也可以看这啊,是一 pass 的, 就是有一个测试用力通过了啊,是这样,那我们这个执行这个拍 test 呢,它会在 就是他当前的这个目录下边去寻找所有以 time 的 下划线开头的文件,然后在这些文件里边再去找所有以 time 的 下划线开头的函数啊,然后逐一的去执行啊,看看他们的结果是这样的一个意思啊。 好,那我们继续,那继续。刚才就是我们编辑了函数,编辑了测试,并且测试通过了, ok, 然后告一段落啊,那接下来我们有新的需求, 那这个新的需求我肯定要写新的代码啊,但是我们这个需求希望它什么样子呢?哎,我们针对希望得到的那个结果先写测试代码啊,我们既然有新需求,我们先写测试用力 来,所以呢,我们还是到 test 的 下行线开头的这个文件里边啊,那我再写一个测试用力啊,当然它这个名字肯定还是以 test 的 下行线开头。后边的内容呢,你看,我写 first 下行线, last 下行线, middle 下行线 name。 那我的新需求是什么呢?我需要的是我在调用这个函数的时候,这个函数不单可以处理两个参数,它可以处理三个参数。 那第三个参数呢?呃,是中间名称,比如说现在我这一个测试用力,我就给他传了三个参数啊,那三个参数我后边传了一个老啊,我希望他的这个返回结果应该是张空格,老,空格三,并且这三个 单词首字母都是大写的啊,注意后边这一这个,这个最后一个关键字应该是 assert 啊,断言的意思。哎,我断言他应该是这样一个返回结果。好,那我现在有了一个新需求,我希望这个函数能够处理三个参数, 但现在能不能处理肯定是不行的啊,我只是调用了它,硬给他传三个参数,但是这个函数就是被测试的那个函数,就是 get 下划线开头的这个函数,我们并没有修改啊,所以此时呢,呃,为了给大家演示一下错误的情况,所以呢, 我编写完这个测试用力,我直接就测试一下啊,那我们知道我新写的这个测试用力必然是报错啊,因为我还没有改函数呢。来,那我们在这呢,呃,我单独的就针对 type x 的 下划线 function 这一个文件进行一个测试啊,这只是告诉你可以这样去执行啊。 哎,那就是这个,实际上我我觉得多数情况下,我们可以后边这个文件名称不假,他应该去执行所有的测试文件,而不是只单对一个测试文件去执行的啊。 好,那在这,呃,显示出来,他找到了这个文件,然后这个文件里边有一个绿点,有一个红 f, 绿点表示一个测试用力成功了,红 f 大 写的 f 表示另外一个测试用力呢?失败啊。 fail 是 这个意思啊。好,我们也可以在下边看到这个, 嗯,错误或者失败的一个具体情况啊,因为我们这个函数还没有改,所以虽然你传三个参数,那其实呢,他只能是还是按原来的逻辑把前两个参数进行一个拼接,得到张三啊,就这么个 意思,而我们在测试用力里边写,希望他得到的是张老三啊,那这个呢,一个是希望,一个是实际,这两个不一样啊,所以就报了这么一个断言错误啊。好,我们也可以在下边看到说我两个用力,一个是 failed, 一个是 past, 一个是失败的,一个是,呃,成功的这个样子啊,好,这只是为了让大家看到说,哦,报错信息大概是这个样子, 那接下来我们有了一个新的需求,我也就是我希望那个函数处理三个参数,然后我们编写了测试用力,说你如果这个完成这个需求,那这个测试用力就应该通过,就应该能够达到我们想要的, 那接下来我们就应该去实现它,所以我们此时就应该去修改那个函数啊,好, 那我们修改原来那个函数的定义啊,就是这个啊,这个 get 下划线 for mighty 的 下划线内幕这么一个函数,我们最开始定义的时候,它的需求就是处理两个参数就行了,现在我们的需求是希望它既可以处理两个,也可以处理三个 啊,那在这呢,我怎么去改呢?哎,我可以给它追加一个第三个参数 middle 啊,并且给它一个默认值空括号叉。 那如果说只传两个参数的时候,那第三个参数 middle 就是 空自创,那如果出传三个呢?你给第三个传啥?那它就覆盖了这个空的自创啊,这 middle, 比如说你传了一个老,这个 middle 就是 老那个自创了, 所以在这个函数当中呢,我们就可以对 middle 进行测试,如果 middle 不是 空自创啊,它是任意的其他的自创,那它就会被理解为真 啊,那也就是说,呃,这个函数在被调用的时候,它确实是呃传了三个参数,那这个时候我们拼接这个完整的姓名,就把这个 middle 也放进去,那也就是 first middle last 拼在一起形成一个完整的负下角线 name else。 啊,如果这个 middle 第三个参数没转,那它就是一个空的字母叉,空的字母叉就会被理解为 false。 好,那 false 呢,它就走 if else 走 else 啊,也就是说,呃,这个函数在调用的时候并没有传递三个参数,所以它的值才是空字复创,所以才是 false, 才执行到 else 这儿。那既然这儿表明没有 middle 这个传参,那我这儿呢,就给它用 first 和 last 拼接成一个完整名称。哎, 好,那这个 if else 执行完成之后,总归它要得到一个负下划线内幕这么一个变量,这个变量里边保存的就是啊拼接之后的这个名称, 然后再调用这个 title, 把这个名称首字母大写再返回啊 return 就 可以了。这是这个我修改之后的这个函数的定义啊。好,那修改之后,那我们这个呢,还应该在执行那个测试用力去测试一下啊,测试一下什么呢?执行两个测试, 第一个测试就是测试他我只传两个的时候能不能返回我预想的结果,然后我传三个参数的时候能不能返回我预想的这个结果啊,是这个意思啊。好,那我们来再次进行测试。 那在这呢,我们还是执行这个拍 test 的 啊,那 test 呢,还是会到目录里边去找所有以 test 的 下划线开头的拍摄文件啊。他统计了一下呢,这拍摄文件里边总共有两个测试用力啊。好,一个测试用力代表一个下划线 test 的 下划线开头的函数。 那这个目录下边儿,因为我们是演示嘛,它只有一个啊, text 下划线开头的 py 文件后边儿两个点儿,代表这个文件当中它有两个测试用力,两个绿色的点儿,表明这两个测试用力都执行通过了啊,也就是说现在我们这个函数 既可以处理只传两个参数的情况,也可以处理传三个参数的情况啊,都能够得到我们预想的效果。那就这意思啊,我们看这也是这个啊,二 pass 的 两个测试用力都通过了。好, 那以上就是我这节视频的全部内容啊,因为透彻,所以简单,我是讲师井水,这节视频呢,我们大概讲到了蟒蛇书当中的第一百九十四页。 呃,如果你有什么疑问呢,欢迎在评论区给我留言,或者说你有自己的看法,也欢迎在评论区进行讨论啊。当然更好的呢,是希望你能够关注我的这个账号。 呃,我这个视频呢,比书中的讲的稍微要简单一些啊,书中呢就是说会演示说我写的这个函数在一个正常的文件里边去使用,而在我刚才的分享当中并没有给你展示一个正常使用这个函数的地方啊,那我只是写了一个函数,然后测试这个函数, 就是尽量把它给简化了,那随着我们之后如果有机会在项目中呃接触到测试,然后呃我们再深入的去了解它。好,那我们下个视频见。