zoukankan      html  css  js  c++  java
  • Python函数Day6

    一、内置函数

    list()      将一个可迭代对象转化为列表

    字典转为列表:会将所有键转化为列表

    字符串转为列表:键每个字符转化为列表

    s = 'abc'
    dic = {'a':1,'b':2,'c':3}
    print(list(s))              # 字符串的字符逐个转为列表
    print(list(dic))            # 将字典的键转为列表
    
    # 结果
    ['a', 'b', 'c']
    ['a', 'b', 'c']

     

    tuple()      将一个可迭代对象转化为元组

    字典转为元组:会将所有键转化为元组

    字符串转为元组:键每个字符转化为元组

    s = 'abc'
    dic = {'a':1,'b':2,'c':3}
    print(tuple(s))             # 字符串的字符逐个转为元组
    print(tuple(dic))           # 将字典的键转为列表
    
    # 结果
    ('a', 'b', 'c')
    ('a', 'b', 'c')

     

    slice()    实现切片对象

    制作了切片的规则,方便其他的切片可以调用

    调用方法跟切片相似,列表[切片对象]

    li = [i for i in range(1,11)]
    section = slice(0,9,2)
    print(li[section])
    
    # 结果
    [1, 3, 5, 7, 9]

     

    str()      将数据类型转化为字符串

    s = str(123456789)
    print(s,type(s))
    
    # 结果
    123456789 <class 'str'>

     

    可以将bytes类型的字符转为str,需要加编码encoding

    s = str(b'xe4xbdxa0xe5xa5xbd',encoding='utf-8')
    print(s)
    
    # 结果
    你好

     

    format()      与数据相关,一般用于科学计算

    print(format('右对齐','>20'))          # 第一参数是任何类型,第二参数>右对齐和字符串的长度
    print(format('左对齐','<20'))          # 第一参数是任何类型,第二参数<左对齐和字符串的长度
    print(format('居中','^20'))            # 第一参数是任何类型,第二参数^居中和字符串的长度
    
    # 结果
                     右对齐
    左对齐                 
             居中         
    print(format(99,'b'))                  # 第一参数转化为二进制
    print(format(99,'d'))                  # 第一参数转化为十进制
    print(format(99,'o'))                  # 第一参数转化为八进制
    print(format(99,'x'))                  # 第一参数转化为十六进制,小写字母表示
    print(format(99,'X'))                  # 第一参数转化为十六进制,大写字母表示
    print(format(99,'n'))                  # 第一参数转化为十进制
    print(format(99,'c'))                  # 第一参数转化为unicode字符
    print(format('123'))                   # 默认
    
    # 结果
    1100011
    99
    143
    63
    63
    99
    c
    123

     

    bytes()            将unicode转化为bytes类型

    格式:bytes(字符串,encoding=编码)

    s = '哈哈哈'
    b = bytes(s,encoding='utf-8')
    print(b)
    
    # 结果
    b'xe5x93x88xe5x93x88xe5x93x88'

     

    将整型转化为bytes类型(不能加encoding)

    b = bytes(10)
    print(b,type(b))
    
    # 结果
    b'x00x00x00x00x00x00x00x00x00x00' <class 'bytes'>

     

    将可迭代对象转化为bytes类型(不能加encoding)

    b = bytes([1,2,3])
    print(b,type(b))
    
    # 结果
    b'x01x02x03' <class 'bytes'>

     

    bytearray()    返回一个新字节数组

    可以将字符串转化为unicode码,通过切片或者索引替换值,改变原来的值,id不变

    ret1 = bytearray('你好',encoding='utf-8')
    print(id(ret1))              # 2082285910312
    print(ret1)                  # bytearray(b'xe4xbdxa0xe5xa5xbd')
    print(ret1[:3])              # bytearray(b'xe4xbdxa0')
    ret1[:3] = b'xe6x82xa8'   # 通过切片替换值
    print(ret1)                  # bytearray(b'xe6x82xa8xe5xa5xbd')
    print(id(ret1))              # 2082285910312

     

    memoryview()     函数返回给定参数的内存查看对象(Momory view)。

    所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问。

    v = memoryview(bytearray('abc',encoding='utf-8'))
    print(v[0])                 # 97
    print(v[-1])                # 99
    ret2 = memoryview(bytes('你好',encoding='utf-8'))
    print(id(ret2))                             # 1745227157576
    print(ret2)                                 # <memory at 0x0000019657A51048>
    print(bytes(ret2).decode('utf-8'))          # 你好

     

    ord()    输入字符找该字符编码的位置,unicode的字符编码或者ascii的字符编码

    print(ord(''))            # 22909

     

    chr()    输入位置数字找出对应的字符,unicode的字符编码或者ascii的字符编码,跟ord相反

    print(chr(22909))           #

     

    ascii    函数类似 repr() 函数, 返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 repr() 函数使用 x, u 或 U 编码的字符

    print(ascii('a'))            # 'a'
    print(ascii(''))            # 'u597d'

     

    repr()    返回一个对象的string形式

    dic = {'baidu':'baidu.com','google':'google.com'}
    print(repr(dic),type(repr(dic)))            # {'baidu': 'baidu.com', 'google': 'google.com'} <class 'str'>
    
    s = 'google'
    print(repr(s))                              # 'google'

     

    用途:① 研究json pickle序列化模块,特殊字符串与python字符串的区别

    ② 格式化输出 %r

    print("I'll do a %r search" % ('Google'))
    
    # 结果
    I'll do a 'Google' search

     

    dict()    创建一个字典

    dic = dict(zip(['a','b','c'],[1,2,3]))      
    # {'a': 1, 'b': 2, 'c': 3}

     

    set()    创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等

     

    frozenset()  返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

    li = frozenset([1,2,3,4,5])
    # frozenset({1, 2, 3, 4, 5})

     

    len()    返回对象中元素的个数

    print(len([i for i in range(10)]))
    # 10

     

    sorted()  对所有可迭代的对象进行排序操作

    通过原对象排序后形成新的对象,对原对象无影响

    默认按对象的元素的索引0的元素排序

    dic = {'b':1,'c':3,'a':2}
    print(sorted(dic))
    
    # 结果
    ['a', 'b', 'c']

     

    参数key可以添加函数来比较。

    dic = {'b':1,'c':3,'a':2}
    def func(x):                                    # 字典的是传入键
        return dic[x]                               # 返回键对应的值
    print(sorted(dic,key=func,reverse=True))        # 通过函数的返回值来排序,reverse是倒序
    
    # 结果
    ['c', 'a', 'b']

     

    all()    可迭代对象里的元素全是True才返回True

    any()    可迭代对象里的元素有一个True就返回True

    li = [1,2,3,'',()]
    print(all(li))
    print(any(li))
    
    # 结果
    False
    True

     

    zip()    函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

    拉链方法:以长度最短的可迭代对象为主,写多个可迭代对象,将纵向组成一个个元组,按顺序排列;组合是一个迭代器。

    li = [1,2,3,4,5]
    tu = ('a','b','c')
    dic = {'i':10,'k':20,'j':30}
    print(zip(li,tu,dic))               # <zip object at 0x000002452FD4AFC8> 迭代器
    
    for i in zip(li,tu,dic):
        print(i)
    
    # 结果
    (1, 'a', 'i')
    (2, 'b', 'k')
    (3, 'c', 'j')

     

    filter()     函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

    类似于筛选模式下的列表推导式

    格式:filter(function or None, iterable)

    def func(x):return x % 2 == 1
    l1 = [i for i in range(10)]
    f1 = filter(func,l1)
    print(f1)                       # <filter object at 0x0000026A61F47908>  迭代器
    print(list(f1))                 # [1, 3, 5, 7, 9]
    
    # 结果
    <filter object at 0x0000026A61F47908>
    [1, 3, 5, 7, 9]

     

    map()   会根据提供的函数对指定序列做映射。

    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    类似于列表推导式的循环模式,根据提供的函数对指定序列做映射

    def func(x):return pow(x,3)
    li = [1,3,5,8,9]
    l2 = map(func,li)
    print(l2)                   # <map object at 0x0000022EE54A7A20> 迭代器
    print(list(l2))             # [1, 27, 125, 512, 729]
    
    # 结果
    <map object at 0x0000022EE54A7A20>
    [1, 27, 125, 512, 729]

     

    重点掌握:print、min、max、sum、map、sorted、reversed、filter、zip

    有key的内置函数:min、max、map、sorted、filter、zip

     

    二、匿名函数

    lambda 表达式 就是匿名函数,一行函数

    普通函数,有且只有返回值的函数才可以使用匿名函数进行简化,一行函数。

    匿名函数一般不单独使用,多余内置函数配合使用。

     

    格式:

    func = lambda x:x*2

    函数名 = lambda 参数 :返回值

    func = lambda x : pow(x,3)
    print(func(2))              # 8

     

    匿名函数的返回值可以放三元运算

    func = lambda x : x > 13 and x or x**2
    print(func(10))              # 100

     

    三、递归函数

    函数的自我调用,就称为递归函数。

    递归能解决的函数也能解决,而且递归算法解题的运行效率较低。

    使用递归函数一定要用 return

    # 求 8!
    def func(x):
        if x == 1:
            return x
        return x * func(x-1)
    print(func(8))

    python默认递归深度有限制的,默认998次,以免消耗尽内存

    def func(x):
        print(x)
        x += 1
        return func(x)
    func(1)
    
    # 结果
    1
    2
    ...
    ...
    ...
    996
    997
    998
    Traceback (most recent call last):
      File "D:/Day14/review.py", line 256, in <module>
        func(1)
      File "D:/Day14/review.py", line 255, in func
        return func(x)
      File "D:/Day14/review.py", line 255, in func
        return func(x)
      File "D:/Day14/review.py", line 255, in func
        return func(x)
      [Previous line repeated 993 more times]
      File "D:/Day14/review.py", line 253, in func
        print(x)
    RecursionError: maximum recursion depth exceeded while calling a Python object

    可以对深度进行修改,导入sys模块

    import sys
    sys.setrecursionlimit(100000)
    def func(x): print(x) x += 1 return func(x) func(1) # 结果 1 2 3 ... ... ... 3219 3220 3221
  • 相关阅读:
    day7
    11.3NOIP模拟赛
    codeforces 880E. Maximum Subsequence(折半搜索+双指针)
    11.2NOIP模拟赛
    bzoj1483: [HNOI2009]梦幻布丁(vector+启发式合并)
    day9
    codeforces 1006 F(折半搜索)
    codeforces 28D(dp)
    P2210 Haywire(A*)
    4800: [Ceoi2015]Ice Hockey World Championship(折半搜索)
  • 原文地址:https://www.cnblogs.com/st-st/p/9518416.html
Copyright © 2011-2022 走看看