Python:我们应该如何编写函数来返回对象/列表和布尔标志
在C/C++中,通常编写一个函数,返回成功或失败标志,并指示通过引用传递的对象/列表已准备好使用。比如说,Python:我们应该如何编写函数来返回对象/列表和布尔标志,python,c++,Python,C++,在C/C++中,通常编写一个函数,返回成功或失败标志,并指示通过引用传递的对象/列表已准备好使用。比如说, bool get_list(List& l) { ... if (ready) { l = m_list } return ok } 在python中,我知道我们可以在一个函数中返回多个内容,但这看起来并不整洁。返回对象/列表和布尔标志的等效方法是什么 编辑 谢谢你的评论。我知道我们应该在现代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_对象成为一种Mutator函数,如下逻辑示例所示:
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)
返回了\u标志,data\u structure=do\u something确保您研究了元组解包以理解它
但是,如果您认为需要坚持返回一个参数,那么可以检查some_data_结构中的元素,如果该结构为空,则表示some_标志为False
如果你需要更多的帮助,请到处玩,让我知道 基本上,您要做的是返回一个可选值。通常您根本不需要元组,因为额外的指示符标志是多余的。返回None是表示无值的常用方法。例如,Python内置字典的get方法返回存在的值,否则返回None或显式指定的替代值,但默认为None 这种模式非常常见,Python的新类型注释明确支持它作为可选的[SomeType],这意味着SomeType或None 因此,除非你不需要其他东西,否则解决问题的最惯用方法是:
def get_list():
if ready:
return the_list
return None
在现代C++代码中,实际上不应该这样做。在C++中,如果可能的话,我们倾向于用const引用返回对象,如果事情变得像梨形的,则抛出异常。Python有非常好的例外。我想说的是,大多数情况下,我们的想法是只返回一个值,如果出现问题,则中断抛出异常。我没有写答案,@Netwave,OP说它看起来不整洁。事实上,事实并非如此。在现代C++ +C++ 17中,你有结构化的绑定,它的工作原理类似于返回一组值:Auto[i],[j]=函数,返回结构2,或两个值;变异函数是我想要的答案。非常感谢!