0

我正在尝试定义一个函数来查找句子中单词的平均长度。一切都很好,但我只是询问了我的功能的某些部分,即:

random_sentence = str(input('Enter a sentence:'))

def average():
    'Takes the average length of a word in a sentence inputed by user.'
    words = random_sentence.split()
    averageword = sum(len(word) for word in words)/len(words)
    return averageword

print(average())

averageword = sum(len(word) for word in words)/len(words)

我了解 sum 和 len 的作用,但是,Python 如何知道“单词中的单词”中的“单词”是什么。它是在某处预定义的吗?当我把这句话拿出来时,功能就起作用了,因为它会说单词没有定义。我很欣赏澄清。

4

4 回答 4

4

for 是 Python 中的关键字

当 Python 执行一个程序时,它会将文件转换为一系列带有词法分析的标记。之后,对标记进行解析以确定它们属于哪个构造。

在您的情况下,之前的表达式标记for使构造成为生成器表达式

于 2013-02-10T18:35:56.303 回答
2

列表words是可迭代的——它定义了一个__iter__方法,该方法返回列表的迭代器。for关键字调用__iter__()列表,然后调用迭代next()器,直到StopIteration抛出异常:

In [1]: words = ["a", "b"]

In [2]: i = words.__iter__()

In [3]: i
Out[3]: <listiterator at 0x5cd82b0>

In [4]: i.next()
Out[4]: 'a'

In [5]: i.next()
Out[5]: 'b'

In [6]: i.next()
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-6-e590fe0d22f8> in <module>()
----> 1 i.next()

StopIteration:

关于迭代器和迭代器的更多细节:

http://docs.python.org/2/library/stdtypes.html#iterator-types http://getpython3.com/diveintopython3/iterators.html#a-fibonacci-iterator

于 2013-02-10T18:43:34.053 回答
0

“单词”在列表推导和生成器表达式以及 for 循环中本地定义。这就像一个临时变量。

用 'x' 代替 'word' 来这样想:

theSum = sum([len(x) for x in words]) 

(我在它周围加上括号以表明它就像一个列表)。这意味着“让 x 成为列表‘单词’中的一个元素。对于每个 x,计算它的长度并根据结果制作一个列表。”

你也可以这样想:

list = []
for x in words:
    list.append(len(x))

theSum = sum(list)

您可以在List Comprehensions获得一些关于语法的血腥细节

于 2013-02-10T19:03:43.113 回答
0

for x in y 要求 y 是可迭代的(即列表、字典、字符串等)

然后python遍历y,每次迭代x定义为y[iteration#]

所以基本上如果 y = [1,2,3]

for x in y:
    print x

将返回

1

2

3

于 2013-02-10T18:37:27.590 回答