Python 一些零散的东西

Python里面有一些东西,分布得很散,但是又十分有用。

  1. lambda
    相当于单行的函数定义,写起来十分简便。具体格式就是f = lambda p,q,... : f(p,q,...)。参数可以是一个或者多个。
>>> f = lambda x,y : x+y/3
>>> f(4,5)
5.666666666666667

这个函数往往是在其他函数里面充当一个key或者filter或者cmp等等的作用,应用十分广泛。

  1. map
    格式是map(f, it),即对iterable里面的每一个元素都使用一次函数f,以iterator的形式返回。
>>> list(map(len,['a', 'ab']))
[1, 2]
  1. functools.reduce
    格式是functools.reduce(f, it [,init]),对it里面的元素累积使用f,可以添加初始元素:
>>> functools.reduce(lambda x,y: x+y/3, [2,5,6,8], 1)
8.0
>>> functools.reduce(lambda x,y: x+y/3, [1,2,5,6,8])
8.0 
  1. functools.cmp_to_key
    接受一个cmp函数转为key函数。这个函数可以让Python3也用上cmp功能的函数来进行sort。

  2. fractions.gcd
    格式是fractions.gcd(a, b),求整数a和b的最大公约数。

>>> fractions.gcd(12,16)
4
  1. zip
    配对函数,返回的是迭代器。zip(p,q,...)接受两个或者更多参数,相当于从pq里面每次各取一个元素出来,以最短长度为准。假如要最长的,可以用itertools.zip_longest。
>>> list(zip([1,2,3,4], 'abc'))
[(1, 'a'), (2, 'b'), (3, 'c')]

zip还有一个比较生僻的用法,即zip(* a),a为二维数组:

>>> zip(*[[1,2,3],[4,5,6]])
<zip object at 0x03F513C8>
>>> list(zip(*[[1,2,3],[4,5,6]]))
[(1, 4), (2, 5), (3, 6)]

相当于求矩阵转置。

  1. [x:y:z]
    很多时候都需要用到iterable的子串或者子串的逆序,[x:y:z]是一种很便捷的切片方法。
    当z>0的时候,就是以index=x为开始,到y-1结束(包括x和y-1),步长为z的子串:
>>> n = list(range(10))
>>> n[2:7:2]
[2, 4, 6]

当z小于0的时候,就有点tricky了:

>>> n[6:1:-1]
[6, 5, 4, 3, 2]

此时是从x开始,到y+1结束。
这么说,整个的逆序是n[9:-1:-1]?No!

>>> n[9:-1:-1]
[]
>>> n[9:0:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> n[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

也就是说,唯独对于最后一位,xyz的切片方式失效了,好在可以用[::-1]实现。
实在搞不清楚,干脆就用正序的方法切片再加reversed好了。

  1. yield
    yield的使用目的是为了节约内存。常见的iterable已经把所有内容都存了起来,有时候这不是最优的选择。生成器(generator)就是为了优化内存而生,它不是把所有需要的值一股脑产生然后存起来,而是要的时候生成一个。
    生成器有特殊的读取方式,就是yield。生成器的形成也很简单,把常用的序列的[]改成()即可:
>>> mygenerator = (x*x for x in range(3))
>>> type(mygenerator)
<class 'generator'>
# 这时候,如果用for去print,就只能输出一次:
>>> for i in mygenerator:
    print(i)

    
0
1
4
>>> for i in mygenerator:
    print(i)

第二次for的时候,不能输出了。也就是说,生成器只能迭代一次。
假如generator更加复杂呢?那就得自己写一段定义了,yield在其中类似于函数的return:

>>> def createGenerator():
    for i in range(3):
        yield i*i

        
>>> mg = createGenerator()
>>> type(mg)
<class 'generator'>
>>> for i in mg:
    print(i)

    
0
1
4
>>> for i in mg:
    print(i)

可以看到,Python检查到yield,就认为这是一个生成器。还是只能迭代一次。

  1. 无穷
    Python里面表示无穷大用的是float('inf'),无穷小则在前面加个-即float('-inf')。类型是float。
    有时候也可以用0x7fffffff来表示32位最大正整数2147483647,因为Python没有溢出,也没有32位限制,所以32位最小正整数没法像其他语言那样表示,只好用最大正整数加1取负。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容

  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 1,240评论 0 0
  • 本文翻译自Functional Programming Howto 本文将介绍Python中函数式编程的特性。在对...
    大蟒传奇阅读 2,621评论 4 14
  • PYTHON-进阶-ITERTOOLS模块小结转自wklken:http://wklken.me/posts/20...
    C_Y_阅读 970评论 0 2
  • Python 是一种相当高级的语言,通过 Python 解释器把符合语法的程序代码转换成 CPU 能够执行的机器码...
    Python程序媛阅读 1,908评论 0 3
  • 一 胖五的老爹胖四是木匠,胖四的老爹胖三也是木匠。胖家从胖三的爷爷胖一开始就是依赖这门手艺刨食。 做木匠要用手劲刨...
    云问雨阅读 1,081评论 2 10