【Tips】Python 针对函数返回值实现列表推导

背景

设想这样一个场景,我们定义函数foo来生成一个大于0的随机code。但是函数执行可能会出现异常,对于异常情况我们指定函数返回-1。

在批量处理的情况下,我们想要得到所有成功执行的foo函数的返回值集合,而忽略返回-1的情况。基本的逻辑如下:

result = []

for item in item_lst:
    code = foo(item)
    if code != -1:
        result.append(code)

使用列表推导的解决方案

如果想用列表推导的方式实现,有下面几种解决方案:

Solution 1:

result = [foo(item) for item in item_lst]
result = [code for code in result if code != -1]

先用列表推导获取到了函数的返回值,然后再执行一次筛选,需要执行两次列表推导。

Solution 2:

result = [foo(item) for item in item_lst if foo(item) != -1]

执行一次列表推导,但是很明显,foo函数执行了两次。如果foo函数比较耗时,或者多次执行会产生副作用的话都会有问题。

Solution 3:

result = [code for code in (foo(item) for item in item_lst) if code != -1]

使用 生成器表达式 来处理中间结果,不需要临时列表,并且是基于迭代器的,优于上面两种方法。

参考

  1. How to execute a filter by function return value in list comprehension?

原文地址:https://www.cnblogs.com/sting-roc/p/8145197.html

时间: 2024-10-29 05:15:47

【Tips】Python 针对函数返回值实现列表推导的相关文章

GetLastError()函数返回值对照列表

------------------------------------------------------------------------------------------------------ GetLastError()返回值列表: [0]-操作成功完成. [1]-功能错误. [2]-系统找不到指定的文件. [3]-系统找不到指定的路径. [4]-系统无法打开文件. [5]-拒绝访问. [6]-句柄无效. [7]-存储控制块被损坏. [8]-存储空间不足,无法处理此命令. [9]-

第八讲 python自定义函数返回值

注意自定义函数:统一文件内函数名称不能相同. 单返回值 语法结构: def function_name([para1,para2...]) code... code... ... return value--------------可以返回一个值 eg: def test_c(n1,n2):-------------函数定义    n=n1+n2    return n sum1=test_c(100,102)----------函数调用----最好不要用sum,因为sum为关键字print '

python学习之函数返回值

python中函数返回值的方式有2种: 1.return语句 说明:return语句执行完后,函数后续的代码将不会被执行 2.yield语句 说明:yield语句返回的是一个迭代器对象,可以通过next(a)(a为函数的实例对象)来调用. yield后面的代码照样不会被执行. >>> def a(): ... for i in range(1,3): ... yield i ... print('over') ... >>> a() <generator obje

Python函数中的变量和函数返回值

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x   //声明 x +=1 print x fun() print x 外部变量被改: x = 100 de

Python函数中的变量和函数返回值的使用实例

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x //声明 x +=1 print x fun() print x 外部变量被改: x = 100 def

将引用作为函数返回值的优缺点

格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }好处:在内存中不产生被返回值的副本:(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的.因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!注意事项:(1)不能返回局部变量的引用.这条可以参照Effective C++[1]的Item 31.主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态.(2)不能返回函数内部new

C语言中函数返回值的问题

c语言中有关于在函数返回值的问题,在函数中的局部变量主要是在栈上开辟的,出了函数变量就被回收了,针对函数返回值得问题,给出下面几个比较具体的例子来说明: 函数返回值是在函数中定义的局部变量 这类型的返回值在主函数中是可以使用的,因为返回局部变量值得时候,返回的是值得一个副本,而在主函数中我们需要的也只是这个值而已,因此是可以的,例如 int fun(char *arr) { int num = 0; while (*arr != '\\0') { num = num * 10 + *arr -

chapter4.2、函数返回值

函数返回值,作用域 Python函数使用return语句返回"返回值" 函数一定有返回值.没有return 语句,隐式调用return None 一个函数可以存在多个return语句,但只执行一条,如果一条return都没有执行,就隐式调用return None 如果有必要,可以调用return None,可以简写为return return直接返回函数,return之后的语句不再执行其他语句不再执行 return 是函数结束标志,返回值只有一个,只返回一次, return的内容要包装

以函数返回值做参数时,函数调用的顺序

环境:vs2013 在下面的代码中 1 //类似于下面的代码 2 3 foo(char*,char*,char*); 4 5 char* str ="A#B#C"; 6 7 foo(strtok(str,"#"),strtok(NULL,"#"),strtok(NULL,"#")); 预计让函数foo得到("A","B","C")的参数,程序编译的时候没问题,但是运行