前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术 | Python从零开始系列连载(十八)

技术 | Python从零开始系列连载(十八)

作者头像
灯塔大数据
发布2018-07-25 17:01:22
5930
发布2018-07-25 17:01:22
举报
文章被收录于专栏:灯塔大数据灯塔大数据
那些容易被忽略的问题

1

int()强制转换浮点数

在int()的强制转换浮点数时候,不管是正数还是负数,只取整数部分。

注意:这里不是向上或者向下取整,也不是四舍五入。

2

无限递归

还记得我们讲的俄罗斯套娃么,还记得数列求通项公式么,都用到了递归的思想

如果不记得了,记得拉到最下面看往期文章哦~

递归是为了将问题简化为更小规模的同类型问题,最后加以解决。

但是有一种情况是递归时不断调用自身,达到不了最简单的情况(例如俄罗斯套娃一层层打开到最内层的),所以一直找不到递归的出口。

说了这么多,我们看个例子:

我们定义了一个函数名为recurse

然后函数体中调用自身

当我们运行调用这个函数时,系统抛出异常,意思是达到了最大的递归深度。

你可以认为系统设置了一个最大递归次数,如果超过这个次数还没解决问题,则抛出异常

简答点说,就是:绕来绕去你怎么还没解决问题,你是要上天么!

这种问题,我们要避免

3

字符串是不可改变的

在往期文章教程里我们说过,字符串和元组是不可变的数据类型,那字符串的不可变体现在哪呢?

看个例子:

如果我想改名字,而且改的是姓【不要当真,只是为了举例子,我爸应该看不到这篇文章的】

我把姓 '王' 改为 ' 方',我就做了如下修改:

结果抛出异常,提示不让我修改,这体现了字符串的不可变性,如果你执意要改呢?

可以这样

联合使用字符串的切片和拼接完成~

4

一些遗漏的字符串方法

upper()和lower()方法

upper()能将一个字符串的字母全变成大写,lower()与之相反:

find()方法

find()可以在字符串中查找子串是否存在:

如果找到,返回的是子串的起始索引位置,例如Hello是从字符串索引0位置开始,空格是在索引5位置

当找不到子串时,返回-1,而不是抛出异常

还可以限定查找开始的索引位置:

我们知道,空格的索引是5,当我们从索引3开始往后找,能找到空格

当我们从索引7开始找,则返回没找到,因为索引7已经在索引5之后了

5

注意操作的返回值

我们用a来 接盘 , 啊呸!接收来自print的返回值,发现a是NoneType,所以print是没有返回值的

例如在列表中,你希望接收排序的结果,你可能会这样写:

发现这样是没有结果的!

6

字符串快速转换为列表

在入门阶段我们讲了不同数据类型的转换关系,比如列表和元组。

这里讲讲字符串转为列表!

小明:老湿!字符串和列表好像不像会发生关系的啊!

小明,那我问问你,如果把一个字符串 'Python' 的每个字符作为列表元素,怎么操作?

小明:emmm,小红,还是你来回答吧,毕竟我们也是有关系的。

小红:。。。

小红:老师,我觉得可以这样:

小红的列表生成式学的很不错啊!给你点赞~

我们今天新学一种方法:

这样是不是很简单,就像给元组穿上list外衣一样,给字符串披上list的外衣,就变成了list

小明:老湿!这个看起来也就一般般啊!如果我想把‘I love Python’变成列表,元素分别是I love Python这三个,怎么做呢??【坏笑】 这个嘛...应该是...

小明:老湿,你不会了吧!!!

其实我是在逗你的,我们新学一个字符串分割的方法,分割,有点像列表的切片,只不过之前我们一般是定好位【找到索引】,一刀切下去。

小明:那现在呢?

现在嘛,按照特点切。

小明:什么是按照特点切?

听过庖丁解牛的故事么?

小红:老师,是因为他是从牛身上的骨节脆弱部分切开!

是啊,所以我们可以认为骨节是一种特征,我们找到字符串的特征就能完成任务!

小明:我明白了,我要求的分割字符串就是按照空格分开的!

是的没错,我们现在根据空格将字符串转为列表,小明,给我把我用了19年的那把宰牛刀拿来!

小明:emmm

使用方法:字符串.split('分隔符')

默认是空格,所以这里写了两种!

小明:那如果是2017-12-06呢?

小红:这很简单啊,这样即可:

小红举一反三能力不错~

像之前的空格和这里的‘-’都叫做分隔符。

7

字典中按照键的顺序输出

还记得之前讲到字典时候么?字典有三大特性其中有一个就是无序性!

小明:老湿,所以呢?

emmm,小明,你听我说完!所以我给你出个题:

