zoukankan      html  css  js  c++  java
  • python学习

    http://www.cnblogs.com/txw1958/archive/2011/10/13/2209980.html

    通过看 方倍工作室 的博客复习了一下以前看过的python,发现有很多知识点已经忘记了

    字典,列表,元胞。

    函数,可变参数

    def haha_test(arg1,arg2 = "defaultB",*theRest,**theDict):

    *theRest部分可以指定多个参数,**theDict部分可以放字典元素

    如 haha_test(1,2,"abc","sss",a = 1,b = 2)

    文档字符串

    编写函数是放到函数第一行的。。

    三引号包含在内

    >>> def haha():
    '''nothing'''
    return

    >>> haha().__doc__
    >>> a = haha().__doc__
    >>> print(a)
    None
    >>> a = haha.__doc__
    >>> a
    'nothing'
    >>>

    lambda匿名函数 
    使用方法:lambda [arg1[,arg2,arg3,...,argn]] : expression

    Factorial = lambda x: x > 1 and x * Factorial(x - 1) or 1
    
    print Factorial(6)
    
    max = lambda a, b: (a > b) and a or b
    
    print max(2,3)
    
    x, y = 11, 12
    
    print (lambda : x+y)() #23
    
    print (lambda x: x+y)(x) #23
    
    print (lambda x: x+y)(y) #24 


    Generator生成器 
    可以保存状态的函数,用yield指令(不是return)返回一个值,并保存当前整个函数执行状态,等待下一次调用,如此循环往复,直至函数末尾,发生StopIteration异常。 
    generator利用next()来获取下一个返回值。

    def gen(n):
    
        for i in xrange(n):
    
            yield i
    
    g = gen(5)
    
    print g #<generator object gen at 0x00E82350>
    
    print g.next() #0
    
    print g.next() #1
    
    for x in g:
    
        print x    #2, 3, 4
    
    print g.next() #Error: StopIteration 

    python 3.x中 generator(有yield关键字的函数则会被识别为generator函数)中的next变为__next__了,next是python 3.x以前版本中的方法

    修改为下面这样运行正常
    f=fab(5)
    f.__next__()

    迭代器

    iter

    >>> L = {'x':1,'y':2,'z':3}
    >>> i = iter(L)

    filter函数 
    filter(bool_func,seq):此函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。

    def f(x): return x % 2 != 0 and x % 3 != 0
    
    print filter(f, range(2, 25)) 
    3.x 返回的是一个iter obj,如果想返还[],要加上list()

    >>> list(filter(bigger_than_five,[1,10]))
    [6, 7, 8, 9, 10]

    其实3.x里面,达到你的这个目的的最简单的方法就直接:
    >>> [x for x in range(11) if x > 5]
    [6, 7, 8, 9, 10]

    map函数 
    map(func,seq1[,seq2...]):将函数func作用于给定序列的每个元素,并用一个列表来提供返回值;如果func为None,func表现为身份函数,返回一个含有每个序列中元素集合的n个元组的列表。

    def cube(x): return x*x*x
    
    print map(cube, range(1, 5)) #[1, 8, 27, 64]
    
    print filter(cube, range(1,5)) #[1, 2, 3, 4]
    
    print map(lambda x : x * 2,[1,2,3,4,[5,6,7]])      
    

    #运行结果   
    [2, 4, 6, 8, [5, 6, 7, 5, 6, 7]]   
    None参数

    >>> map(None, 'abc', 'xyz123')

    [('a', 'x'), ('b', 'y'), ('c', 'z'), (None, '1'), (None, '2'), (None, '3')]

    据测试None参数在python3中不可用

     

    reduce函数 
    reduce(func,seq[,init]):func 为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值:如果初始值init给定,第一个比较会是init和第一个序列元素而不是序列的头两个元素。

    print reduce((lambda x, y: x + y), [1, 2, 3, 4]) #10
    
    print reduce((lambda x, y: x * y), [1, 2, 3, 4]) #24 


    zip函数 
    zip允许用户使用for循环访问平行的多个序列,zip将一个或多个序列作为参数,然后返回一系列的与序列中项平行的元组.

    x, y = [1, 2, 3], [4, 5, 6]
    
    print zip(x, y) #[(1, 4), (2, 5), (3, 6)]
    
    print list(zip(x, y)) #[(1, 4), (2, 5), (3, 6)]
    
    print dict(zip(x, y)) #{1: 4, 2: 5, 3: 6}
    
    print tuple(zip(x, y)) #((1, 4), (2, 5), (3, 6)) 
    
    
    
    T1, T2, T3 = (1,2,3), (4,5,6), (7,8,9)
    
    print list(zip(T1, T2, T3)) #[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    
    print tuple(zip(T1, T2, T3)) #((1, 4, 7), (2, 5, 8), (3, 6, 9)) 


    ASCII转换

    >>> ord('s') #115返回对应的ASCII码
    
    >>> chr(115)# 's'返回对应的字符

    进制转换

    >>> hex(255) #'0xff'
    
    >>> oct(255) #'0377' 
  • 相关阅读:
    【bzoj2588】Count on a tree
    【bzoj4205】卡牌配对
    【bzoj1502】月下柠檬树
    【learning】快速沃尔什变换FWT
    【bzoj3672】购票
    bzoj1402:[HAOI2008]硬币购物
    bzoj1090:[SCOI2003]字符串折叠
    bzoj1260[CQOI2007]涂色paint
    2016.08.07计算几何总结测试day2
    2016.08.06计算几何总结测试day1
  • 原文地址:https://www.cnblogs.com/phoenix-route/p/3570466.html
Copyright © 2011-2022 走看看