Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 控制函数中返回变量的数量_Python_Python 3.x_Return_Idl Programming Language_Multiple Variable Return - Fatal编程技术网

Python 控制函数中返回变量的数量

Python 控制函数中返回变量的数量,python,python-3.x,return,idl-programming-language,multiple-variable-return,Python,Python 3.x,Return,Idl Programming Language,Multiple Variable Return,是否有一种方法可以定义一个函数,该函数根据用户期望的输出数量知道要返回多少个变量 让我举例说明这个想法。承担以下功能: def function(): a = 1 b = 2 c = 3 return a, b, c 然后,我希望我的函数表现为: >>> x = function() >>> x 1 >>> x, y = function() >>> x 1 >>> y

是否有一种方法可以定义一个函数,该函数根据用户期望的输出数量知道要返回多少个变量

让我举例说明这个想法。承担以下功能:

def function():
    a = 1
    b = 2
    c = 3
    return a, b, c
然后,我希望我的函数表现为:

>>> x = function()
>>> x
1

>>> x, y = function()
>>> x
1
>>> y
2

>>> x, y, z = function()
>>> x
1
>>> y
2
>>> z
3
python中是否有一个函数或概念可以帮助我实现这一点?也许是装修工

欢迎任何意见

PD:我的Python水平仍然很基础


编辑:

我目前正在从IDL迁移到Python。因此,我错过了IDL中的一个很好的特性,您可以通过如下操作选择返回所需的任意多个变量:

FUNCTION function, a=a, b=b, c=c

 a=1
 b=2
 c=3

RETURN, a
然后你可以简单地问你想得到什么

IDL> x=function()
IDL> print, x
1
IDL> x=function(y=b)
IDL> print, x
1
IDL> print, y
2
IDL> x=function(y=b, z=c)
IDL> print, x
1
IDL> print, y
2
IDL> print, c
3

与其返回不同的值,不如以不同的方式调用它:

x, *_ = function()
x, y, *_ = function()
x, y, z, *_ = function()   # *_ is optional here if it only returns 3 things

执行此操作会将所有未使用的返回值分配给
变量,因此,如果您希望这些值尽早得到gc,则必须
del

而不是返回不同的值,您可以用不同的方式调用它:

x, *_ = function()
x, y, *_ = function()
x, y, z, *_ = function()   # *_ is optional here if it only returns 3 things
这样做会将所有未使用的返回值分配给
\uu
变量,因此,如果您希望它们提前得到gc,则必须
del

您只能返回单个对象。注意,函数返回的是一个
元组
。但是,Python支持灵活解压变量的语法

x,_,_ = function()

或者,即使使用扩展的拆包:

x, *_ = function()
请注意,将
\uu
用作一次性变量只是一种惯例。

您只能返回单个对象。注意,函数返回的是一个
元组
。但是,Python支持灵活解压变量的语法

x,_,_ = function()

或者,即使使用扩展的拆包:

x, *_ = function()

注意,将
\uu
用作一次性变量仅仅是一种惯例。

除了检查调用者的字节码以查看其期望值的疯狂技巧之外,这是不可能的:解释器不会接受任何数量不匹配的值(它会检查并捕获额外值).

除了检查调用方字节码以查看其期望值等疯狂技巧之外,这是不可能的:解释器不会接受任何数量不匹配的值(它会检查并捕获额外的值)。

虽然不像解包那样像python一样,您可以创建装饰器并指定允许的返回值的数量:

def filter_results(val):
  def outer(f):
    def wrapper(*args, **kwargs):
       v = f(*args, **kwargs)[:val]
       return v[0] if len(v) == 1 else v
    return wrapper
  return outer

@filter_results(1)
def function():
  a = 1
  b = 2
  c = 3
  return a, b, c

r = function()
输出:

1
全部结果:

@filter_results(2)
def function():
   ...

x, y = function()
最后:

@filter_results(3)
def function():
   ...

x, y, z = function()

虽然不像解包那样Pythonic,但您可以创建装饰器并指定允许的返回值的数量:

def filter_results(val):
  def outer(f):
    def wrapper(*args, **kwargs):
       v = f(*args, **kwargs)[:val]
       return v[0] if len(v) == 1 else v
    return wrapper
  return outer

@filter_results(1)
def function():
  a = 1
  b = 2
  c = 3
  return a, b, c

r = function()
输出:

1
全部结果:

@filter_results(2)
def function():
   ...

x, y = function()
最后:

@filter_results(3)
def function():
   ...

x, y, z = function()

语言限制。您必须声明如何处理output.language限制。您必须声明如何处理输出。