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
必须是1到10之间的整数;否则,c
将被忽略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
必须是1到10之间的整数;否则,c
将被忽略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
必须是1到10之间的整数;否则,c
将被忽略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
必须是1到10之间的整数;否则,c
将被忽略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
的决策相关?