Перезагрузить функцию в Python? - PullRequest
1 голос
/ 04 февраля 2011

Эй, я новичок в python, но я пытаюсь создать простую систему регистрации.Я хотел бы иметь возможность обновления функции при добавлении члена, но я не могу понять, как.Как вы увидите из приведенного ниже кода, после того, как я закончу добавление члена в пункте меню 2, когда я вернусь и попробую пункт меню 1, только что добавленный элемент не отображается.Как заставить функцию show_members перезагружать обновленный словарь?

В дополнение к моему вышеупомянутому вопросу, любые советы о способах улучшения приведенного ниже кода приветствуются.И да, я знаю, что это очень неполно, но это WIP.

import sys
import shutil
import os

tmp = os.path.isfile("members.py.tmp")
if tmp == True:
    os.remove("members.py.tmp")
shutil.copyfile("members.py", "members.py.tmp")

from members import members

def show_menu():
    os.system("clear")
    print "\n","*" * 12, "MENU", "*" * 12
    print "1. List members"
    print "2. Add member"
    print "3. Delete member"
    print "99. Save"
    print "0. Abort"
    print "*" * 28, "\n"
    return input("Please make a selection: ")

def show_members(members):
    for keys in members.keys():
        os.system("clear")
        print "\nNames", "     ", "Code"
        print keys, " - ", members[keys]

def add_member(members):
    os.system("clear")
    name = raw_input("Please enter name: ")
    code = raw_input("Please enter code: ")
    members[name] = code
    return members


#with open("foo.txt", "a") as f:
#     f.write("new line\n")

running = 1

while running:
    selection = show_menu()
    if selection == 1:
        show_members(members)
        print "\n> " ,raw_input("Press enter to continue")
    elif selection == 2:
        add_member(members)
        print "\n> " ,raw_input("Press enter to continue")
    elif selection == 99:
        shutil.copyfile("members.py.tmp", "members.py")
    elif selection == 0:
        os.remove("members.py.tmp")
        sys.exit("Program Aborted")
    else:
        os.system("clear")
        print "That is not a valid option!"
        print "\n> " ,raw_input("Press enter to continue")

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

В этом коде:

if selection == 2:
    add_member(members)

вы возвращаете members, но ничего не делаете с возвращаемым значением.

Самое простое, что можно сделать, это изменить на:

if selection == 2:
    members = add_member(members)
0 голосов
/ 04 февраля 2011

Я бы не перезагружал файл Python каждый раз. Вместо этого просто сохраните свои элементы в словаре, а затем используйте библиотеку pickle, чтобы загрузить и сохранить словарь в начале и конце скрипта. Поскольку словарь изменчив, модификации словаря в одной функции должны отображаться в других; вам просто нужно будет позвонить pickle.load(file_path и pickle.dump(members, file_path) в начале и в конце.

Чтобы перезагрузить модуль Python, используйте функцию reload() (но учтите, что она перезагрузится только в случае изменения файла исходного кода!)

Еще одна вещь - вы можете переместить os.system('clear') в show_members за пределы цикла for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...