为什么我不能覆盖默认参数?

时间:2013-06-10 12:06:40

标签: python python-3.x

请考虑以下代码:

import pickle

def open_file(fname, fname1 = None):
    # returns a new OPEN file
    if fname1:
        while fname == fname1:
            f_name = input("File already open, filename: ")
    f = None
    while not f:
        try:
            f = open(fname, "rb")
        except IOError:
            fname = input("File not found, filename: ")
    print(fname, "open")
    return f

def get_2cubes():
    a_name = input("\nWhat is the name of the first cube's file? ")
    a_file = open_file(a_name)
    #a_cube = pickle.load(a_file)
    a_file.close()

    b_name = input("\nWhat is the name of the second cube's file? ")
    b_file = open_file(b_name, a_name)
    #b_cube = pickle.load(b_file)
    b_file.close()
    #return a_cube, b_cube

get_2cubes()

该代码仅在第二个文件不是第一个文件时打开第二个文件。

第一个文件的名称由open_file()中的fname1表示。如果第二个文件的名称(在这种情况下为b_name)与第一个文件的名称匹配,则会提示用户输入新名称。

我为None参数提供了fname1的默认参数,因为该函数有时仅用于打开一个文件而不用于将其与另一个文件进行比较。但是,我似乎无法覆盖默认参数。

a_nameget_2cubes的{​​{1}}条件无法识别if fname1:的第7行open_file变量,因此我可以两次打开同一个文件。我该如何纠正这个?

1 个答案:

答案 0 :(得分:4)

我认为您需要使用raw_input。否则,输入的文本将被视为变量名称,因此将等于None。 (除非您使用的是Python 3)