Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Python
Перезагрузить страницу Передача метода переменной в качестве параметра функции
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
ibn_maksimys ibn_maksimys вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.03.2011
По умолчанию Передача метода переменной в качестве параметра функции - 27.03.2011, 16:04

Всем Добрый день!
Написал первую программу на Python (преобразование содержимого файла к верхнему или нижнему регистру). Сейчас пытаюсь немного оптимизировать код. Сейчас есть следующий код:

python Код:
file = "C:/Python32/file.txt"
f = open(file, "r")
reg = input("Do you want upper register (U or u) or lower register (L or l)?: ")
print (reg)
if ((reg == "u") or (reg =="U")):
    #print ("High register")
    while 1:
        l = f.readline();
        if (l == ""):
            break
        else:
            print(l.upper()),
elif ((reg == "l") or (reg =="L")):
    #print ("Law register")
    while 1:
        l = f.readline();
        if (l == ""):
            break
        else:
            print(l.lower()),
else:
    print ("UnreaL")
Хочется преобразовать код к следующему виду (т.е. вынести дважды повторяющийся код в одну функцию):

python Код:
file = "C:/Python32/file.txt"
f = open(file, "r")
reg = input("Do you want upper register (U or u) or lower register (L or l)?: ")
def f(s):
    while 1:
        l = f.readline();
        if (l == ""):
            break
        else:
            print(l.s),
    return
if ((reg == "u") or (reg =="U")):
    #print ("High register")
    f(upper())
elif ((reg == "l") or (reg =="L")):
    #print ("Law register")
    f(lower())
else:
    print ("UnreaL")
Только не знаю как быть с методами lower() и upper(), как их передать в качестве параметра? Или может быть посоветуете иной способ сделать код красивее
Ответить с цитированием
  (#2 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию 27.03.2011, 17:09

Так прям и передавай в функцию метод.
python Код:
file = "C:/Python32/file.txt"
fi = open(file, "r")
reg = input("Do you want upper register (U or u) or lower register (L or l)?: ")
def f(fi,s):
    while 1:
        l = fi.readline();
        if (l == ""):
            break
        else:
            print(s(l)),
    return
if ((reg == "u") or (reg =="U")):
    #print ("High register")
    f(fi, str.upper)
elif ((reg == "l") or (reg =="L")):
    #print ("Law register")
    f(fi, str.lower)
else:
    print ("UnreaL")
Ответить с цитированием
  (#3 (permalink)) Старый
Кошмар Кошмар вне форума
Member
 
Сообщений: 2,694
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 23.04.2005
По умолчанию 27.03.2011, 17:17

Можно ещё короче. Цикл в данном случае лишний - можно работать и со всем файлом, если позволяют условия.
Кроме того, неплохо бы закрыть файл и убрать запятую после printв твоём варианте, а то из текста переносы строк удалятся.
python Код:
def f(fi, s):
    l = fi.read();
    print(s(l))
    return

file = "C:/Python32/file.txt"
f = open(file, "r")
reg = input("Do you want upper register (U or u) or lower register (L or l)?: ")
if ((reg == "u") or (reg =="U")):
    #print ("High register")
    f(fi, str.upper)
elif ((reg == "l") or (reg =="L")):
    #print ("Law register")
    f(fi, str.lower)
else:
    print ("UnreaL")
f.close()
Код не запускал, работоспособность не проверял.
Ответить с цитированием
  (#4 (permalink)) Старый
ibn_maksimys ibn_maksimys вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.03.2011
По умолчанию 27.03.2011, 21:40

Большое спасибо! Первый вариант то, что нужно!

P.S. второй использовать не хочу. Если файл будет большой или совсем пустой, то могут возникнуть проблемы) Хотя он должен быть очень большой) Но всё же, стремимся к универсальности
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача одномерного массива как параметра функции Neon_325 Любые вопросы от новичков 3 01.04.2012 18:41
Напишите функцию получающую в качестве входного параметра матрицу размера MxN рита Visual Basic 15 14.01.2011 20:43
Написать функцию my-nth, которая получает в качестве параметра список l angelochek Lisp 1 26.04.2010 21:24
Передача метода класса в качестве параметра в другой метод Dmytry87 C++ Builder 3 13.11.2008 19:58
Можно ли передавать метод класса в качестве параметра Fuud Delphi 5 06.11.2006 11:44
Нужно передать в качестве фактического параметра переменную типа TShiftState Lin@ C++ Builder 1 09.08.2006 17:44
Передача множества значений в качестве параметра запросу Д_м_и_трий PostgreSQL 2 13.04.2006 15:27
Передача функции как параметра и вызов ее Graf_L C++ Builder 2 01.04.2006 18:14
Можно ли как нибудь передать через JNI в качестве параметра функции класс Jonano Java 2 14.01.2006 19:21
Указатель на встроенный массив в качестве параметра функции crash Вопросы начинающих программистов 5 18.11.2005 17:02
Передача контейнера в качестве параметра woland Visual C++ 1 14.06.2004 16:14
Как передать в качестве параметра функции двумерный массив Skywalker-cyb С/С++ 4 10.06.2003 02:08



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов