使用Python,我发现很难让filter()与lambda一起工作,因为需要传递多于1个参数的情况,如下面的代码片段所示:
max_validation = lambda x,y,z: x < y < z
sequence1 = [1,4,8]
filter(max_validation, sequence1)
Run Code Online (Sandbox Code Playgroud)
它引发了以下错误:
TypeError: <lambda>() takes exactly 3 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)
请在这里建议我做错了什么.
当我们调用python提示时,幕后会发生什么?
我更感兴趣的是了解如何在解释器中加载print,import等方法/函数?
编辑:我的问题的一些澄清:
当我们在我们的unix提示符/ Windows控制台上输入python并点击输入时,有什么是加载的库.我特别感兴趣的是如何为用户提供打印和导入等关键字.
我在 Windows 和 Python 2.6 上使用子进程,如下所示。我正在尝试使用旧解析器应用程序(假设 parser.py)解析文本文件,如下所示:
import subprocess
k = subprocess.Popen(['python', 'parser.py', '-f C:\Report1\2011-03-14.txt'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print k.communicate()
Run Code Online (Sandbox Code Playgroud)
这里的问题在于文件名传递到旧应用程序的方式,我无法更改代码,只能使用 Python 访问它。
它生成并出现以下错误:
IOError: [Errno 22] invalid mode (\'r\') or filename: C:\\Report1\\2011-03-14.txt
Run Code Online (Sandbox Code Playgroud)
当我从回溯中复制修改后的文件名(带有双正斜杠)来检查是否存在时,系统无法找到它。
问题:如何将路径作为参数传递,以便在不更改为双斜杠的情况下对其进行处理,以便系统可以读取文件?
注意:os.sep 也不能解决该问题。
编辑:使用 os.system 执行效果很好,但问题是获取输出以供以后使用。目前我在一个模块(run_parser.py)中使用 os.sytem,然后在另一个模块(get_parse_status.py)中使用子进程,该子进程打开 run_parser.py 来获取输出。会欣赏任何比这更好的东西。
谢谢你的时间。
我需要添加两个简单的多项式(表示为字符串).以下示例将阐明我的要求.
input1 = '5a+6b'
input2 = '2a+3b+9c'
Run Code Online (Sandbox Code Playgroud)
所需金额应如下:
'7a+9b+9c'
Run Code Online (Sandbox Code Playgroud)
目前我已经创建了一个函数(20行)来为我执行此任务,但我认为这可以改进.
编辑:添加我的代码
def add_domain_strings():
input_list = ['5a+6b', '2a+3b+9c']
vars_dict = {}
for input in input_list:
temp_list = input.split('+')
for i in temp_list:
split_index = None
for j in i:
if not j.isdigit():
split_index = i.index(j)
break
if i[split_index:] in vars_dict:
vars_dict[i[split_index:]] += int(i[:split_index])
else:
vars_dict[i[split_index:]] = int(i[:split_index])
sum_string = ''
for k,v in vars_dict.iteritems():
if sum_string:
sum_string += '+%s%s' % (v,k)
else:
sum_string += '%s%s' % (v,k)
return sum_string
Run Code Online (Sandbox Code Playgroud)