• Python 函数进阶(filter/map/json/zip)


    一、函数即变量

    def say(name):
    print(name)
    ybq = say #可以被赋值给其他变量
    ybq('Amily') #调用函数

    函数名:say 

    函数体:第1-2行

    返回值:return 后的值

    函数的内存地址:当函数体被读进内存后的保存位置,它由标识符即函数名say引用,
                                                       也就是说say指向的是函数体在内存内的保存位置。

    函数名加括号:  例如say(),函数的调用方法,只有见到这个括号,程序会根据
                                                       函数名从内存中找到函数体,然后执行它

    函数名、函数加括号可以被当做参数传递,也可以被当做返回值return,有没有括号是两个截然不同的意思

    def say(name):#定义函数
    print(name)

    ybq = say #可以被赋值给其他变量
    ybq('Amily') #调用函数
    print(say) # 打印函数的内存地址
    print(type(say)) #打印函数的类型
    print(id(say)) #打印函数的id

    输出结果:

    Amily
    <function say at 0x0000000000B301E0>
    <class 'function'>
    11731424

    二、内置函数:map/filter/sorted 

    map()    map()函数接收两个参数,一个是函数,一个是可迭代对象(Iterable),map将传入的函数依次作用到序列的每个元素,并把结果作为新的可迭代对象返回

    filter()  和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

    实例1:

    def func(a): #求偶数
    if a%2==0:
    return True
    else:
    return False
    nums = [x for x in range(11)]
    all_res = []
    res = map(func,nums)
    res1 = filter(func,nums)
    print(list(res)) #循环调用函数,然后把每次函数处理的结果,放到一个list里面返回

    print(list(res1))

    输出结果:

    [True, False, True, False, True, False, True, False, True, False, True]
    [0, 2, 4, 6, 8, 10]

    实例二:(lambda  匿名函数)

    res = filter(lambda x: x > 5, [12, 3, 12, 2, 1, 2, 35])
    res1 = map(lambda x: x > 5, [1, 2, 3, 4, 5, 6])
    print(list(res))
    print(list(res1))
    输出结果:

    [12, 12, 35]
    [False, False, False, False, False, True]

    sorted()   #升序排列

    sorted(  ,reverse = True)  #降序排列

    输出结果:

    三、处理 json 

    Python JSON模块可以直接处理简单数据类型(string、unicode、int、float、list、tuple、dict)。

    json.dumps()方法返回一个str对象,编码过程中会存在从python原始类型向json类型的转化过程,具体的转化对照如下

      需要注意的是,json字符串中的字典类型的key必须要用双引号“”json.loads()才能正常解析

     1,将Python 数据结构转换成 Json 格式(编码)  json.dumps()

    indent参数是缩进的意思,它可以使数据的存储格式更优雅、可读性更强,这是通过增加一些冗余的空格进行填充的。但是在解码(json.loads())时,空白填充会被删除。

    loads时会将dumps时增加的intent 填充空格去除

    ensure_ascii  参数 显示中文

    实例:

    import json
    d = {
    'car':{'color':'red','price':100,'count':50},
    'car1':{'color':'red','price':100,'count':50},
    'car2':{'color':'red','price':100,'count':50},
    'car3':{'color':'red','price':100,'count':50},
    'car4':{'color':'red','price':100,'count':50},
    'car5':{'color':'red','price':100,'count':50},
    }
    res = json.dumps(d,indent=8,ensure_ascii=False) #把list、字典转成json,indent多少缩进,ensure_ascii可以显示中文
    f1 = open('f1','w',encoding='utf-8')
    f1.write(res)

    输出结果:

    2,将Json 格式 转换成 Python 数据结构(解码) json.loads()

    实例:

    f1 = open('f1',encoding='utf-8')
    res = f1.read()
    dict_res = json.loads(res) #把json串变成python的数据类型
    print(dict_res)
    print(type(dict_res))

    输出结果:

    {'car3': {'color': 'red', 'count': 50, 'price': 100}, 'car': {'color': 'red', 'count': 50, 'price': 100}, 'car1': {'color': 'red', 'count': 50, 'price': 100},

    'car5': {'color': 'red', 'count': 50, 'price': 100}, 'car2': {'color': 'red', 'count': 50, 'price': 100}, 'car4': {'color': 'red', 'count': 50, 'price': 100}}
    <class 'dict'>

    3,如果要处理的是文件而不是字符串,可以使用 json.dump() 和 json.load() 来编码和解码JSON数据

    写入json 格式的文件
    f1 = open('f1','w',encoding='utf-8')
    json.dump(d,f1,ensure_ascii=False,indent=4)
    #自动帮你写入文件,第一个参数是数据,第二个是文件对象
    读取文件
    f1 = open('f1',encoding='utf-8')
    print(json.load(f1))
    四、zip()函数
    zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。
    若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。
    实例1:
    a = [1,2,3]
    b = [4,5,6]
    c = [4,5,6,7,8]
    zipped = zip(a,b)
    print(list(zip(a,b)))#强制类型转换输出
    print(zip(a,b))#输出zip 对象
    print(list(zip(*zipped)))#解压zip 对象
    输出结果:

    [(1, 4), (2, 5), (3, 6)]
    <zip object at 0x0000000001157E08>
    [(1, 2, 3), (4, 5, 6)]

    实例2:

    id = [1,2,3,4]
    name = ['car1','car2','car3']
    for id,name in zip(id, name):
    print(id,name)

    输出结果:

    1 car1
    2 car2
    3 car3

     
  • 相关阅读:
    hdu1003 Max Sum【最大连续子序列之和】
    HDU 2639 骨头收集者 II【01背包 】+【第K优决策】
    poj2184 Cow Exhibition【01背包】+【负数处理】+(求两个变量的和最大)
    HDU 2955_Robberies 小偷抢银行【01背包】
    UVa 562
    HDU 1159 Common Subsequence 【最长公共子序列】模板题
    hdu 5748 Bellovin【最长上升子序列】
    POJ 3903 Stock Exchange 【最长上升子序列】模板题
    UVA 624 CD[【01背包】(输出路径)
    hdu 2546 饭卡【01背包】
  • 原文地址:https://www.cnblogs.com/chendai21/p/8303957.html
Copyright © 2020-2023  润新知