谢乾坤 | Kingname

给时光以生命。

过去的你只会在代码里消磨每个周末,现在的你有她一起探索生活里的小惊喜;过去的你是一个死宅,现在的你想陪她拿着相机看遍世界的景色。

阅读全文 »

在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多的if...elif...else以外,还可以巧用or关键字实现。

例如,我们要获取天气信息,现在有三个api接口。

1
2
3
api_1()
api_2()
api_3()

其中api_1()的数据又详细又好,但是接口不稳定,可能随时会掉线。

api_2()返回的结果比api_1()稍微差一点,但是稳定性还不错。

api_3()接口返回的是兜底数据,就是在前两个接口都故障的情况下才会使用。

如果前两个接口正常工作时返回字典,故障时他们都会返回None

现在我们要获取天气信息,你可能会这样写代码:

1
2
3
4
5
weather = api_1()
if not weather:
weather = api_2()
if not weather:
weather = api_3()

代码这样写,功能自然是没有问题,但是非常难看。

实际上,代码可以写为:

1
weather = api_1() or api_2() or api_3()

只需要1行代码就能实现自动选择。如果api_1()返回的是一个非空字典,那么由于短路效应,后面的两个函数都不会运行。当api_1返回None时,api_2()才会运行。并且如果api_2()返回非空字典,那么api_3()依然不会运行。

我们现在在Jupyter里面测试一下,首先看看如果api_1()直接返回非空字典的情况,如下图所示。

可以看到,在api_2()api_3()里面的两行print语句都没有执行。

接下来我们看看api_1()故障时候的情况。

此时先运行api_1()返回None,再运行api_2()返回非空字典。符合预期。

当前两个函数都返回None的时候,第三个函数才会运行,如下图所示。

除了做多重条件判断外,还可以用来自己和自己取或操作,实现重试。

例如api_1()可能成功也可能失败,所以需要尝试运行3次,那么代码可以这样写:

1
weather = api_1() or api_1() or api_1()

我们来投票吧

产品小姐姐召集了项目组的五位开发同学,宣布一项重要的决定。

“作为一个产品,一定要与开发一起对项目有深入的沟通和交流,才能让项目做的更好。所以,今天我们来做一个不记名投票,确定哪几位同学可以和我一起讨论产品的设计方向。”

“现在给到大家的是大老板L叔为大家的产品能力评分,最低1分,最高5分,每人都不一样。大家都只知道自己的得分,互相不知道别人的得分”

“我们的投票规则,是大家一起讨论,不低于几分的人可以和产品一起讨论项目的设计方案。然后独立不记名投赞成票或者反对票”

“首先,1分能力太差,所以不低于2分的人能和产品一起讨论,大家投票。”

“不出所料,1票反对,4票赞成。”

“那分数提高一点,不低于3分的人可以和产品一起讨论项目。大家投票。”

“咦,也是1票反对,4票赞成。”

“那我们看看大于等于4分,才能和产品讨论。”

“也是1票反对4票赞成。”

“那5分呢。”

“还是一票反对,四票赞成。”

“6分呢。”

“还是一票反对,4票赞成。”

“那么好的,经过民主投票,少数服从多数,大多数人都赞成产品能力为6分的人才能跟我一起讨论产品,由于没有人超过6分,所以这个项目我说了算。散会。”

阅读全文 »

如果你经常使用Python的命令行交互环境,你一定遇到过下面这个现象:

1
2
3
4
5
>>> a = 'test'
>>> a
'test'
>>> print(a)
test

首先定义一个变量a,它的值为字符串test。现在,当你在命令行交互环境直接输入变量名再回车的时候,你看到的是'test',当你输入print(a)的时候,你看到的却是test

阅读全文 »

在Python中,如果要判断一个字符串是否在另一个字符串里面,我们可以使用in关键字,例如:

1
2
3
4
5
>>> a = '你说我是买苹果电脑,还是买windows电脑呢?'
>>> if '苹果' in a:
... print('苹果这个词在a字符串里面')
...
苹果这个词在a字符串里面

如果有多个句子和多个关键字,那么可以使用for循环来实现:

1
2
3
4
5
6
7
8
9
10
11
sentences = ['你说我是买苹果电脑,还是买windows电脑呢?', 
'人生苦短我用Python',
'你TM一天到晚只知道得瑟',
'不不不,我不是说你,我是说在座的各位都是垃圾。'
'我CNM你个大SB'
]
keywords = ['垃圾', 'CNM', 'SB', 'TM']
for sentence in sentences:
for keyword in keywords:
if keyword in sentence:
print(f'句子: 【{sentence}】包含脏话:【{keyword}】')

运行效果如下图所示:

现在如果有100000000个句子,有1000个关键字,那么你需要对比1000亿次才能全部查询完成。这个时间代价太大了,如果Python一秒钟能运行500万次查询(实际上没有这么快),那么1000亿次查询需要20000秒,接近6小时。而且,由于in关键字的时间复杂度为O(n),如果有大量长句子,查询时间会更长。

阅读全文 »

这篇文章没有代码,请放心阅读。

程序员最宝贵的东西是生命,生命属于程序员只有一次。一个程序员的一生应该这样度过:当她回首往事的时候,她不会因为搭建环境浪费时间而悔恨,也不会因为集群无法运行而羞耻。这样,在她开发的时候,她能够说:“我的整个生命和全部精力,都已经献给了开发中最重要的事情——设计程序,实现程序和调Bug。” ——P酱。

P酱是公司新来的实习生妹子。听说是一个文科生。文科生应该会去文案组或者策划组吧。什么?来数据组?让我来带?

于是我和P酱生活工作在了一起。

阅读全文 »
0%