• python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r


    一、作用域

    作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变

    二、匿名函数

    lambda:正常和其他函数进行配合使用。正常无需把匿名函数赋值给一个变量。

    f=lambda x:x*x
    print(f)           #打印指向该函数的内存地址
    print(f(5))       #内存地址(5) 调用运行该函数
    
    def cala(x):
        y=x*x
        return y
    z=cala(5)
    print(z)
    >>>
    <function <lambda> at 0x10137d950>
    25
    100
    #name=alex  #修改为:name=alex_sb
    f=lambda x:x+'_sb'
    print(f('alex'))
    f=lambda x,y,z=10:x+y+z  #可以存在默认数值
    print(f(3,3))
    >>>>
    16
    f=lambda x,y,z=10:(x+1,y+1,z+1)  #如果需要对函数进行返回多个值,需要加括号
    print(f(3,3))
    >>>
    (4, 4, 11)
    #这段代码
    def calc(n):
        return n**n
    print(calc(10))
     
    #换成匿名函数
    calc = lambda n:n**n
    print(calc(10))

    三、函数式编程

    先过

    四、常见的函数式编程

    4.1、map函数:

      通过为了灵活实现多个字符串的多种变化,进行两次函数化的程序设计:

    def pf(x):
        return x**2
    
    def add_one(x):
        return x+1
    
    def reduce_one(x):
        return x-1
    
    def num_pin(fanfa,array):
        new_num=[]
        for i in array:
            new_num.append(fanfa(i))
        return new_num
    new_num=num_pin(pf,num_1)
    print(new_num)
    new_num2=num_pin(add_one,num_1)
    print(new_num2)
    
    [1, 4, 100, 25, 9, 49]
    [2, 3, 11, 6, 4, 8]
    num=[13,46,5,46,5,7]
    def pf(x):
        return x*x
    
    def jisuan(fuan,array):
        new_num=[]
        for i in array:
            new_num.append(fuan(i))
        return new_num
    
    print(jisuan(pf,num))
    f=lambda x:x*x
    print(f)
    print(lambda x:x*x)
    print(jisuan(f,num))
    print(jisuan(lambda x:x*x,num))
    >>>>
    [169, 2116, 25, 2116, 25, 49]
    <function <lambda> at 0x101b7da60>
    <function <lambda> at 0x101b7dae8>
    [169, 2116, 25, 2116, 25, 49]
    [169, 2116, 25, 2116, 25, 49]
    #终极版本
    def map_test(func,array): #func=lambda x:x+1    arrary=[1,2,10,5,3,7]
        ret=[]
        for i in array:
            res=func(i) #add_one(i)
            ret.append(res)
        return ret
    
    print(map_test(lambda x:x+1,num_l))
    res=map(lambda x:x+1,num_l)
    print('内置函数map,处理结果',res)
    # for i in res:
    #     print(i)
    print(list(res))
    print('传的是有名函数',list(map(reduce_one,num_l)))
    
    
    msg='linhaifeng'
    print(list(map(lambda x:x.upper(),msg)))
    
    >>>
    [2, 3, 11, 6, 4, 8]
    内置函数map,处理结果 <map object at 0x101b862e8>
    [2, 3, 11, 6, 4, 8]
    传的是有名函数 [0, 1, 9, 4, 2, 6]
    ['L', 'I', 'N', 'H', 'A', 'I', 'F', 'E', 'N', 'G']

    总结:

    对可迭代对象的每一个元素进行逻辑运算:可以使用匿名函数:lambda或者自定义函数

    ①、print(list(map(lambda x:x**2,num)))
    
    ②、
    
    num=[13,46,5,46,5,7]
    def pf(x):
        return x*x
    print(list(map(pf,num)))
    4.2、filter函数
    a=list(filter(lambda x: x.endswith('sb'),movie_people))
    print(a)
    >>>
    ['sb_wupeiqisb', 'linghaifensb']
    指定筛选列表、字符串、元祖(movie_peopl)中以sb结尾的元素。如果要不以sb结尾的话:x:not x.endswith('sb')
    迭代:movie_people里面的元素,for循环依次遍历一次,执行前面的匿名函数,如果是true的话保留元素,生成一个迭代器 。
    指向一个内存地址。如果需要打印出来的话,则需要用list现实出来
    4.3 reduce



  • 相关阅读:
    顺序容器的操作
    C++顺序容器
    Java8实战系列一
    Java枚举的小知识点
    Java集合框架入门介绍(一)
    测试代码格式
    Eclipse通过jdbc连接sqlserver2008数据库的两种方式
    排序算法之插入排序
    排序算法之冒泡排序
    容器扩容之分摊时间复杂度分析
  • 原文地址:https://www.cnblogs.com/laixiaoyun/p/6124060.html
Copyright © 2020-2023  润新知