0068 - 那些“diǎo diǎo”的内置函数 | 【剧透‘暗网’板块】
有言在先,先学习,后吹水,彩蛋在最后哈。
分享几个很牛x的Python内置函数,每个学习Python的鱼油都应该了解并上手体验下。
对于每个函数,本人会使用一个通俗易懂的实现来和内置函数做对比。
有的直接引用了内置函数的文档,请理解,因为这些函数文档写的非常奈斯了,没必要重复造轮子。
all(iterable)
如果可迭代的对象(数组,字符串,列表等)中的元素都是 true (或者为空)的话返回 True 。
文档:
_all = True
for item in iterable:
if not item:
_all = False
break
if _all:
# do stuff
更简洁:
if all(iterable):
# do stuff
any(iterable)
如果可迭代的对象(数组,字符串,列表等)中任何一个元素为 true 的话返回 True 。
如果可迭代的对象为空则返回 False 。
文档:
_any = False
for item in iterable:
if item:
_any = True
break
if _any:
# do stuff
更简洁:
if any(iterable):
# do stuff
cmp(x, y)
比较两个对象 x 和 y 。
x < y 的时候返回负数, x ==y 的时候返回 0, x > y 的时候返回正数。
文档:
def compare(x,y):
if x < y:
return -1
elif x == y:
return 0
else:
return 1
更简洁:
cmp(x,y)
dict()
使用 arg 提供的条目生成一个新的字典。
arg 通常是未知的,但是它很方便。
比如说,如果我们想把一个含两个元组的列表转换成一个字典,我们可以这么做:
l = [('小甲鱼', 'Python'), ('FishC', 'Web开发'), ('鱼C', 'JavaScript')]
d = dict()
for tuple in l:
d] = tuple
# {'小甲鱼': 'Python', '鱼C': 'JavaScript', 'FishC': 'Web开发'}
或者:
l = [('小甲鱼', 'Python'), ('FishC', 'Web开发'), ('鱼C', 'JavaScript')]
d = dict(l)
# {'小甲鱼': 'Python', '鱼C': 'JavaScript', 'FishC': 'Web开发'}
enumerate(iterable [,start=0])
对于一个可迭代的(iterable)/可遍历的对象(数组,字符串,列表等),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
文档:
for i, item in enumerate(list):
# so stuff with item, for example print it
print i, item
如果对一个列表,既要遍历索引又要遍历元素时,可以这么写(一般写法):
list1 = ["我", "可能", "不是", "小甲鱼"]
for i in range (len(list1)):
print (i ,list1)
用enumerate就很炫技:
list1 = ["我", "可能", "不是", "小甲鱼"]
for index, item in enumerate(list1):
print (index, item)
isinstance(object, classinfo)
如果 object 参数是 classinfo 参数的一个实例或者子类(直接或者间接)的话返回 True 。
当你想检验一个对象的类型的时候,第一个想到的应该是使用 type() 函数。
文档:
if type(obj) == type(dict):
# do stuff
elif type(obj) == type(list):
# do other stuff
...
更简洁:
if isinstance(obj, dict):
# do stuff
elif isinstance(obj, list):
# do other stuff
...
pow(x, y [,z])
返回 x 的 y 次幂(如果 z 存在的话则以 z 为模)。
如果你想计算 x 的 y 次方,以 z 为模,可以这么写:
mod = (x ** y) % z
但是当x=123213123,y=213213123,z=33的时候电脑得算个几分钟。
不要用 ** 和 % 了,使用 pow(x, y, z) ,就要见证奇迹了:
pow(1234567, 4567676, 56)
只用了 0.055 秒就出了结果!
zip()
这个函数返回一个含元组的列表,上代码:
l1 = ('小甲鱼', '《零基础入门学习Phython》')
l2 = ('小可爱', '《零基础入门学习Web开发》(HTML5 & CSS3)')
out = []
if len(l1) == len(l2):
for i in range(len(l1)):
out.append((l1, l2))
# [('小甲鱼', '小可爱'), ('《零基础入门学习Phython》', '《零基础入门学习Web开发》(HTML5 & CSS3)')]
或者这么写:
l1 = ['小甲鱼', '《零基础入门学习Phython》']
l2 = ['小可爱', '《零基础入门学习Web开发》(HTML5 & CSS3)']
out = zip(l1, l2)
print(*out)
# [('小甲鱼', '小可爱'), ('《零基础入门学习Phython》', '《零基础入门学习Web开发》(HTML5 & CSS3)')]
吹水(彩蛋)
Python 内置函数很方便,它们很快并且经过了优化,所以它们可能效率更高。
本次只是简单列举了几个,有机会慢慢补充。
好吧,接下来就是“彩蛋时间”。
在鱼C论坛上,有几位很牛x、很厉害、很热心的大神:
ba21、塔利班、冬雪雪冬、新手ing、风介
各位懂得,都是万中无一的高手!
在小甲鱼老师的号召下,集结在一起,密谋一件很“hi”的事情:
在Python板块,开启一个什么板块:
学习Python必趟的坑?!听名字好厉害(接地气)?!
干嘛的呢?
用Py挖坑,搞发掘?
No!
小甲鱼官方Bli:传送门
目标很简单:
将论坛上海量的提问资源,鱼油高频的Q&A,整理,优化,提纯
最终集结成一套:
**** Hidden Message *****
计划正在稳步进行中,欢迎大家下方留言,畅所欲言{:10_275:}
预知更多神文请看:
菊、套与吹水 | 【???】
如果喜欢,别忘了评分{:10_281:} :
http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif
如此多懂学习的VIP至尊都已订阅本专辑,你还不快点行动!(☞订阅传送门 )
乌拉{:10_281:}{:10_279:} 后面站着的怎么那么像那个什么军师{:10_249:} 支持鱼C^_^ 支持支持! 支持支持!!! 吓人,吓着小朋友了……{:10_266:} 很强势 好 学习一下 哦也 学习了 厉害呐 {:10_279:} 这是高手 这是高手 高手 支持支持
顶一下~ 不错,表示用的很少,收藏以便不时之需 收藏以便不时之需 enumerate()里面还可以加一个参数,修改索引的起始值