про конвертер данных
в свое время, знакомство с haskell отставило неизгладимый след в моем подходе к написанию программ :). Вот здесь обсуждают небольшой конвертер, который я переписал бы так
#!/usr/bin/env python
import sys, math
try:
input_file = sys.argv[1]; output_file = sys.argv[2]
except:
print "Usage:",sys.argv[0], "infile outfile"
sys.exit(1)
ifile = open(input_file, 'r')
data = ifile.readlines()
ifile.close()
def convert_f_to_c(y):
zz=(y-32)/1.8
return zz
data = map(lambda (a,b):
"%g %4.2f\n" % (float(a), convert_f_to_c(float(b))),
map(lambda x: x.split(), data))
ofile = open(output_file, 'w')
ofile.writelines(data)
ofile.close()
Впрочем, этот код можно ещё упростить. Во-первых, совсем необязательно конвертировать первый столбец “строка” → “вещ. число” → “строка”, во-вторых, отдельную функцию convert_f_to_c перевода из Фарангейтов в Цельсии заменим на лямбду и получится
#!/usr/bin/env python
import sys, math
try:
input_file = sys.argv[1]; output_file = sys.argv[2]
except:
print "Usage:",sys.argv[0], "infile outfile"
sys.exit(1)
ifile = open(input_file, 'r')
data = ifile.readlines()
ifile.close()
data = map(lambda (a,b):
"%s %4.2f\n" % (a, (lambda f: (f-32)/1.8)(float(b))),
map(lambda x: x.split(), data))
ofile = open(output_file, 'w')
ofile.writelines(data)
ofile.close()


magik:
Спасибо, я лямбдой пока не пользуюсь, поэтому тем более было интересно посмотреть как реализовать скрипт с её помощью.
25.03.2008, 02:07Надеюсь что вам понравится вторая часть поста )