鱼C论坛

 找回密码
 立即注册
查看: 871|回复: 3

[已解决]关于lambda表达式、filter函数中可迭代参数的问题

[复制链接]
发表于 2019-11-18 16:01:30 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 小甲鱼的龟壳儿 于 2019-11-18 16:10 编辑

1、小甲鱼老师的视频中关于lambda表达式的栗子都是表达式后只有一个式子(不知道咋描述),如:

lambda x: return x+2

或者

lambda x,y: return  x + y       诸如此等

那么如果我要改写这样一个普通函数呢:

def fun(x,y):
    x = x+2
    y = y+3
    return x,y

我是这样写的:

lambda x,y: x = x+2,y = y+3      报错:不能赋值给lambda
lambda x,y: x+2,y+3     报错: y未定义

那么是否可以认为λ表达式只能针对单一变量(如x)或者多变量(如x、y)迭代返回的单一值(只返回单一的一个x值或者x+y的值)进行简写,
不能对多变量迭代返回的多个值(如函数分别返回两个值,x 和 y)进行简化缩写?

那么如果我非要对含多个参数的函数如:

def fun(x,y):
    x = x+2
    y = y+3
    return x,y  进行简写有方法吗,可以用lambda表达式吗?


2、filter函数中参数iterable只能有一个,那么如果函数有多个形参如何使用filter()呢,如:

list(filter(lambda x,y: x-y,[1,2,3],[1,0,2]"))

标红双引号内的位置参数只允许有一个,无论怎么写都报错,如写成([1,2,3],[1,0,2])或打包形式[(1,1),(2,0),(3,2)]均   报错--’y未定义‘,
分开写[1,2,3],[1,0,2]参数过多,那么应该如何写才能正确使用呢?

非常感谢您的解答 ^_^~








最佳答案
2019-11-18 16:01:31
小甲鱼的龟壳儿 发表于 2019-11-18 16:38
谢谢您~
我可真是个笨蛋啊


  1. def filter(function_or_none, sequence): # known special case of filter
  2.     """
  3.     filter(function or None, sequence) -> list, tuple, or string
复制代码


filter 只接收一个sequence类型数据,如list, tuple, string,只能把他们当做一个参数打包,在函数内部再分解

  1. def func_filter(vals):
  2.     if len(vals) == 2 and vals[0] > 0 and vals[1] > 0:
  3.         return True
  4.     else:
  5.         return False
  6. filter(func_filter,[[-1,-1],[0,0],[1,1]])
复制代码

最佳答案

查看完整内容

filter 只接收一个sequence类型数据,如list, tuple, string,只能把他们当做一个参数打包,在函数内部再分解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-18 16:01:31 | 显示全部楼层    本楼为最佳答案   
小甲鱼的龟壳儿 发表于 2019-11-18 16:38
谢谢您~
我可真是个笨蛋啊


  1. def filter(function_or_none, sequence): # known special case of filter
  2.     """
  3.     filter(function or None, sequence) -> list, tuple, or string
复制代码


filter 只接收一个sequence类型数据,如list, tuple, string,只能把他们当做一个参数打包,在函数内部再分解

  1. def func_filter(vals):
  2.     if len(vals) == 2 and vals[0] > 0 and vals[1] > 0:
  3.         return True
  4.     else:
  5.         return False
  6. filter(func_filter,[[-1,-1],[0,0],[1,1]])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-18 16:33:13 | 显示全部楼层
  1. tes = lambda x,y: (x+2,y +3)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-18 16:38:16 | 显示全部楼层

谢谢您~
我可真是个笨蛋啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表