如何从函数中返回两个在函数中创建的值? - Python

时间:2017-10-28 17:01:56

标签: python

def FindingTwoPrimes(n, p1, p2):
    p1 = 0
    p2 = 0
    n = 0
    primeList = []
    for num in range(1,101):
        if all(num%i!=0 for i in range(2,num)):
            primeList.append(num)
    print (primeList)
    print ("Length of Primelist = ", len(primeList))
    lengthOfPrimelist = len(primeList)
    p1 = primeList[random.randint(0,lengthOfPrimelist)]
    p2 = primeList[random.randint(0,lengthOfPrimelist)]
    n = p1 * p2
    print ("p1 =", p1)
    print ("p2 =", p2)
    return n
    return p1
    return p2


FindingTwoPrimes(n, p1, p2)
print(p1, p2, n)

所以上面是一个函数,它将找到我将在公钥加密系统的方法中使用的两个素数。但是,当我运行该函数时,它将p1,p2和n返回为0.为什么这样,我该如何解决?此外,任何使这些代码更有效的方法都将受到赞赏: - )

3 个答案:

答案 0 :(得分:4)

您的函数将返回单个值,因为它将在第一个return语句后执行。您可以使用tuple

返回乘法值
def FindingTwoPrimes(n, p1, p2):
...
    return n, p1, p2


n, p1, p2 = FindingTwoPrimes(n, p1, p2)
print(p1, p2, n)

此外,您的代码根本不起作用。在函数的开头,你为它的所有args分配零值。

def FindingTwoPrimes(n, p1, p2):
    p1 = 0
    p2 = 0
    n = 0

尝试在函数内使用具有不同名称的变量 据我所知,你试图从参数中的函数传回结果。这是个坏主意。使用tuple从函数

获取结果
def FindingTwoPrimes():
    p1 = 0
    p2 = 0
    n = 0
    ...
    return n, p1, p2

n, p1, p2 = FindingTwoPrimes()
print(p1, p2, n)

关于问题的最后一部分 - 如何提高效率。如果您计划多次调用此函数,则可以将primeList计算移到函数之外。

def FindingTwoPrimes(primeList):
    lengthOfPrimelist = len(primeList)
    p1 = primeList[random.randint(0,lengthOfPrimelist)]
    p2 = primeList[random.randint(0,lengthOfPrimelist)]
    n = p1 * p2
    print ("p1 =", p1)
    print ("p2 =", p2)
    return n, p1, p2

primeList = [num for num in range(1,101) if all(num%i!=0 for i in range(2,num))]

print (primeList)
print ("Length of Primelist = ", len(primeList))

n, p1, p2 = FindingTwoPrimes(primeList)
print(p1, p2, n)

答案 1 :(得分:1)

在一个函数中应该只有一个返回但你有3.从

更改以下行
return n
return p1
return p2

return [n,p1,p2]

然后将print statement更改为

print FindingTwoPrimes(n, p1, p2)

您的功能中的代码也是错误的。请改变它

import random
def FindingTwoPrimes(n, p1, p2):
    primeList = []
    for num in range(1,101):
        if all(num%i!=0 for i in range(2,num)):
            primeList.append(num)
    lengthOfPrimelist = len(primeList)
    p1 = primeList[random.randint(0,lengthOfPrimelist)]
    p2 = primeList[random.randint(0,lengthOfPrimelist)]
    n = p1 * p2
    return [p1,p2,n]

print FindingTwoPrimes(10, 11, 12)

答案 2 :(得分:-1)

解决这个问题只需要

(n, p1, p2) = FindingTwoPrimes(n, p1, p2)