美文网首页
Python 一些零散的东西

Python 一些零散的东西

作者: akak18183 | 来源:发表于2017-08-15 09:19 被阅读0次

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取负。

相关文章

  • Python 一些零散的东西

    Python里面有一些东西,分布得很散,但是又十分有用。 lambda相当于单行的函数定义,写起来十分简便。具体格...

  • 史上最全Python学习资料大合集分享

    Python有多火就不用说了,之前也零散地分享过一些Python学习开发资料。 本次将分享Python学习资料合集...

  • 《断背山》2

    两天了,终于写完了一些零散的东西。

  • 一些零散的python模块笔记

    1.pyperclip 第三方库安装:python -m pip install pyperclip作用:向剪切板...

  • 零零散散的东西

    我不知道成长是一个什么样的概念,我也从来没有去想过。大概我就是一个这样的人,我懒得去思考一些东西,一些我觉得索然...

  • 1.Python-基础语法

    零散知识点 一.Python数据类型转换 二.Python算术运算符 三.Python比较运算符 == != > ...

  • 八月书摘

    八月,工作不算紧张,许多东西尚在筹备,所以闲暇时间相对多一些,零零散散地读过的东西就相对多一些。 除了每日的推送,...

  • 关于python零散知识点记录

    关于python零散知识点记录 面对多个python时,使用别名配置Python命令时出现冲突,使用别名配置环境变...

  • Python学习笔记

    这是我学习python的过程中记录的一些东西,记录了一些python的特性以及python工程师面试过程中经常被问...

  • Python学习笔记

    本人在廖雪峰的python教程学习python,在此记录一些笔记,记一些重要的东西,以便查询及复习。 输入与输出 ...

网友评论

      本文标题:Python 一些零散的东西

      本文链接:https://www.haomeiwen.com/subject/mwkmrxtx.html