python通过一个语句分析几个常用函数和概念

前言

过年也没完全闲着,每天用一点点时间学点东西,本文为大家介绍几个python操作的细节,包含all、any、for in等操作,以及介绍我解决问题的思路。

一、开篇

先从我看到的一个简单的语句开始。

text = '拍照'
any(word in text for word in ["拍照", "拍张照"])

刚看到这个语句的时候我整个人完全懵住了,完全看不懂这是干啥的。不过其实编程难的不是这些东西,这些东西再也不怕,也能想办法解决掉,而隐藏在这后面的编程思维及数学等知识是很难解决的。

1.1 any、all

言归正传,看到这个语句后,我想到的就是如何将复杂的问题简单化。

于是我先查了一下any函数,查到any和all函数都是对于集合而言的。any函数用于判断给定的可迭代参数iterable是否全部为空对象,如果都为空、0、false中的一种(以下简称为空),则返回False,如果不都为空,则返回True;而all函数刚好相反,如果全不为空,则返回True,否则返回False。

1.2 for in

这就是说上面的语句any里面是一个iterable对象。我们再来看一下里面的语句:

text = '拍照'
(word in text for word in ["拍照", "拍张照"])

可以明显的看到一个for,for in在python里面很明显,简单的说就是循环一个集合,并对此集合进行过滤、计算等操作。同样先简化它:

(word for word in ["拍照", "拍张照"])

这很明显,生成的集合与原来相同,但是平常我们看到的都是这样的:

[word for word in ["拍照", "拍张照"]]

这里面就牵涉到python生成器的概念。

1.3 生成器

生成器的优点在于不需要事先计算,只需要在需要的时候才会调用,不浪费存储空间和计算时间。简单的说生成器是一种特殊的集合,这种集合并不像普通的集合一样事先全部算出,而是在需要的时候才去计算。其实实现方式很简单,将[]换成()即可,于是就有了上面的语句。关于生成器的其他操作和生成方式可以在网上查阅相关资料,这里不再赘述。

1.4 继续for in

接着上面的for in继续介绍,(word for word in ["拍照", "拍张照"])结果与原始数据相同,那么如果我们想要产生一点变化就要对第一个word执行一个函数,于是就有了word in text,这里的in就是个函数,判断word是否是在text中,即word是否是text的子串,相当于其他语言的contain。

这样就很清楚了,(word in text for word in ["拍照", "拍张照"])表示循环原始集合,判断每个元素是否是给定的text字符串的子串,返回的是个True、False集合。

当然我们也可以在循环的时候实现过滤,看如下语句:

(word for word in ["拍照", "拍张照"] if word in text)

貌似这条语句跟上面的差别就在于word in text的位置发生了变化,并多了个if。其实二者差别非常大,这里实现的功能是判断word是否是text的子串,如果是则取出,相当于过滤掉不是子串的对象,最终返回的是一个字符串集合。

1.5 总体

那么这里我们再来看一下最开始的语句:

text = '拍照'
any(word in text for word in ["拍照", "拍张照"])

综合以上语句就可以知道此语句实现的是循环集合判断每一个字符串是否是给定的text的子串,最终如果不全为空的话就返回True,即text只要包含集合中的任意一个字符串,则返回True。可以用于命令检测等等场合。

二、总结

本文通过一个稍微复杂的语句,为大家介绍了python中几个常用的函数和概念,并分析了由繁而简的过程。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

java提高篇之抽象类与接口

抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可...

973
来自专栏AI派

如何使用Python颠倒是非黑白?

有没有发现,打印 True 结果是 False,打印 False 结果是 True。是非黑白就在这么一瞬间颠倒了

771
来自专栏liulun

Nim教程【六】

目前看来这是国内第一个关于Nim的系列教程 先说废话 Rust1.0已经发布了, 国内有一个人为这个事情写了一篇非常长的博客, 这篇文章我前几天草草的看了...

2426
来自专栏带你撸出一手好代码

正则表达式「^」符号的正确理解方式

「^」这个符号在正则表达式的中的应用相信是所有程序员都掌握的, 因为它是正则表达式中最基础最常用的知识点。 它在正则表达式中表示两种不同的意义 01 表示匹配一...

2863
来自专栏编程

Python函数之一切皆对象

今天我们要讲的是 对象 避免误会,常老师先澄清一下,这里面说的对象指的是object,不是你的lover,也不是你的sweetheart…… 有的小伙伴可能会觉...

2007
来自专栏菜鸟前端工程师

JavaScript学习笔记006-作用域0类型转换

1002
来自专栏前端正义联盟

我来重新学习 javascript 的面向对象(part 5)

这是最后的最后了,我会顺便总结一下各种继承方式的学习和理解。(老板要求什么的,管他呢)

901
来自专栏cmazxiaoma的架构师之路

Java数据结构与算法(4) -冒泡排序

1895
来自专栏进击的君君的前端之路

Math对象、数组、日期函数

1605
来自专栏和蔼的张星的图像处理专栏

413. 反转整数从低到高逐位处理

将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。 样例

1033

扫码关注云+社区

领取腾讯云代金券