Python 什么是同时返回元组和整数,然后解压它们的正确方法?

Python 什么是同时返回元组和整数,然后解压它们的正确方法?,python,python-3.x,tuples,Python,Python 3.x,Tuples,在名为RSA的类中的generateKeys()函数的末尾,我有: ... #now calculate d (the decryption key) d=(k*phi_n+1)/e public_key = (n,e) return (public_key), d 如您所见,我试图返回一个元组(n,e)和一个整数d。但是当我调用如下所示的函数时,我遇到了一个“objectnotiterable”错误 我找不到任何元组和int一起返回的示例。 有什么理由不这样做吗?应该怎么

在名为RSA的类中的generateKeys()函数的末尾,我有:

...        
#now calculate d (the decryption key)
d=(k*phi_n+1)/e

public_key = (n,e)

return (public_key), d
如您所见,我试图返回一个元组(n,e)和一个整数d。但是当我调用如下所示的函数时,我遇到了一个“objectnotiterable”错误

我找不到任何元组和int一起返回的示例。 有什么理由不这样做吗?应该怎么做? 非常感谢

编辑:
已解决。
问题是第二个返回语句没有返回任何参数:Python检测到在一条路径上不返回任何内容的可能性,并将错误标记为“None type object not iterable”,这让我困惑了一段时间。感谢所有帮助解决这个问题的人。

要声明1元组,您需要在元组中添加一个逗号:

return (public_key,), d
这是为了避免
(public\u key)
的歧义,它只是用括号括起来的
public\u key

您可以但不必对高阶元组执行此操作(例如,
(1,2,3,)
有效且与
(1,2,3)
相同),但由于不明确,如果元组仅包含一个元素,则需要执行此操作。零元素元组可以在此行中使用
()

调用

return (public_key), d
您将返回一个元组和一个整数。虽然python会自动将它们打包到一个元组中,但它就是这样工作的。这与说
some_val=1,2,3
是一样的,在python中被解释为元组

本质上,它的返回方式如下:

((n, e), d)
因此,要获取返回的值,请使用:

publicK, privateK = RSA1.generateKeys()
因此,在
publicK
中有元组,在
privateK
中有
d
的值

或者,要独立获取每个值,请使用:

(publicKn, publicKe), privateK = RSA1.generateKeys()

我不明白为什么你的代码会失败,因为它是。。。您需要提供更多,比如
generateKeys()
的全文,或者至少提供一个。您在第一个块中显示的内容是正确的(尽管
public\u key
周围的括号是不必要的)。还有一些错误。您没有迭代-解包的错误是不同的。您稍后会在代码中迭代,但不会显示它-请发布完整的堆栈跟踪,并检查它指向的行是否正确@chepner。对不起,这个问题现在需要删除-我找错了方向。我有第二个return语句把事情搞砸了。
public\u-key
已经是一个元组了。
(publicKn, publicKe), privateK = RSA1.generateKeys()