Python:我们应该如何编写一个函数来返回对象/列表和布尔标志

Python: How should we write a function to return an object/list and boolean flag

本文关键字:对象 返回 函数 列表 标志 布尔 一个 我们 何编写 Python      更新时间:2023-10-16

在 C/C++ 中,通常编写一个返回成功或失败标志的函数,并指示按引用传递对象/列表已准备好使用。例如

bool get_list(List& l)
{
...
if (ready)
{
l = m_list
}
return ok
}

在python中,我知道我们可以在一个函数中返回多个东西,但这看起来并不整洁。返回对象/列表和布尔标志的等效方法是什么?

编辑

感谢您的评论。我知道我们应该在现代C++代码中使用异常,但你可以看到很多类似的 C/C++ 代码。正如我的问题中提到的,我知道我们可以在 python 中返回元组(即不止一件事 - 很抱歉没有使用 python 上下文)。我想我没有使用导致这里混乱的正确示例。例如,它可以是如果你想在准备好时返回一个具有列表类型的成员变量(某些条件匹配)。与其返回列表并在外部进行检查,不如使用标志来指示列表是否可供使用,这样更有效。

但根据以下答案的建议,返回元组是实现它的方法。

在 python 中,你可以返回一个值元组

def get_object(object):
# start of some code
code
# end of some code
if ok:
object = something
return ok, object

然后有:

flag, result = get_object(myobj)

从 OP 编辑后,也有可能让get_object成为一种突变器函数,遵循以下逻辑示例:

class classy(object):
# this is your object
def __init__(self):
self.att = 1
self.btt = 2
def mutate_obj(classy_obj):
# this is your get_object for example
# code
ok = True  # or False whetever
if ok:
classy_obj.att = 10  # or a new classy, or any other object manipulation, on classy_obj
return ok

然后: 在iPython中:

In [4]: myclassy = classy()
In [5]: myclassy
Out[5]: <__main__.classy at 0x3c03250>
In [6]: myclassy.att
Out[6]: 1
In [7]: myclassy.btt
Out[7]: 2
In [8]: flag = mutator_func(myclassy)
In [9]: myclassy
Out[9]: <__main__.classy at 0x3c03250>
In [10]: myclassy.att
Out[10]: 10

既然你在问题中也标记了python,我将继续用python帮助你。引入元组解包来拯救你(请谷歌出来)。

def do_something(*args, **kwargs):
some_data_structure = []        # optionally choose whatever DS you want here
some_flag = False
# write your logic to change or set the flag
if some_flag:
# write some logic here to manipulate your DS now
some_data_structure.append(1) # just an example
return (some_flag, some_data_structure)

returned_flag, data_structure = do_something() # make sure you study about tuple unpacking to understand it.

但是,如果您认为需要坚持返回一个参数,那么您可以检查some_data_structure中的元素,如果该元素为空,则表示some_flag为False。

玩一玩,如果您需要更多帮助,请告诉我!

本质上,您要做的是返回一个可选值。通常你根本不需要元组,因为额外的指标标志是多余的。返回None是指示无值的常用方法。例如,Python 内置字典的get()方法返回值(如果存在),否则返回None(或显式指定的替代值,但None是默认值)。

这种模式非常普遍,以至于在Python的新类型注释中明确支持它作为Optional[SomeType],这意味着SomeType或None

出于这个原因,除非你需要None做其他事情,否则解决问题的最惯用方法是:

def get_list():
if ready:
return the_list
return None