不二如是 发表于 2018-12-8 11:21:38

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至尊都已订阅本专辑,你还不快点行动!(☞订阅传送门 )

爱学习的懒懒君 发表于 2018-12-8 13:08:21

乌拉{:10_281:}{:10_279:}

alltolove 发表于 2018-12-8 13:41:40

后面站着的怎么那么像那个什么军师{:10_249:}

幻千城12 发表于 2018-12-8 15:17:54

支持鱼C^_^

睦ちゃん她爹 发表于 2018-12-11 15:08:43

支持支持!

helloconan 发表于 2018-12-11 15:38:01

支持支持!!!

小甲鱼 发表于 2018-12-11 16:34:07

吓人,吓着小朋友了……{:10_266:}

ATrees 发表于 2018-12-11 18:09:05

很强势

余生愿你常欢笑 发表于 2018-12-11 18:56:02

happy_study 发表于 2018-12-11 20:10:20

学习一下

新手·ing 发表于 2018-12-11 21:27:55

哦也

fan1993423 发表于 2018-12-11 23:31:12

学习了

ruiwenya 发表于 2018-12-12 08:20:56

厉害呐 {:10_279:}

打湿了沙发爬 发表于 2018-12-12 09:23:52

这是高手

晓屁屁 发表于 2018-12-12 09:30:36

这是高手   高手

787330410 发表于 2018-12-12 13:55:14

支持支持

ilihuimin 发表于 2018-12-12 23:49:11

顶一下~

zyj321321312 发表于 2018-12-13 13:44:13

不错,表示用的很少,收藏以便不时之需

害怕型全嘲豪 发表于 2018-12-13 17:38:23

收藏以便不时之需

xy123151 发表于 2018-12-13 17:41:45

enumerate()里面还可以加一个参数,修改索引的起始值
页: [1] 2 3 4
查看完整版本: 0068 - 那些“diǎo diǎo”的内置函数 | 【剧透‘暗网’板块】