Python 如何定义函数的可选关键字?

Python 如何定义函数的可选关键字?,python,function,Python,Function,我有一个问题,当我们编写函数时,如何定义可选的关键字。另外,如果满足另一个条件,我们如何确定所需的关键字,例如,关键字make\u plot将为True,那么用户需要为该函数提供plot\u dir关键字?对于第一个问题,请查看 至于你的第二个问题,那不是你怎么做的。将plot_dir设为一个可选参数,默认为None,并在函数开头检查plot_dir是否为None def plot(plot_dir=None): if plot_dir is not None: # an argume

我有一个问题,当我们编写函数时,如何定义可选的关键字。另外,如果满足另一个条件,我们如何确定所需的关键字,例如,关键字
make\u plot
将为
True
,那么用户需要为该函数提供
plot\u dir
关键字?

对于第一个问题,请查看

至于你的第二个问题,那不是你怎么做的。将
plot_dir
设为一个可选参数,默认为
None
,并在函数开头检查
plot_dir是否为None

def plot(plot_dir=None):
    if plot_dir is not None:  # an argument was provided
        do_some_plots(plot_dir)
    else:
        do_something_else()

关于你的第一个问题,请看一下

至于你的第二个问题,那不是你怎么做的。将
plot_dir
设为一个可选参数,默认为
None
,并在函数开头检查
plot_dir是否为None

def plot(plot_dir=None):
    if plot_dir is not None:  # an argument was provided
        do_some_plots(plot_dir)
    else:
        do_something_else()

关于你的第一个问题,请看一下

至于你的第二个问题,那不是你怎么做的。将
plot_dir
设为一个可选参数,默认为
None
,并在函数开头检查
plot_dir是否为None

def plot(plot_dir=None):
    if plot_dir is not None:  # an argument was provided
        do_some_plots(plot_dir)
    else:
        do_something_else()

关于你的第一个问题,请看一下

至于你的第二个问题,那不是你怎么做的。将
plot_dir
设为一个可选参数,默认为
None
,并在函数开头检查
plot_dir是否为None

def plot(plot_dir=None):
    if plot_dir is not None:  # an argument was provided
        do_some_plots(plot_dir)
    else:
        do_something_else()

如果您有复杂的逻辑来确定哪些关键字参数是必需的,哪些是可选的,那么最好使用

def my_function(**kwargs):
kwargs
是一个简单的常规名称;名称可以是任何名称,只要前缀是
**
,并且出现在所有其他参数之后)

现在函数将接受任何参数,您可以在函数中处理它们。下面是一个例子,它将

  • 拒绝除
    a
    b
    c
  • 使
    a
    成为必需的参数
  • 使
    b
    可选
  • 如果
    b
    True
    ,则
    c
    必须是1到10之间的整数;否则,
    c
    将被忽略
她就是这个功能

def my_function(**kwargs):
    try:
        a_value = kwargs.pop('a')
    except KeyError:            
        raise TypeError("Missing required keyword argument 'a'")

    b_value = kwargs.pop(b, False)
    if b_value is True:
        try:
            c_value = int(kwargs.pop('c'))
            if not (1 <= c_value <= 10):
                raise ValueError
        except KeyError:
            raise TypeError("Must use keyword argument 'c' if 'b' is True")
        except ValueError:
            raise ValueError("'c' must be an integer between 1 and 10!")

    try:
        # Are there anymore keyword arguments? We don't care which one we get
        x = next(iter(kwargs))
    except StopIteration:
        # Good, nothing besides a, b, or c
        pass
    else:
        raise TypeError("Unrecognized keyword argument '{0}'".format(x))

    # Now do what my_function is supposed to with a_value, b_value, c_value

如果您有复杂的逻辑来确定哪些关键字参数是必需的,哪些是可选的,那么最好使用

def my_function(**kwargs):
kwargs
是一个简单的常规名称;名称可以是任何名称,只要前缀是
**
,并且出现在所有其他参数之后)

现在函数将接受任何参数,您可以在函数中处理它们。下面是一个例子,它将

  • 拒绝除
    a
    b
    c
  • 使
    a
    成为必需的参数
  • 使
    b
    可选
  • 如果
    b
    True
    ,则
    c
    必须是1到10之间的整数;否则,
    c
    将被忽略
她就是这个功能

