我在Python3中有一个filter
,我正在使用lambda函数。这是我的功能:
affy_reader = csv.DictReader(filter(lambda row:
not row[0].startswith('#') and
str(row[0]).isdigit(),
file_pointer),
delimiter='\t',
fieldnames=affy_column_headers)
有没有办法可以在这个lambda函数中打印row
的值?我想我需要这样做,因为row
仅限于lambda中。例如,这是一个LISP Lambda程序,我相信我可以这样做:
affy_reader = csv.DictReader(filter(lambda row: print(row)
not row[0].startswith('#') and
str(row[0]).isdigit(),
file_pointer),
delimiter='\t',
fieldnames=affy_column_headers)
因为print()
被读取并在线执行。 Python中有没有办法做到这一点?或者如果没有,我看到这个价值的好方法是什么?谢谢!
*我意识到我的“LISP”示例是Python而不是LISP。我只是想进一步说明我想做的事情。
答案 0 :(得分:3)
我认为你不能用lambda
做到这一点。只需定义一个辅助函数。这样,您还可以显示是否要过滤某一行:
def filter_plus_print(row):
result = not row[0].startswith('#') and str(row[0]).isdigit()
print("Keeping:" if result else "Removing:", row)
return result
然后再做
affy_reader = csv.DictReader(filter(filter_plus_print, file_pointer),
delimiter='\t',
fieldnames=affy_column_headers)
答案 1 :(得分:2)
一般Python 3.x技巧在lambda中打印调试信息而不改变其语义:
原件:
lambda: 4
仪器化:
lambda: (print (3), 4) [1]
答案 2 :(得分:0)
您可以直接打印file_pointer
来查看print(file_pointer)
affy_reader = csv.DictReader(filter(lambda row:
not row[0].startswith('#') and
str(row[0]).isdigit(),
file_pointer),
delimiter='\t',
fieldnames=affy_column_headers)
内的值。
{{1}}
答案 3 :(得分:0)
在匿名函数中执行多个语句没有pythonic方法。我建议将lambda分解为命名函数,如下所示:
def relevant(row):
print(row)
return not row[0].startswith('#') and str(row[0]).isdigit()
affy_reader = csv.DictReader(filter(relevant, file_pointer),
delimiter='\t',
fieldnames=affy_column_headers)
答案 4 :(得分:0)
问题是print(row)
返回None
,你必须对它做点什么。在大多数情况下相当不愉快。