首页 > 编程语言 > 详细

Python之第十六天的努力--匿名函数lambda

时间:2020-06-16 21:33:54      阅读:60      评论:0      收藏:0      [点我收藏+]

01 内容回顾

  • 生成器:生成器就是迭代器,生成器是自己用python代码构建的
    • 1.生成器函数
    • 2.生成器表达式
    • 3.python内部提供的
  • yield
  • yield return
  • yield from 将一个可迭代对象,变成一个生成器。
  • 列表推导式,生成器表达式。
    • 循环模式:[变量(加工后的变量) for 变量 in iterable]
    • 筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
  • 内置函数1

02 练习

# 求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]
# print([[i-2,i-1,i] for i in range(3,10,3)])



# 构建一个列表:
# [‘python1期‘, ‘python2期‘, ‘python3期‘, ‘python4期‘, ‘python6期‘, ‘python7期‘,
# ‘python8期‘, ‘python9期‘, ‘python10期‘]
# print([f‘python{i}期‘ for i in range(1,11) if i != 5])



# 有一个列表l1 = [‘alex‘, ‘WuSir‘, ‘老男孩‘, ‘太白‘]
# 将其构造成这种列表[‘alex0‘, ‘WuSir1‘, ‘老男孩2‘, ‘太白3‘]
# l1 = [‘alex‘, ‘WuSir‘, ‘老男孩‘, ‘太白‘]
# print([i+str(l1.index(i)) for i in l1 ])



# 有以下数据类型:
#
# x = {‘name‘:‘alex‘,
#      ‘Values‘:[{‘timestamp‘:1517991992.94,‘values‘:100,},
#                {‘timestamp‘: 1517992000.94,‘values‘: 200,},
#             {‘timestamp‘: 1517992014.94,‘values‘: 300,},
#             {‘timestamp‘: 1517992744.94,‘values‘: 350},
#             {‘timestamp‘: 1517992800.94,‘values‘: 280}],}
# 将上面的数据通过列表推导式转换成下面的类型:
# [[1517991992.94, 100], [1517992000.94, 200], [1517992014.94, 300],[1517992744.94, 350], [1517992800.94, 280]]
# print([[i[‘timestamp‘],i[‘values‘]] for i in x.get(‘Values‘)])



# 用列表完成笛卡尔积
#
# 什么是笛卡尔积? 笛卡尔积就是一个列表,列表里面的元素是由输入的可迭代类型的元素对构成的元组,
# 因此笛卡尔积列表的长度等于输入变量的长度的乘积。
#
#  a. 构建一个列表,列表里面是三种不同尺寸的T恤衫,每个尺寸都有两个颜色(列表里面的元素为元组类型)。
# colors = [‘black‘, ‘white‘]
# sizes = [‘S‘, ‘M‘, ‘L‘]
# print([(color,size) for color in colors for size in sizes])



# 看下面代码,能否对其简化?说说你简化后的优点?
#
# def chain(*args):
#     # (‘abc‘,(0,1,2))
#     for it in args:
#         for i in it:
#             yield i
#
# g = chain(‘abc‘,(0,1,2))
# # next, for 循环 , 转化成list
#
# print(list(g))  # 将迭代器转化成列表

# def chain(*args):
#     # (‘abc‘,(0,1,2))
#     for it in args:
#         yield from it
#
# g = chain(‘abc‘,(0,1,2))
# print(list(g))

# 优化了内层循环,提高了效率。



# 11.看代码求结果:(面试题)
# def demo():
#     for i in range(4):
#         yield i
#
# g=demo()                    # 地址
#
# g1=(i for i in g)           # 地址
# g2=(i for i in g1)          # 地址
#
# print(list(g1))
# # list((i for i in demo()))
# # [0,1,2,3]
#
# print(list(g2))
# # []



# 12.看代码求结果:(面试题)
def add(n,i):
    return n+i

def test():
    for i in range(4):
        yield i

g=test()
for n in [1,10]:
    g=(add(n,i) for i in g)
# 第一次循环:
# n = 1
# g=(add(n,i) for i in g)

# 第二次循环:
# n = 10
# g=(add(n,i) for i in g)
print(list(g))
# list(g) ---> list((add(10,i) for i in (add(10,i) for i in text())))
# list(g) ---> list((add(10,i) for i in (add(10,i) for i in [0,1,2,3])))
# list(g) ---> list((add(10,i) for i in [10,11,12,13]))
# [20,21,22,23]

03 匿名函数lambda

# 匿名函数:一句话函数,比较简单的函数。

# def func(a,b):
#     return a+b
# 构建匿名函数
# func1 = lambda a,b:a +b
# print(func1(1,2))           # 3


# 接收一个可切片的数据,返回索引为0与2的对应的元素(元组形式)。
# func2 = lambda x:(x[0],x[2])
# print(func2([11,22,33,44,55]))
# (11, 33)


# 接收两个int参数,将较大的数据返回。
# func3 = lambda a,b:max(a,b)
# print(func3(1,100))
# 100

Python之第十六天的努力--匿名函数lambda

原文:https://www.cnblogs.com/szheng/p/13144618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!