解释器:Python内置函数没有定义?

时间:2016-06-29 21:35:00

标签: python python-2.7

我正在阅读Python的基础知识,并在解释器中测试一些内置函数。我正在看的文档是在谈论Python 3 ......我正在使用Python 2.7.3。

>>> x = '32456'
>>> x
'32456'
>>> isalpha(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'isalpha' is not defined

我做了一些研究,似乎isalpha()仅限于Python 3 ......即使在sin(3.3)

之后我也无法使用import math

那为什么我会看到错误?我必须导入一些其他模块才能使这些功能起作用吗?

3 个答案:

答案 0 :(得分:2)

isalpha()不是函数,而是str类型的方法。如果必须,可以将其作为未绑定方法提取,并将其命名为函数:

>>> "hello".isalpha()
True
>>> "31337".isalpha()
False
>>> isalpha = str.isalpha
>>> isalpha("hello")
True
>>> isalpha("31337")
False

导入模块中的函数是该模块的成员。要将函数拉入主命名空间,请使用from语句:

>>> import math
>>> math.sin(3.3)
-0.1577456941432482
>>> from math import cos
>>> cos(3.3)
-0.9874797699088649

现在为什么Python以这种方式工作? math模块和logging模块都有一个名为log()的函数,但它们的功能完全不同。

>>> import math, logging
>>> help(math.log)

log(...)
    log(x[, base])

    Return the logarithm of x to the given base.
    If the base not specified, returns the natural logarithm (base e) of x.

>>> help(logging.log)

log(level, msg, *args, **kwargs)
    Log 'msg % args' with the integer severity 'level' on the root logger. If
    the logger has no handlers, call basicConfig() to add a console handler
    with a pre-defined format.

如果所有导入的符号按照from math import *时的方式直接进入主命名空间,则程序将无法使用这两个模块的log()函数。

答案 1 :(得分:1)

isalpha是字符串的方法,而不是你想象的内置函数。

>>> '34r'.isalpha()
False
>>> '45'.isalpha()
False
>>> 'rt'.isalpha()
True

要使用sin,您需要导入:from math import sin

答案 2 :(得分:0)

对于if (world.rank() != 0) { while (!interrupt()) world.send(ROOT, ID, a, bufferSize); // I prefer not to send finish/interrupt as another message } else { while (/*there is any packet to be received*/) world.recv(boost::mpi::any_source, ID, a, bufferSize); } ,您必须sin(3.3),然后致电import math