def my_function(**kwargs):
    try:
        a_value = kwargs.pop('a')
    except KeyError:            
        raise TypeError("Missing required keyword argument 'a'")

    b_value = kwargs.pop(b, False)
    if b_value is True:
        try:
            c_value = int(kwargs.pop('c'))
            if not (1 <= c_value <= 10):
                raise ValueError
        except KeyError:
            raise TypeError("Must use keyword argument 'c' if 'b' is True")
        except ValueError:
            raise ValueError("'c' must be an integer between 1 and 10!")

    try:
        # Are there anymore keyword arguments? We don't care which one we get
        x = next(iter(kwargs))
    except StopIteration:
        # Good, nothing besides a, b, or c
        pass
    else:
        raise TypeError("Unrecognized keyword argument '{0}'".format(x))

    # Now do what my_function is supposed to with a_value, b_value, c_value

如果您有复杂的逻辑来确定哪些关键字参数是必需的,哪些是可选的,那么最好使用

def my_function(**kwargs):
kwargs
是一个简单的常规名称;名称可以是任何名称,只要前缀是
**
,并且出现在所有其他参数之后)

现在函数将接受任何参数,您可以在函数中处理它们。下面是一个例子,它将

  • 拒绝除
    a
    b
    c
  • 使
    a
    成为必需的参数
  • 使
    b
    可选
  • 如果
    b
    True
    ,则
    c
    必须是1到10之间的整数;否则,
    c
    将被忽略
她就是这个功能

def my_function(**kwargs):
    try:
        a_value = kwargs.pop('a')
    except KeyError:            
        raise TypeError("Missing required keyword argument 'a'")

    b_value = kwargs.pop(b, False)
    if b_value is True:
        try:
            c_value = int(kwargs.pop('c'))
            if not (1 <= c_value <= 10):
                raise ValueError
        except KeyError:
            raise TypeError("Must use keyword argument 'c' if 'b' is True")
        except ValueError:
            raise ValueError("'c' must be an integer between 1 and 10!")

    try:
        # Are there anymore keyword arguments? We don't care which one we get
        x = next(iter(kwargs))
    except StopIteration:
        # Good, nothing besides a, b, or c
        pass
    else:
        raise TypeError("Unrecognized keyword argument '{0}'".format(x))

    # Now do what my_function is supposed to with a_value, b_value, c_value

如果您有复杂的逻辑来确定哪些关键字参数是必需的,哪些是可选的,那么最好使用

def my_function(**kwargs):
kwargs
是一个简单的常规名称;名称可以是任何名称,只要前缀是
**
,并且出现在所有其他参数之后)

现在函数将接受任何参数,您可以在函数中处理它们。下面是一个例子,它将

  • 拒绝除
    a
    b
    c
  • 使
    a
    成为必需的参数
  • 使
    b
    可选
  • 如果
    b
    True
    ,则
    c
    必须是1到10之间的整数;否则,
    c
    将被忽略
她就是这个功能

def my_function(**kwargs):
    try:
        a_value = kwargs.pop('a')
    except KeyError:            
        raise TypeError("Missing required keyword argument 'a'")

    b_value = kwargs.pop(b, False)
    if b_value is True:
        try:
            c_value = int(kwargs.pop('c'))
            if not (1 <= c_value <= 10):
                raise ValueError
        except KeyError:
            raise TypeError("Must use keyword argument 'c' if 'b' is True")
        except ValueError:
            raise ValueError("'c' must be an integer between 1 and 10!")

    try:
        # Are there anymore keyword arguments? We don't care which one we get
        x = next(iter(kwargs))
    except StopIteration:
        # Good, nothing besides a, b, or c
        pass
    else:
        raise TypeError("Unrecognized keyword argument '{0}'".format(x))

    # Now do what my_function is supposed to with a_value, b_value, c_value

如果
make_plot
plot_dir
都是可选的,但是
plot_dir
将与
make_plot
的决策相关,那么您的示例应该是什么样子?如果
make_plot
plot_dir
都是可选的,但是
plot_dir
将与关于
make\u plot
的决定?如果
make\u plot
plot\u dir
都是可选的,那么您的示例应该是什么样子?但是
plot\u dir
将与关于
make\u plot
的决定相关。如果
make\u plot
plot\u dir
都是可选的,那么您的示例应该是什么样子
plot\u dir
将与关于
make\u plot
的决策相关?