【问题标题】:Passing parameters to a function in Python在 Python 中将参数传递给函数
【发布时间】:2017-09-30 13:24:10
【问题描述】:

我两周前开始编程,所以我意识到这可能是一个愚蠢的问题。 我想在区间 [0,25] 中找到 t 值的 y 值,而不使用 for 循环。我想要一个 y 值的列表,但我得到的是 <function y at 0x01D4D5D0>:

from math import cos, e, sqrt
import numpy as np
m = 9          
A = 0.3         
k = 4          
gamma = 0.15

t_array = np.linspace(0,25)
y_array = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
def y(t_array):
    y = []
    y.append(A*(e**(-gamma)**(t_array))*cos((sqrt(k/m))*(t_array)))
print(y)

【问题讨论】:

  • y 确实是函数,来自def y(...):。您需要调用您的函数,并且该函数需要返回结果列表。
  • 你的意思是print(y(t_array))
  • 当你定义一个 Python 函数时,你给它函数的名字和一个变量的名字。但是您实际上并没有传递值。例如。你可能有一个函数f(x) = x^2,但你实际上并没有得到值,除非你把它们放入函数中,比如f(2)
  • print(y)y 是一个函数,您在不调用它的情况下打印它。要调用它,您需要添加括号(在这种情况下,传递一个参数),例如 print(y(t_array))
  • 如果您的问题得到解答,请accept the one that helped the most

标签: python arrays function numpy


【解决方案1】:

您最初的问题是由于您没有调用您定义的函数而出现的。你不能期望一个函数知道它必须使用哪些参数。 Python是程序化的;你必须自己传递这些参数。

或者(我推荐这个),您可以使用numpy 的 ufunc 并将所有内容矢量化:

y_array = A * (np.exp(-gamma) ** (t_array)) * np.cos((np.sqrt(k / m)) * (t_array))

print(y_array)
array([ 0.3       ,  0.26197643,  0.20012117,  0.12471753,  0.04610095,
       -0.02650152, -0.08584334, -0.12718585, -0.14847109, -0.1501709 ,
       -0.13487525, -0.10670268, -0.07062388, -0.03178614,  0.00508595,
        0.03615761,  0.05878548,  0.07164338,  0.07468336,  0.06895966,
        0.05635461,  0.03925115,  0.0201959 ,  0.00159182, -0.01454951,
       -0.02677677, -0.03428127, -0.03689604, -0.0350233 , -0.02950888,
       -0.02148485, -0.01220259, -0.00287629,  0.0054473 ,  0.01198185,
        0.0162522 ,  0.01810327,  0.0176719 ,  0.01533013,  0.01161037,
        0.00712318,  0.00247811, -0.00178419, -0.00524252, -0.00762514,
       -0.00881889, -0.00885931, -0.00790559, -0.00620522, -0.00405386]

免责声明:我无法验证此答案,因为您没有解释您要做什么。希望这能让您朝着正确的方向开始使用矢量化。

【讨论】:

    【解决方案2】:

    我认为问题在于您有一个名为“y”的函数,并且打印 y 会打印函数位置。此外,函数 y 不是仅定义运行的,它也不会返回任何内容。因此,要在 y 函数中打印新创建的 y 列表,您可以这样做:

    def y(t_array):
        y_values = []
        y_values.append(A*(e**(-gamma)**(t_array))*cos((sqrt(k/m))*(t_array)))
        return y_values
    print(y(t_array))
    

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      相关资源
      最近更新 更多