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

标签 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()

代码旨在打开第二个文件,前提是它不是第一个文件。

第一个文件的名称由 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/

相关文章:

python - 用 C++ 加速 Python

Python 没有从 subprocess.check_call 获取原始二进制文件

python - 加速python pygame中的AI障碍检测

python - 如何阻止 Google Cloud SQL 中的 SQL 注入(inject)?

python - OperatorNotAllowedInGraphError : using a `tf.Tensor` as a Python `bool` is not allowed: (error in tf Cycle GAN)

python - 从字典内部调用 IntEnum 类

python - 为什么Python中的id函数对不同的整型对象返回相同的值?

python-3.x - Peewee ManyToMany 关系的中间表上的额外字段

python - 在 Python 中下载带有 "urllib.request.urlretrieve"的图像失败

Python - 运行进程并等待输出