zoukankan      html  css  js  c++  java
  • day16 内置函数和匿名函数

    #python里有哪些数据类型:int、bool、str、list、tuple、dict、set
    #Python里有哪些数据结构:dic、list、tuple、set、str
    #reversed():反转
    l = [1,2,3,4,5]
    l2 = reversed(l)
    print(l2) #输出结果为<list_reverseiterator object at 0x00349070>
    #保留原列表,返回一个反向的迭代器
    #slice:切片
    l = (1,2,23,213,5612,342,43)
    sli = slice(1,5,2)
    print(l[sli]) #等同于l[1:5:2]
    #formate
    '''
    #字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐
    print(format('test', '<20'))
    print(format('test', '>20'))
    print(format('test', '^20'))

    #整形数值可以提供的参数有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None
    >>> format(3,'b') #转换成二进制
    '11'
    >>> format(97,'c') #转换unicode成字符
    'a'
    >>> format(11,'d') #转换成10进制
    '11'
    >>> format(11,'o') #转换成8进制
    '13'
    >>> format(11,'x') #转换成16进制 小写字母表示
    'b'
    >>> format(11,'X') #转换成16进制 大写字母表示
    'B'
    >>> format(11,'n') #和d一样
    '11'
    >>> format(11) #默认和d一样
    '11'
    '''
    #bytes
    ret = bytearray('alex',encoding='utf-8')
    print(id(ret))
    print(ret[0])
    ret[0] = 65
    print(ret)
    print(id(ret))

    print(bytes('你好',encoding="GBK").decode('GBK')) #Unicode转换成GBK的bytes
    print(bytes('你好',encoding='utf-8')) #unicode转换成utf-8的bytes

    #网络编程 只能传二进制
    #照片和视频也是以二进制储存
    #HTML网页爬取到的也是源码
    #bytearray
    b_array = bytearray('你好',encoding='utf-8')
    print(b_array)
    print(b_array[0])

    #memoryview
    ret = memoryview(bytes('你好',encoding='utf-8'))
    print(len(ret))
    print(bytes(ret[:3]).decode('utf-8'))
    print(bytes(ret[3:]).decode('utf-8'))
    #切片 ---字节类型 不占内存
    #字节 ---字符串 占内存
    #ord:字符按照Unicode转换数字
    print(ord('a'))
    print(ord('l'))
    #chr:数字按照Unicode转换字符
    print(chr(97))
    #ascii
    print(ascii('好'))
    print(ascii(1))
    #repr:用%r格式化输出
    name = 'egg'
    print('你好%r'%name)
    print(repr('l'))

    #all 其中只要有一个False其结果就是false,全部都为True时才为True
    print(all(['a','',123]))
    print(all(['a',123]))
    print(all([0,123]))
    #运行结果
    '''False
    True
    False'''
    #any 其中只要有一个是True,其结果就是True,否则为False
    print(any(['a','',123]))
    print(any(['a',123]))
    print(any([0,'']))
    #运行结果
    '''
    True
    True
    False
    '''

    #zip 拉链方法
    l = [1,2,3]
    l2 = ['a','b','c','d']
    l3 = ('*','**',[1,2])
    d = {'k1':1,"k2":2} #字典使用zip只能将key拉上
    for i in zip(l,l2,l3,d):
    print(i)
    #filter过滤方法,过滤函数
    l1 = [1, 4, 6, 7, 9, 12, 17]
    l2 = [1, 4,'haha', 6,'yzx',None,[],'', 7, 9, 12, 17]
    def is_odd(x):
    return x % 2 == 1
    def is_str(s):
    return s and str(s).strip()
    ret = filter(is_odd,l1) #返回一个迭代器,等同于[i for i in range(l1) if i % 2 == 1]
    for i in ret:
    print(i)
    res = filter(is_str,l2) #过滤字符串
    for j in res:
    print(j)

    from math import sqrt
    print(sqrt(64))
    #法1
    def func(num):
    res = sqrt(num)
    return res % 1 == 0
    ret = filter(func,range(1,101))
    for i in ret:
    print(i)
    import math
    #法二
    def is_sqr(x):
    return math.sqrt(x) % 1 == 0
    print(list(filter(is_sqr, range(1, 101))))

    #map
    ret = map(abs,[1,-4,6,8])
    print(ret)
    for i in ret:
    print(i)

    #总结filter、map
    #filter:执行了filter之后的结果集合 <=执行之前的个数
    #filter只管筛选,不会改变原来的值
    #map 执行前后元素个数不变
    #值可能发生改变

    #sorted
    l = [1,-4,6,5,-10]
    l.sort(key=abs) #sort在原列表的基础上进行排序
    print(l)
    #运行结果
    #[1, -4, 5, 6, -10]
    print(sorted(l)) # sorted是生成一个新列表,不改变原列表,缺点是占内存
    print(l)
    #运行结果
    '''
    [-10, -4, 1, 5, 6]
    [1, -4, 5, 6, -10]'''

    #列表按照每一个元素的len排序
    l = [[1,2],[3,4,5,6],(7,),'123']
    print(sorted(l,key=len))

    #匿名函数
    '''
    函数名 = lambda 参数 :返回值

    #参数可以有多个,用逗号隔开
    #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
    #返回值和正常的函数一样可以是任意数据类型
    '''
    calc = lambda n:n**n
    print(calc(10))

    def add(x,y):
    return x+y
    #上面add函数转换为匿名函数如下:
    add = lambda x,y:x+y
    print(add(10,10))

    l=[3,2,100,999,213,1111,31121,333]
    print(max(l))

    dic={'k1':10,'k2':100,'k3':30}

    print(max(dic))
    print(dic[max(dic,key=lambda k:dic[k])]) #max排序排的时字典中的key

    #从lambda函数转换为函数
    #lambda函数
    res = filter(lambda x:x>10,[5,8,11,9,15])
    for i in res:
    print(i)
    #普通函数
    def func(x):
    return x>10
    res = filter(func,[5,8,11,9,15])
    for i in res:
    print(i)

    #面试题练一练
    #1.下面程序的输出结果是:4096
    d = lambda p:p*2
    t = lambda p:p*3
    x = 2
    x = d(x)
    x = t(x)
    x = d(x)
    print(x)
    #运行结果:24
    #2.现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]
    #解题思路:匿名函数 == 内置函数(max,min,sorted,filter,map)
    ret = zip((('a'),('b')),(('c'),('d')))
    # def func(tup):
    # return {tup[0]:tup[1]}
    res = map(lambda tup:{tup[0]:tup[1]},ret)
    print(list(res))
    #3.以下代码的输出是什么?请给出答案并解释。
    def multipliers():
    return (lambda x:i*x for i in range(4))
    print([m(2) for m in multipliers()])
    #请修改multipliers的定义来产生期望的结果。

    def story():
    s = """
    从前有个山,山里有座庙,庙里老和尚讲故事,
    讲的什么呢?
    """
    print(s)
    story()

    story()
    import sys
    print(sys.setrecursionlimit(100000))
    def foo(n):
    print(n)
    n += 1
    foo(n)
    foo(1)

    def age(n):
    if n == 1:
    return 40
    else:
    return age(n-1)+2

    print(age(4))


  • 相关阅读:
    GitLabCI系列之流水线语法
    ssh访问控制,阻断异常IP,防止暴力破解
    天翼云主机高可用的两种办法
    kvm命令管理虚拟机
    kvm安装windows使用virtio驱动
    kvm上已安装的虚拟机修改为桥接网络
    监控Redis集群,有两种方法
    vivo 公司 Kubernetes 集群 Ingress 网关实践
    KVM里安装不是原装的winxp系统镜像
    kvm里的虚拟机硬盘和网卡使用virtio驱动
  • 原文地址:https://www.cnblogs.com/Murraya/p/10822216.html
Copyright © 2011-2022 走看看