Python:我们应该如何编写一个函数来返回对象/列表和布尔标志
Python: How should we write a function to return an object/list and boolean flag
在 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
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 如何访问从 COM 对象返回的 VARIANT 数据类型中的安全数组C++?
- 从我的对象返回静态数组
- 将unique_ptr作为<Object>unique_ptr<常量对象返回>
- 从右值对象返回成员
- 视觉对象 返回 C++ 中的双精度值
- 为什么类型为 sf::Text 的对象返回不同的 getPosition().y 和 getLocalBounds().
- std::min_element 从类对象返回意外结果
- C++无效的对象返回语义
- const引用是否延长临时对象返回的临时对象的寿命
- 将 NULL 作为对象返回时未收到任何警告
- 如何在 C# 中从 com 对象返回数组(double[])
- 从重载运算符返回引用,并使用临时对象返回表达式
- Cin 对象返回值 c++
- 将变量作为类对象返回
- 使用可更改对象返回只读的最佳方法是什么
- 如何在Cython中从另一个包装对象返回包装的c++对象
- 当对象返回时,c++动态数组被清除
- 从带有动态字段的函数、对象返回
- 从堆栈上的匿名对象返回对*this的引用