Уведомления

Группа в Telegram: @pythonsu

#1 Июль 25, 2009 12:01:23

dzam
От:
Зарегистрирован: 2009-07-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация кода.

Всем доброго времени суток.
Я в питоне новичок. Очень понравился язык. Возможностей для оптимизации кода почти безграничны, особенно если учесть что я первый раз что то пишу на этом языке. Просьба помочь с оптимизацией и понять какие вещи я использовал не так, какие можно было заменить/ускорить/упростить и т.д. Написал модуль, который позволяет читать и сохранять настройки.

модуль я назвал его settings.py

"""Данный модуль предназанчен для работы с настройками
записывает/считывает файл настроек (имя файла настроек передается при
создании объекта по умолчанию "main.cfg").

Формат хранения настроек:
Ключ = Значение
Ключ = Значение

Имеется возможность получать как отдельные значения ключей по имени,
так и полностью читать весь файл настроек."""

import os

def read_file(path):
"""Читает настройки из указанного файла и возвращает словарь"""
fs = open(path)
st = []
for key_value in fs.read().replace(' ', '').split():
st.append(key_value.split('='))

fs.close()
return( dict(st) )

class settings():
"""При создании объекта, считывает конфигурационный файл и позволяет
во время работы основной программы обращаться за значениями настроек"""

settings = {}
path = ""

def __init__( self, path = "main.cfg" ):
self.path = path

if os.path.exists(path):
self.settings = read_file(path)
else:
os.mknod(path)

def write_settings( self, path, dict_sett):
"""Пишет в файл переданный словарь настроек"""
fs = open(path, 'w')
st = ''
for k,v in dict_sett.items():
st = st + ("%s=%s\n"%(k,v))

fs.write(st)
fs.close()

if __name__ == "__main__":
s = settings()
s.write_settings( s.path, s.settings) #'эти строки для теста, перед записью можно изменить значение какого нибудь ключа
Пример файла настроек (main.cfg)

rt=55555
we=3
rtuy=123
wert=2
twe=232
ry=1
etuy=3
wer=2
qwerqwe=rtrt



Офлайн

#2 Июль 25, 2009 13:45:47

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация кода.

Я просто оставлю это сдесь…

from ConfigParser import ConfigParser

def dict_from_config_file(myini='config.ini', raw=False, vars=None):
"""Convert an INI file to a dictionary"""
config = ConfigParser()
config.read(myini)
result = {}
for section in config.sections():
if section not in result:
result[section] = {}
for option in config.options(section):
value = config.get(section, option, raw, vars)
result[section][option] = value
return result

def dict_to_config_file(myini='config.ini', raw=False, vars=None):
"""Convert an dictionary to a INI file"""
config = ConfigParser()
config.read(myini)
result = {}
for section in config.sections():
if section not in result:
result[section] = {}
for option in config.options(section):
value = config.get(section, option, raw, vars)
result[section][option] = value
return result



Офлайн

#3 Июль 25, 2009 16:20:17

dzam
От:
Зарегистрирован: 2009-07-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация кода.

Хотелось бы внести уточнения. Вопрос изначально ставился не “помогите написать скрипт получения и записи настроек в файл”, а помогите оптимизировать код и выявить недостатки если они есть. А вариантов работы с настройками я тоже знаю не один. Вот может кого заинтересует. Работа еще проще чем в предыдущем посте.

from PyQt4 import QtGui, QtCore
# объект для сохранения настроек приложения:
self.settings = QtCore.QSettings('script-coding.info', 'milfoil')

#восстановление языковой настройки:
self.lang = self.settings.value('lang', QtCore.QVariant(u'milfoil_en_EN.qm')).toString()
ну и так далее…

Жду отзывов. :)



Офлайн

#4 Июль 25, 2009 20:38:50

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

Оптимизация кода.

dzam
а помогите оптимизировать код и выявить недостатки если они есть
Самый важный недостаток - изобретение велосипеда. Приведеный мною код немного бредоватый но там есть очень важная строчка:
from ConfigParser import ConfigParser
Что символизирует использование стандартного модуля для стандартной задачи. Ну ещё стандартный модуль может работать с секциями, но это кому как нравится.



Офлайн

#5 Июль 25, 2009 22:14:44

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Оптимизация кода.

knkd
Самый важный недостаток - изобретение велосипеда.
+1
knkd
Ну ещё стандартный модуль может работать с секциями, но это кому как нравится.
Плюс комментарии в ini файле и прочее.
dzam
Просьба помочь с оптимизацией и понять какие вещи я использовал не так, какие можно было заменить/ускорить/упростить и т.д
Вообщем то knkd ответил на твой вопрос… Заменить, ускорить, упростить…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version