【问题标题】:Functions in Python 2.7 vs 3.xPython 2.7 与 3.x 中的函数
【发布时间】:2013-03-03 18:38:36
【问题描述】:

我是 Python 新手。我一直在努力让自己熟悉 Numpy、Scipy 和 Matplotlib,因为我有科学背景,并希望让自己成为在神经科学实验室工作的更有竞争力的候选人。

我一直在浏览 Matplotlib 文档,尝试通过示例学习。我将从以下 URL 中引用一个示例:http://matplotlib.org/users/pyplot_tutorial.html

我的印象是这些示例是用 Python 3.x 编写的,我遇到了麻烦,因为我使用的是 Python 2.7。我正在使用 2.7,因为我想要的一些库不适用于 3.x。

该网站给出了使用子图的示例。他们的代码如下:


import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(1)
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')

这应该返回一个像这样的图形:http://i.stack.imgur.com/ejNDu.png


当我将相同的代码复制到 IDLE 中时,它给了我一个错误。上线了

t1 = np.arange(0.0, 5.0, 0.1)

,IDLE 告诉我“t1”是无效语法。

我的第一个问题:使用 t1 作为变量有什么问题?

如果我复制类似的代码,但稍加调整,我可以避免这个错误。但是,然后我遇到了另一个错误。当我添加相当于

的行时
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

,IDLE 向我显示错误:


Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    plt.plot(ty, f(tx), 'bo', ty, f(ty), 'k')
NameError: name 'f' is not defined

我不确定 Python 期望我如何将“f”与函数“f(t)”分开定义。

我的第二个也是主要问题:有人可以解释为什么必须单独定义“f”吗?如何在 Python 2.7 中正确使用此类函数?

如果有人需要我解释这里使用的 Numpy/Matplotlib 机制,我会尽力解释它们是如何产生图表的。

【问题讨论】:

  • 您粘贴的代码在 Python 2.7 中对我来说很好用。你确定你没有犯一些小错误吗?有时省略括号或类似的东西可能会导致程序稍后出现令人费解的语法错误。另外,您如何将代码输入IDLE?我认为您不能将多行 sn-ps 直接粘贴到 IDLE 中。您是否尝试使用这些命令创建文件然后运行它?

标签: python function numpy python-2.7 matplotlib


【解决方案1】:

对于语法错误,检查一行或两行之前t1 是一个完全有效的变量名(规则类似于其他各种语言:变量名可以包含字母、数字和_,但不能以数字开头) - 但如果你忘记了右括号或类似的上面,然后解释器会感到困惑并告诉你那里不能有赋值语句(如果换行符在(){}[] 内,则它们不算作“语句结束” ,或者如果换行符之前的最后一个字符是\)。

定义一个函数确实会在该命名空间中为您提供一个具有该名称的变量-您无需单独定义f。如果没有看到您的确切代码很难判断,但可能发生的情况是您在不同的范围内定义了它(因此名称不可见),或者您已将函数重命名为 f 以外的其他名称。

【讨论】:

    【解决方案2】:

    尝试在新窗口中再次输入所有内容。 'f' 不应该单独定义。

    【讨论】:

      【解决方案3】:

      由于缺少新行和意外缩进而出现的无效语法接缝错误。

      在 IDLE 中,定义函数 f(t) 后,您必须再次按下 &lt;return&gt; 以完成 f(t) 的声明 - 在 f(t) 的声明后放置一个空行。 如果你不在 IDLE 中添加额外的新行,你会得到一个语法错误,因为意外的缩进和 f(t) 的定义不会完成,所以你也会得到下一个错误,说 'f ' 未定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-23
        • 2023-03-31
        • 2018-01-19
        • 2017-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-09
        相关资源
        最近更新 更多