我正在学习一个教程,它具有以下代码。我理解了为什么使用set()
的原因,但是没有使用将X
放在issubset()
中的用法。最后一个x
代表我是第一个x
子集,即lambda x:
吗?
请帮助。
lambda_x = lambda x: set(['Romance','Comedy', 'Action',
'Thriller']).issubset(x)
答案 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
可能会使事情更加混乱。并且此函数不应首先使用lambda
。 lambda
的全部要点是,您可以在表达式的中间使用它,而不必为定义的函数命名。如果要使用名称定义函数,请在语句中使用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
我不确定是否可以清楚地理解它。