考虑以下代码:
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()
代码旨在打开第二个文件,前提是它不是第一个文件。
第一个文件的名称由 fname1
表示在 open_file() 中。如果第二个文件的名称(在本例中为 b_name
)与第一个文件的名称匹配,系统将提示用户输入新名称。
我提供了默认参数 None
对于 fname1
参数,因为该函数有时仅用于打开一个文件,而不用于将它与另一个文件进行比较。但是,我似乎无法覆盖默认参数。
a_name
来自 get_2cubes
的第 7 行的变量未被 if fname1:
识别条件 open_file
,结果我可以打开同一个文件两次。我该如何纠正这个问题?
最佳答案
我认为您需要使用 raw_input
。否则,输入的文本将被视为变量名称,因此将等于 None
。 (除非你使用的是 Python 3)
关于python - 为什么我不能覆盖默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17023484/