使用此Lambda函数时,为什么.issubset(x)中应该有一个x?

时间:2018-07-19 03:38:50

标签: python lambda

我正在学习一个教程,它具有以下代码。我理解了为什么使用set()的原因,但是没有使用将X放在issubset()中的用法。最后一个x代表我是第一个x子集,即lambda x:吗? 请帮助。

lambda_x = lambda x: set(['Romance','Comedy', 'Action', 
'Thriller']).issubset(x)

4 个答案:

答案 0 :(得分:3)

lambda_x是一个确定其参数是否为硬编码类型集的超集的函数。最好写成这样

def lambda_x(x):
    return set(['Romance', 'Comedy', 'Action', 'Thriller']).issubset(x)

lambda表达式定义了一个匿名函数。如果要为其分配名称,请使用def语句。)

更好的是,只需定义bound方法。 (在函数式编程中,这称为无点样式。)

lambda_x = set(['Romance', 'Comedy', 'Action', 'Thriller']).issubset

答案 1 :(得分:2)

如果您只打s.issubset(),那就像是英语问题“ s是它的子集吗?”显然没有答案,因为这不是一个格式正确的问题。 什么

的子集

s是传递给该函数的事物的子集吗?”更有意义。而且在Python中,由于x是传递给此函数的东西(从lambda x:),所以就是s.issubset(x)


此处使用lambda可能会使事情更加混乱。并且此函数不应首先使用lambdalambda的全部要点是,您可以在表达式的中间使用它,而不必为定义的函数命名。如果要使用名称定义函数,请在语句中使用def

def使我们可以自由地重写一些东西:

def romcomactionthriller(genres):
    rcat_genres = set(['Romance','Comedy', 'Action', 'Thriller'])
    return rcat_genres.issubset(genres)

因此,您采用的参数是一组类型,并且您想知道rcat_genres是否是该类型的子集。因此,您可以这样做:

if romcomactionthriller(movie.list_genres()):
    print('Found a movie we can all enjoy')
    return movie

答案 2 :(得分:1)

想法是测试RCAT(浪漫,喜剧,动作,惊悚片)集是x的子集。那是

lambda_x(['Comedy', 'Romance', 'Action', 'Thriller', 'Sci-Fi'])

True

同时

lambda_x(['Comedy', 'Romance', 'Action'])

False

这似乎是一个人为的例子。对于教学示例,请考虑

square_x = lambda x: x * x
square_x(2) # 4
square_x(3) # 9

此外,您可以使用x之外的其他名称。

cube = lambda y: y * y * y
cube(2) # 8

答案 3 :(得分:1)

lambda_x是函数名称。如果要调用它,则需要传递参数x,x应该是一个集合。 lambda_x将返回布尔值,即set(['Romance','Comedy','Action','Thriller'])是否是您传递的集合“ x”的子集

lambda_x = lambda x: set(['Romance','Comedy', 'Action', 'Thriller']).issubset(x)
lambda_x(set(['Romance','Comedy']))
>>>>False
lambda_x(set(['Romance','Comedy','Romance','Comedy', 'Action', 'Thriller']))
>>>>True

我不确定是否可以清楚地理解它。