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

модуль я назвал его 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
knkd
Я просто оставлю это сдесь…
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
dzam
Хотелось бы внести уточнения. Вопрос изначально ставился не “помогите написать скрипт получения и записи настроек в файл”, а помогите оптимизировать код и выявить недостатки если они есть. А вариантов работы с настройками я тоже знаю не один. Вот может кого заинтересует. Работа еще проще чем в предыдущем посте.
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()
ну и так далее…

Жду отзывов. :)
knkd
dzam
а помогите оптимизировать код и выявить недостатки если они есть
Самый важный недостаток - изобретение велосипеда. Приведеный мною код немного бредоватый но там есть очень важная строчка:
from ConfigParser import ConfigParser
Что символизирует использование стандартного модуля для стандартной задачи. Ну ещё стандартный модуль может работать с секциями, но это кому как нравится.
igor.kaist
knkd
Самый важный недостаток - изобретение велосипеда.
+1
knkd
Ну ещё стандартный модуль может работать с секциями, но это кому как нравится.
Плюс комментарии в ini файле и прочее.
dzam
Просьба помочь с оптимизацией и понять какие вещи я использовал не так, какие можно было заменить/ускорить/упростить и т.д
Вообщем то knkd ответил на твой вопрос… Заменить, ускорить, упростить…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB