про конвертер данных

в свое время, знакомство с 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()

One Comment

  1. magik:

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