zoukankan      html  css  js  c++  java
  • day03 Python集合、函数、lambda及一些内置函数

    一、集合

    与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复
    创建集合:
        使用set函数
    
    集合操作:
    s = set([3,5,9,10])      #创建一个数值集合  
      
    t = set("Hello")         #创建一个唯一字符的集合  
    
    a = t | s          # t 和 s的并集  
      
    b = t & s          # t 和 s的交集  
      
    c = t – s          # 求差集(项在t中,但不在s中)  
      
    d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)
    
    t.add('x')            # 添加一项  
      
    s.update([10,37,42])  # 在s中添加多项  
    
    t.remove('H')      #删除一项  
    
    len(s)  
    set 的长度  
      
    x in s  
    测试 x 是否是 s 的成员  
      
    x not in s  
    测试 x 是否不是 s 的成员  
      
    s.issubset(t)  
    s <= t  
    测试是否 s 中的每一个元素都在 t 中  
      
    s.issuperset(t)  
    s >= t  
    测试是否 t 中的每一个元素都在 s 中  
      
    s.union(t)  
    s | t  
    返回一个新的 set 包含 s 和 t 中的每一个元素  
      
    s.intersection(t)  
    s & t  
    返回一个新的 set 包含 s 和 t 中的公共元素  
      
    s.difference(t)  
    s - t  
    返回一个新的 set 包含 s 中有但是 t 中没有的元素  
      
    s.symmetric_difference(t)  
    s ^ t  
    返回一个新的 set 包含 s 和 t 中不重复的元素  
      
    s.copy()  
    返回 set “s”的一个浅复制  
    
    s.update(t)  
    s |= t  
    返回增加了 set “t”中元素后的 set “s”  
      
    s.intersection_update(t)  
    s &= t  
    返回只保留含有 set “t”中元素的 set “s”  
      
    s.difference_update(t)  
    s -= t  
    返回删除了 set “t”中含有的元素后的 set “s”  
      
    s.symmetric_difference_update(t)  
    s ^= t  
    返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”  
      
    s.add(x)  
      
    向 set “s”中增加元素 x  
      
    s.remove(x)  
      
    从 set “s”中删除元素 x, 如果不存在则引发 KeyError  
      
    s.discard(x)  
      
    如果在 set “s”中存在元素 x, 则删除  
      
    s.pop()  
      
    删除并且返回 set “s”中的一个不确定的元素, 如果为空则引发 KeyError  
      
    s.clear()  
      
    删除 set “s”中的所有元素

    二、函数

    创建函数:
        def关键字
    注意:return,在函数中,一旦执行return,函数执行过程立即终止
    
    第一种:位置或关键字参数
    
    这种参数是Python中默认的参数类型,定义这种参数后,可以通过位置参数,或者关键字参数的形式传递参数:
    
    eg:
    
    ## 位置或者关键字参数
    ## 这个是Python的默认参数类型
    ## 示例:arg2提供了默认value
    def func(arg1, arg2="World!"):
        print arg1, arg2
     
    ## func可以通过位置参数形式调用
    func("Hello", "MitchellChu")
     
    ## 也可以通过关键字参数的形式来调用func
    func(arg1="Hello", arg2="World!")
     
    ## 当然,混合的方式也是完全没有问题的
    func("Hello", arg2="World!")
    
    第二种方式:仅适用位置参数的形式
    
    这种形式在需要将参数传递给函数(方法)时,仅能通过位置参数的传递方式。这种形式对于Python的开发者来说,暂时并没有办法使用。这种形式现在仅存在Python的很多内建的函数上:
    
    eg:
    ## Positional-only parameter has no syntax to define
    ## 虽然无定义方法,但内建的很多函数都是仅接受位置参数的
    abs(-3) ## correct
    abs(a=3) ## wrong
     
    ## Traceback (most recent call last):
    ##   File "<stdin>", line 1, in <module>
    ## TypeError: abs() takes no keyword arguments
     
     
    pow(x=2,y=3)
    ## Traceback (most recent call last):
    ##   File "<stdin>", line 1, in <module>
    ## TypeError: pow() takes no keyword arguments
     
    pow(2,3)
    ## 8
    
     第三种:任意数量的位置参数(带单个星号参数)
    
    任意数量的位置参数在定义的时候是需要一个星号前缀来表示,在传递参数的时候,可以在原有参数的后面添加任意多个参数,这些参数将会被放在元组内提供给函数(方法):
    
    eg:
    ## var-positional parameter
    ## 定义的时候,我们需要添加单个星号作为前缀
    def func(arg1, arg2, *args):
        print arg1, arg2, args
     
    ## 调用的时候,前面两个必须在前面
    ## 前两个参数是位置或关键字参数的形式
    ## 所以你可以使用这种参数的任一合法的传递方法
    func("hello", "Tuple, values is:", 2, 3, 3, 4)
     
    ## Output:
    ## hello Tuple, values is: (2, 3, 3, 4)
    ## 多余的参数将自动被放入元组中提供给函数使用
     
    ## 如果你需要传递元组给函数
    ## 你需要在传递的过程中添加*号
    ## 请看下面例子中的输出差异:
     
    func("hello", "Tuple, values is:", (2, 3, 3, 4))
     
    ## Output:
    ## hello Tuple, values is: ((2, 3, 3, 4),)
     
    func("hello", "Tuple, values is:", *(2, 3, 3, 4))
     
    ## Output:
    ## hello Tuple, values is: (2, 3, 3, 4)
    
    第四种:任意数量的关键字参数(带两个星号参数)
    
    任意数量的关键字参数在定义的时候,参数名称前面需要有两个星号(**)作为前缀,这样定义出来的参数,在传递参数的时候,可以在原有的参数后面添加任意多个关键字参数,关键字参数是使用[参数名称=参数值]的形式进行传递:
    
    eg:
    ## var-keywords parameter
    ## 定义的时候,需要两个星号作为前缀
    def func(arg1, arg2, **kwargs):
        print arg1, arg2, kwargs
     
    func("hello", "Dict, values is:", x=2, y=3, z=3)
     
    ## Output:
    ## 多余的参数将自动被放入字典中提供给函数使用
     
    ## 如果你需要直接传递字典给函数
    ## 你需要在传递的过程中添加**
    ## 此时如果还有关键字参数应在字典前提供完成
    ## 不能在字典后再提供
    ## 请看下面例子中的输出差异:
     
    func("hello", "Dict., values is:", **{'x':2, 'y':3, 'z':3})
    ## hello Dict., values is: {'y': 3, 'x': 2, 'z': 3}
     
    func("hello", "Dict., values is:", **{'x':2, 'y':3, 'z':3,})
    ## hello Dict., values is: {'y': 3, 'x': 2, 'z': 3}
     
    func("hello", "Dict., values is:", {'x':2, 'y':3, 'z':3})
    ## Traceback (most recent call last):
    ##   File "<stdin>", line 1, in <module>
    ## TypeError: func() takes exactly 2 arguments (3 given)
     
    func("hello", "Dict., values is:", s=3, **{'x':2, 'y':3, 'z':3,})
    ## hello Dict., values is: {'y': 3, 'x': 2, 's': 3, 'z': 3}
     
    ## 提供了重复的参数
    func("hello", "Dict., values is:", y=3, **{'x':2, 'y':3, 'z':3,})
    ## Traceback (most recent call last):
    ##   File "<stdin>", line 1, in <module>
    ## TypeError: func() got multiple values for keyword argument 'y'
    
     总结:四种参数形式中仅有第二种Python没有提供定义的方法,其他三种在定义的时候也需要注意,定义的时候应该根据Python的解析规律进行定义,其中:
    
    位置或关键字参数应该在最前面,其中,没有默认值的应该在有默认值的参数前面
    任意数量位置参数应该放在所有位置或关键字参数的后面
    任意数量关键字参数应该放在任意数量位置参数的后面
    注意:任意数量位置参数和任意数量关键字参数只能在定义中定义一次。

    三、三元运算及lamdba表达式

    三元运算:
    >>> 1 if True else 0  
    1  
    >>> 1 if False else 0  
    0  
    >>> "Fire" if True else "Water"  
    'Fire'  
    >>> "Fire" if False else "Water"  
    'Water'  
    
    
    lamdba表达式:
    lambda只是一个表达式,函数体比def简单很多。
    
    lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    
    lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。
    
    f = lambda x,y,:x+y
    f(2,3)
    5

    四、Python中的一些内置函数

    abs()  取得绝对值
     all()   所有为真,才为真
     any()   只要有一个真,就为真
     ascii()  自动执行对象的__repr__方法
    
    
     bin()   将10进制转换为2进制
     oct()   将10进制转换为8进制
     hex()   将10进制转换为16进制
    
     bool()   判断值是True还是False
     
     bytes()  字符串转换字符类型
  • 相关阅读:
    [spring]AOP(切面)编程
    [spring]基于注解的spring配置
    [redis]redis五种数据类型和应用场景
    [redis]redis实现分页的方法
    [zookeeper]ZooInspector的使用
    [log4j]SLF4J+log4j的使用
    [zookeeper]依赖jar的问题
    导出word功能,用html代码在word中插入分页符
    jq实现千分位的转换
    oracle 创建表空间及oracle 11g表空间之最大最小
  • 原文地址:https://www.cnblogs.com/xuanouba/p/5536465.html
Copyright © 2011-2022 走看看