0

我可以做这个..

def funcOne():
    a,b = funcTwo()
    print a, b

def funcTwo():
    .....
    ......   
    return x, y

但是也可以从 funcTwo 返回一个列表并在 funcOne 中与 2 个值一起显示吗?似乎没有任何效果

4

3 回答 3

5

当您返回多个值时,您所做的就是构建一个包含这些值的元组,然后返回它。您可以构造包含任何内容的元组,并且列表位于任何内容之下:

def funcOne():
    a, b, some_list = funcTwo()
    print a, b, some_list

def funcTwo():
    ...
    some_list = [...] 
    return x, y, some_list

如果你的意思是你希望从列表中返回值,你可以通过返回列表来做到这一点,解包也适用于列表:

def funcOne():
    a, b, = funcTwo()
    print a, b

def funcTwo():
    ...
    some_list = [x, y] 
    return some_list

或者,如果您想使用列表中的所有值扩展返回的值,您只需要将您希望返回的值列表与额外值列表连接起来:

def funcOne():
    a, b, c, d = funcTwo()
    print a, b, c, d

def funcTwo():
    ...
    some_list = [z, w] 
    return [x, y] + some_list
于 2013-05-21T05:52:24.483 回答
1
>>> def list_and_vars():
    a, b = "fee", "fi"
    c = ["fo", "fum"]
    return a, b, c

>>> print list_and_vars()
('fee', 'fi', ['fo', 'fum'])
>>> a, b, [c, d] = list_and_vars()
>>> a, b, c, d
('fee', 'fi', 'fo', 'fum')
于 2013-05-21T05:54:03.960 回答
1
def funcOne():
    f2x,f2y = funcTwo() #tuple unpacking var1,var2 = (val1,val2)
    print a,b,list((lf2x,f2y)) #convert tuple to list

def funcTwo(): 
    return x, y #actually returns (x,y)

如果我们看下面

def funcTwo():
    return 'a','b'
print(funcTwo())

我们可以看到funcTwo返回的元组包含'a','b'

>>> 
('a', 'b')

通过这种方式 Python 只返回一个值,但是它的元组解包可以使它看起来不是这样的:

var1,var2 = funcTwo()
print(var1)
print(var2)
>>> 
a
b

可以显式返回一个列表:

def funcTwo():
    return ['a','b']
print(funcTwo())

在这种情况下,您仍然返回一个值,它只是一个列表。例如:

def funcTwo():
    return ['a','b']
def funcOne():
    return 'c','d',funcTwo()
print(funcOne())

会打印

>>> 
('c', 'd', ['a', 'b'])

你可以再次看到,我们只返回了一个值,一个包含我们想要返回的所有值的元组。

如果您想简单地打印某些内容,funcOne除非您使用字符串格式,否则您将获得与print-ed 返回值相同的结果,因为print('a','b','c')打印('a','b','c')但是您可以执行以下操作:

def funcOne():
    print(','.join(['c','d',funcTwo().__repr__()]))
>>> 
c,d,['a', 'b']
于 2013-05-21T05:54:26.243 回答