Структура кодирования в Python - PullRequest
0 голосов
/ 17 октября 2018

этот вопрос относится в основном к таким людям, как я, которые плохо знакомы с программированием в целом.Недавно я начал изучать Python из учебника и различных онлайн-источников, и, по сути, это мой первый язык программирования и первое знакомство с кодированием, мне трудно понять, как включить общую структуру в мои сценарии.

В настоящее время я пишу код, который будет анализировать различные разделы файла данных в отдельные списки (читатель, насколько я понимаю), а затем код, который позволит мне вносить изменения в указанные списки, определенные пользователем,и, наконец, код для записи новых списков в файл.В конечном итоге цель состоит в том, чтобы иметь код, который позволил бы мне добавлять / удалять определенные значения данных и создавать новые файлы данных с определенными изменениями.

До сих пор написание самого кода не было особенно трудным для чтения.и написать файл, но я понятия не имею, как различные функции должны быть написаны так, чтобы они были «аккуратными и организованными».Поскольку я изучаю язык вместе с тем, как на самом деле выполняю этот маленький проект, я не знаком со многими из того, что я называю стандартной структуризацией кода.

Вообще говоря, для проекта, подобного этому, я должен написать еговсе в одном скрипте, составленном из отдельных классов / функций?Что лучше написать отдельные модули, которые импортируют возвращаемые значения из одного в другой?Это типично, что один модуль будет иметь более одного класса?С точки зрения птичьего полета подход к структурированию кода, что было бы лучшим способом сделать это?В настоящее время в моем коде нет фактической структуры, и все буквально написано вне каких-либо классов и функций main (), и он просто запускается с учетом конкретного входного файла, но я вполне уверен, что это, вероятно, неправильный способ написания кода.Извиняюсь за вопрос начинающего типа, но я как бы учусь, пока пишу этот код, и мне еще не приходилось сталкиваться с любыми разделами моего текста по структурированию самих сценариев.

1 Ответ

0 голосов
/ 18 октября 2018

Я не уверен, лучше ли спрашивать ТАК.Однако, одна вещь, которая мне помогла, - это создание различных функций для управляемых кусков логики.Вы упомянули, что весь ваш код написан без какой-либо структуры.

Самое замечательное, что вы уже упомянули логическое разделение.Старайтесь иметь функции, которые имеют одну работу на основе этой логики.Например:

- "разбить различные разделы файла данных на отдельные списки"

def parse_data_file(full_file_path):
    raw_data = read_file(full_file_path) # delegate this out to another function if you're feeling like you need more separation
    data_lists = generate_sub_lists(raw_data) # delegate
    return data_lists

- "позволит мне внести изменения в указанные списки, определенные пользователем"

def edit_lists(user_commands_kv_args, data_lists):
    for type_of_command, command in user_commands_kv_args:
        if type_of_command == 'Delete':
            run_command_on_lists(command='Delete', data_lists)

- «код для записи новых списков в файл»

def write_lists_to_file(data_lists, output_file_full_path):
    with open(output_file_full_path, 'w+') as f:
        for ls in data_lists:
            f.writelines(ls)

По крайней мере, теперь у вас есть некоторое разделение, основанное на функциональности.Позже вы даже можете создавать отдельные классы в зависимости от типа действия.Например:

class DataParser():
    def __init__(full_file_path):
        self.file_path = full_file_path

    def read_from_sql():
        pass

    def read_from_mongo():
        pass

    def read_from_txt():
        pass

Преимущество заключается в том, что в случае изменения формата файла или источника вам нужно только настроить интерфейс класса для синтаксического анализа этих данных, а не всего кода основной точки входа.Надеюсь, это поможет.

...