• python之路--内置函数, 匿名函数


    一 . 内置函数

      什么是内置函数? 就是python给你提供的. 拿来直接⽤的函数, 比如print., input等等. 

        字符串类型代码的执⾏
        eval() 执⾏字符串类型的代码. 并返回最终结果(当执行大量数据的时候会有问题)

    print(eval("2+2")) # 4
    n = 8
    print(eval("2+n")) # 10
    def func():
        print(666)
    eval("func()") # 666

        exec() 执⾏字符串类型的代码

    exec("""
    for i in range(10):
        print(i)
    """)
    exec("""
    def func():
        print("我是周杰伦")
    func()
    """)

        compile() 将字符串类型的代码变异. 代码对象能够通过exec语句来执⾏或者eval()进⾏求值.

    '''
     参数说明:
     1. resource 要执⾏的代码, 动态代码⽚段
     2. ⽂件名, 代码存放的⽂件名, 当传⼊了第⼀个参数的时候, 这个参数给空就可以了
     3. 模式, 取值有3个,
             1. exec: ⼀般放⼀些流程语句的时候
             2. eval: resource只存放⼀个求值表达式.
             3. single: resource存放的代码有交互的时候. mode应为single
    '''
     
    code1 = "for i in range(10): print(i)"
    c1 = compile(code1, "", mode="exec")
    exec(c1)
    
    code2 = "1+2+3"
    c2 = compile(code2, "", mode="eval")
    a = eval(c2)
    print(a)
    
    code3 = "name = input('请输⼊你的名字:')"
    c3 = compile(code3, "", mode="single")
    exec(c3)
    print(name)

        有返回值的字符串形式的代码⽤eval(). 没有返回值的字符串形式的代码⽤exec(). ⼀般很少⽤到compile()

    二 . 匿名函数

      lambda匿名函数

    为了解决一些简单的需求而设计的一句话函数 
    # 计算n的n次⽅
    def func(n):
        return n**n
    print(func(10))
    
    f = lambda n: n**n
    print(f(10))

      lambda表⽰的是匿名函数. 不需要⽤def来声明, ⼀句话就可以声明出⼀个函数
      语法:
        函数名 = lambda 参数: 返回值
      注意:
        1. 函数的参数可以有多个. 多个参数之间⽤逗号隔开
        2. 匿名函数不管多复杂. 只能写⼀⾏, 且逻辑结束后直接返回数据
        3. 返回值和正常的函数⼀样, 可以是任意数据类型

    三 . 排序函数

      sorted()
      语法: sorted(Iterable, key=None, reverse=False)
          Iterable: 可迭代对象
          key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每⼀个元素传递给这个函数的参数. 根据函数运算的结果进⾏排序
          reverse: 是否是倒叙. True: 倒叙, False: 正序

    lst = [1,5,3,4,6]
    lst2 = sorted(lst)
    print(lst) # 原列表不会改变
    print(lst2) # 返回的新列表是经过排序的
    
    dic = {1:'A', 3:'C', 2:'B'}
    print(sorted(dic)) # 如果是字典. 则返回排序过后的key

      和函数组合使⽤

    # 根据字符串⻓度进⾏排序
    lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
    
    # 计算字符串⻓度
    def func(s):
        return len(s)
    print(sorted(lst, key=func))

      和lambda组合使用

    # 根据字符串⻓度进⾏排序
    lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
    # 计算字符串⻓度
    def func(s):
        return len(s)
    print(sorted(lst, key=lambda s: len(s)))
    
    lst = [{"id":1, "name":'alex', "age":18},
             {"id":2, "name":'wusir', "age":16},
             {"id":3, "name":'taibai', "age":17}]
    # 按照年龄对学⽣信息进⾏排序
    print(sorted(lst, key=lambda e: e['age']))   # e 就是for i in sorted后面的可迭代参数中的 i 

    四. 筛选函数

      filter()
      语法: filter(function. Iterable)
          function: ⽤来筛选的函数. 在filter中会⾃动的把iterable中的元素传递给function. 然后
          根据function返回的True或者False来判断是否保留此项数据
          Iterable: 可迭代对象

    lst = [1,2,3,4,5,6,7]
    ll = filter(lambda x: x%2==0, lst) # 筛选所有的偶数
    print(ll)
    print(list(ll))
    
    lst = [{"id":1, "name":'alex', "age":18},
             {"id":2, "name":'wusir', "age":16},
             {"id":3, "name":'taibai', "age":17}]    
    
    fl = filter(lambda e: e['age'] > 16, lst) # 筛选年龄⼤于16的数据
    print(list(fl))

    五 . 映射函数

      map()
      语法: map(function, iterable) 可以对可迭代对象中的每⼀个元素进⾏映射. 分别取执⾏
          function

          计算列表中每个元素的平⽅ ,返回新列表

    def func(e):
        return e*e
    
    mp = map(func, [1, 2, 3, 4, 5])
    print(mp)
    print(list(mp))

           改写成lambda

    print(list(map(lambda x: x * x, [1, 2, 3, 4, 5])))

                计算两个列表中相同位置的数据的和

    # 计算两个列表相同位置的数据的和
    lst1 = [1, 2, 3, 4, 5]
    lst2 = [2, 4, 6, 8, 10]
    print(list(map(lambda x, y: x+y, lst1, lst2)))
  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/attila/p/10108124.html
Copyright © 2020-2023  润新知