你看,现在我想按照key的字母顺序看看打印出来的结果,但是先打印的是b,这怎么办!

小明:老湿,你要求真高!不过我真的不会。。

好吧,可以这样的:

我们给字典套上个sorted的外衣就行啦!

小明:老湿,我就这个表情:

小明,我们要讲的重点是,还记得字典里的key是唯一的么?

小明:记得啊,我还记得根据key可以查找value呢!

那你很棒棒哦,如果让你通过value找key,怎么做呢?

小明:自己挖的坑....

嗯,这个确实比较难,我们来看看

还是用刚才的dict1:

我们定义一个叫reverse_lookup的函数,传入两个参数

第一个是要查询的字典,第二个是要查的值

然后循环字典,将键对应的值分别和要查找的值比较,当出现异样的就返回!

小明:看起来不错啊

是啊,看起来不错,但是当我们要找的值不在字典里呢?

什么都没返回的样子!按照我们的思路,找不到东西也应该告诉我啊

还记得我大学时去面试实习生,面试了3家公司,最后都没给我结果,也不通知我面试没过,这样确实不太好,直白点多好!

所以我们这里学个新的系统关键字:raise

它可以抛出异常!

小明:老湿,我们不喜欢异常,你还要生成异常???

我们看一下具体操作!

仔细看看函数重新定义的吧

小明:不就是加了raise那句么?

注意缩进!当找到值对应的key,直接运行return,然后将返回的值传回函数调用处,函数就调用结束了

当我们没找到时候,最后会抛出我们设定的LookupError

小明:老湿,那其实可以这样啊!

emmm,是的,这样也可以,不过我这里要强调的是raise的用法!

8

可变长元组参数

还记得在入门部分讲的函数的可变长参数么,*开头的收集到的的是元组参数,既然有收集,那就可能会有分散

今天我们要讲的就是收集的反面——分散

我们先看个演示:

divmod函数是一个求商和余数的函数,这里传入9和2,返回了4和1

即商为4,余数为1

如果我们想一步到位

使用原有的数组呢?

发现系统抛出异常

仔细看看异常内容

需要两个参数,但你只给了一个!

所以我们尝试分散,也就是今天要学的新内容

我们在传入的元组前加个*号,即可将元组拆开,有点像之前说过的元组拆包~

此时结果返回正常了

9

序列合体

还记得小学时候看的数码宝贝么?除了前期的进化可以提升数码宝贝的力量

后期更有合体的玩法!

小明:阴阳相合,我懂的!。。。

咳咳,我们今天要讲的是将序列(字符串,列表,元组)相互合并的操作

如果给你一个列表,一个元组,如下图,把他们一对对分别按顺序合并

你会怎么做?

小红:老师,我最喜欢的列表生成式子应该可以:

使用之后发现并不可以,但是改一下就ok:

小红啊,你这是投机取巧看出了数据的特征

小明有想法么?

小明:我觉得可以使用循环试试:

小明这次做的不错,有没有更方便的方法呢?

(众人沉默)

好的,那我们看看今天要讲的函数zip()

zip()函数接收两个或者多个序列,返回一个元组列表

每个元组包含来自每个序列中的一个元素

zip()函数名取自拉链zipper~

就像把两边结合在一起这种

好了,我们看看拉链的具体使用:

返回的结果是一个zip对象,你可以简单认为是一个压缩包

当我们要获取查看它的元素,可以使用循环遍历,如果我们想将结果放在一个list中呢?可以这样:

当然我们还可以将字符串和列表合并:

甚至多个序列合并:

zip()函数的出现为我们创建字典提供了新方法:

10

文件名和路径

还记得我们在入门阶段讲的路径么,有个细节要补充一下,让我们更加偷懒

返回当前目录:

返回当前目录有以下好处:

1.方便构造文件操作路径

2.提醒我们当前在什么目录操作

我们还可以检查该目录下是否存在某个文件:

下课

人生苦短,我选Python

未完待续,连载中.....

今日作业:

期待下一次连载

好啦,这期的分享先到这里,大家可以按照上面的详细步骤进行练习。今天内容很丰富,建议大家收藏后细细品味反复琢磨!加油,我们下周五不见不散~

文章来源:Python爱好者社区

文章编辑:小柳

往期文章:

技术 | Python从零开始系列连载(十七)

技术 | Python从零开始系列连载(十六)

技术 | Python从零开始系列连载(十五)

技术 | Python从零开始系列连载(十四)

技术 | Python从零开始系列连载(十三)

技术 | Python从零开始系列连载(十二)

技术 | Python从零开始系列连载(十一)

技术 | Python从零开始系列连载(十)

技术 | Python从零开始系列连载(九)

技术 | Python从零开始系列连载(八)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灯塔大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档