首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python函数只输出一个结果,而不是接受不同的输入。

Python函数只输出一个结果,而不是接受不同的输入。
EN

Stack Overflow用户
提问于 2019-11-25 09:52:37
回答 3查看 46关注 0票数 0

我正在尝试构建一个Python函数,它接受如下列表中的许多输入(不确定):

代码语言:javascript
复制
def limit(x_es):
    for x in x_es:
        return np.sqrt((3-5*x + x**2 + x**3)) / (x-1)


numbers= [1.1, 1.01, 1.001]
limit(numbers)

但是它只输出一个结果,而不是列表中的三个输出:2.0248456731316713

我对上面的代码做错了什么?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-25 09:54:48

您将返回第一个元素,将其追加到列表中来修复它。

代码语言:javascript
复制
def limit(x_es):
    result = []
    for x in x_es:
        result.append(np.sqrt((3-5*x+x**2+x**3))/(x-1))
    return result   

numbers= [1.1, 1.01,1.001]        
limit(numbers)
#[2.0248456731316713, 2.00249843945087, 2.000249984482112]
票数 1
EN

Stack Overflow用户

发布于 2019-11-25 09:56:05

return语句在第一次迭代时停止函数的执行,返回一个值,即输入列表的第一项的计算值。

您要寻找的是一个生成器,它将在每次调用该函数时返回一个新值,或者一个列表理解,它将返回一个带有计算值的新列表。

您还可以直接使用numpy数组,因为它似乎是一个依赖项(谢谢@GIRISH Kuni差尔的想法)。

代码语言:javascript
复制
import numpy as np

# Generator
def limit_generator(x_es):
    for x in x_es:
        yield np.sqrt((3-5*x+x**2+x**3))/(x-1)

# List comprehension
def limits(x_es):
    return [np.sqrt((3-5*x+x**2+x**3))/(x-1) for x in x_es]

# Numpy arrays
def numpy_limits(x_es):
    x = np.array(x_es)
    return np.sqrt((3-5*x+x**2+x**3))/(x-1)

if __name__ == '__main__':
    numbers = [1.1, 1.01, 1.001]

    generator = limit_generator(numbers)
    print(next(generator), next(generator), next(generator))

    print(limits(numbers))

    print(numpy_limits(numbers))
代码语言:javascript
复制
2.0248456731316713 2.00249843945087 2.000249984482112
[2.0248456731316713, 2.00249843945087, 2.000249984482112]
[2.02484567 2.00249844 2.00024998]
票数 2
EN

Stack Overflow用户

发布于 2019-11-25 10:00:01

您可以使用下面的代码,它修复了问题

还请注意,您的代码中的初始问题是在错误的位置使用返回,因为它在第一次迭代时将控件返回给调用行。

代码语言:javascript
复制
import numpy as np

def limit(x_es):
    result = []
    for x in x_es:
        result.append(np.sqrt((3-5*x+x**2+x**3))/(x-1))
    return result


if __name__ == '__main__':
    numbers= [1.1, 1.01,1.001]
    limit(numbers)

您还可以在这里使用列表理解,这是一种更复杂的方法,请看下面的代码

代码语言:javascript
复制
import numpy as np

if __name__ == '__main__':
    numbers= [1.1, 1.01,1.001]
    #print(limit(numbers))
    list = []
    list = [np.sqrt((3-5*x+x**2+x**3))/(x-1) for x in numbers ]
    print(list)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59029103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档