2011-02-04 2 views
1

안녕하세요, 저는 Python에 새로 왔지만 간단한 등록 시스템을 만들려고 노력하고 있습니다. 멤버를 추가 할 때 함수 업데이트를 할 수 있기를 원하지만 어떻게 설명 할 수 없습니까? 아래 코드에서 볼 수 있듯이 메뉴 옵션 2에 멤버를 추가하고 나면 다시 돌아가서 메뉴 옵션 1을 시도하면 방금 추가 한 멤버가 표시되지 않습니다. show_members 함수가 업데이트 된 사전을 다시로드하게하려면 어떻게해야합니까?Python에서 함수를 다시로드 하시겠습니까?

위의 질문에 추가하여 아래 코드를 개선 할 수있는 방법에 대한 조언을 환영합니다. 그리고 예, 저는 그것이 매우 불완전하다는 것을 알고 있습니다 만, 그것은 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") 

답변

1

:

if selection == 2: 
    add_member(members) 

당신이 members을 반환하지만 반환 값에 아무것도되지 않습니다. 나는 당신이 제안하는 것을 ... 그것은 다음과 같이 일하는 것이 이해 생각

if selection == 2: 
    members = add_member(members) 
+0

아하! 이것은 매우 완벽하게 감사합니다. 당신은 또한 파일에 사전 (회원)을 저장하는 방법을 언급하는 마음을 wouldnt하면? – wKavey

0

매번 Python 파일을 다시로드하지 않겠습니다. 대신 회원을 사전에 저장 한 다음 pickle 라이브러리를 사용하여 스크립트 시작 및 끝 부분에서 사전을로드하고 저장하십시오. 사전은 변경 가능하기 때문에 하나의 함수에서 사전에 대한 수정 사항이 다른 함수에 표시되어야합니다. 처음에 끝까지 pickle.load(file_pathpickle.dump(members, file_path)으로 전화하면됩니다.

reload() 기능을 사용하여 파이썬 모듈을 다시로드 (그러나 소스 코드 파일이 변경된 경우에만 다시로드 않습니다!)하려면

한가지 - 당신은 외부 os.system('clear')show_members를 이동 할 수 있습니다 for 루프의 이 코드에서

+0

감사 :

가장 쉬운 것은 할 수는로 변경입니까? "members = pickle.load (members.py.tmp)" – wKavey

+0

예! 다른 파일 이름을 선택하기 만하면됩니다. –