Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在值上映射它';有什么区别吗?_Python_Functional Programming_Maybe - Fatal编程技术网

Python 如何在值上映射它';有什么区别吗?

Python 如何在值上映射它';有什么区别吗?,python,functional-programming,maybe,Python,Functional Programming,Maybe,当且仅当值不是None时,是否有一种简洁的方法来映射该值?差不多 def fmapMaybe(f, v): if v is not None: f(v) else: None 更新:我正在寻找一种方法来处理值,如果它们与None不同,则保留None,否则,语义与我的fmapMaybe完全相同 在上面的代码中,f是一个任意单参数函数,v是一个值,如果它与None不同,则应传递给f。对什么是v或f没有进一步的限制 举一个具体的例子:我想从字典中获取一

当且仅当值不是
None
时,是否有一种简洁的方法来映射该值?差不多

def fmapMaybe(f, v):
    if v is not None:
        f(v)
    else:
        None
更新:我正在寻找一种方法来处理值,如果它们与
None
不同,则保留
None
,否则,语义与我的
fmapMaybe
完全相同

在上面的代码中,
f
是一个任意单参数函数,
v
是一个值,如果它与
None
不同,则应传递给
f
。对什么是
v
f
没有进一步的限制

举一个具体的例子:我想从字典中获取一个字符串值,并将其转换为整数(如果找到的话)。因此结果应该是一个整数,或者
None
。使用上述函数,我将写:

fmapMaybe(int, os.environ.get('LINES'))
有没有更简短、更简洁的方法


正如Don Stewart所评论的,这类似于Haskell中的
Maybe
函子上的
fmap
,或者Scala中的
map
over
选项上的
fmap
。(如果我们认为<代码> f <代码>也可以返回<代码>没有< /COD>,它将类似于Haskell中的Madie<代码> > <代码> >和Scale < Scala < /Scale >,

< P>如果你不告诉我们V是什么,你想做什么,这是我能想出的最好的。如果v是可数的:

result = [f(x) for x in v if x != None]

如果v是一个单一值,那么你的If条件对我来说是正常的

与评论中已经说过的内容类似:

fmapMaybe = lambda f,list : map(f,(i for i in list if i!=None))
测试:

x = [1, 2, 3, None, 5, None, None, 8]
fmapMaybe( lambda x:x**2, x )
#[1, 4, 9, 25, 64]

你能详细说明一下吗。你的问题目前似乎很模糊,无法回答。关于什么是
f
、什么是
v
、什么是
mappaye
应该做什么,您没有提供足够的信息?对不起,到底是什么问题<代码>f(v)如果v不是None其他None
?或者您想先过滤掉
None
吗?您正在Python中的Maybe functor上实现
fmap
?lambda f,v:None如果v不是其他f(v)?也许这是一种误导。“也许你应该叫它fmapMaybe。”nymk好主意,更正。是的,这就是我想要实现的,我只是好奇python是否已经有了这样的函数,或者我是否必须自己定义它们。我更新了这个问题。我不想对
v
设置任何限制,因此我不认为
v
是可编辑的。只有当
x
是一个列表时,这才有效,我不想要(也不能有)这样的限制。如果您使用
numpy
您应该检查
np.nan