- 3.2 函数
3.2 函数
假设你正在分析一些文本,这些文本包含同一个词的不同形式,你的一部分程序需要将给定的单数名词变成复数形式。假设需要在两个地方做这样的事,一个是处理一些文本,另一个是处理用户的输入。
比起重复相同的代码好几次,把这些事情放在一个函数中会更有效和可靠。一个函数是命名的代码块,执行一些明确的任务,就像我们在1中所看到的那样。一个函数通常被定义来使用一些称为参数的变量接受一些输入,并且它可能会产生一些结果,也称为返回值。我们使用关键字def
加函数名以及所有输入参数来定义一个函数,接下来是函数的主体。这里是我们在1看到的函数(对于 Python 2,请包含import
语句,这样可以使除法像我们期望的那样运算):
>>> from __future__ import division
>>> def lexical_diversity(text):
... return len(text) / len(set(text))
我们使用关键字return
表示函数作为输出而产生的值。在这个例子中,函数所有的工作都在return
语句中完成。下面是一个等价的定义,使用多行代码做同样的事。我们将把参数名称从text
变为my_text_data
,注意这只是一个任意的选择:
>>> def lexical_diversity(my_text_data):
... word_count = len(my_text_data)
... vocab_size = len(set(my_text_data))
... diversity_score = vocab_size / word_count
... return diversity_score
请注意,我们已经在函数体内部创造了一些新的变量。这些是局部变量,不能在函数体外访问。现在我们已经定义一个名为lexical_diversity
的函数。但只定义它不会产生任何输出!函数在被“调用”之前不会做任何事情:
>>> from nltk.corpus import genesis
>>> kjv = genesis.words('english-kjv.txt')
>>> lexical_diversity(kjv)
0.06230453042623537
让我们回到前面的场景,实际定义一个简单的函数来处理英文的复数词。3.1中的函数plural()
接受单数名词,产生一个复数形式,虽然它并不总是正确的。(我们将在4.4中以更长的篇幅讨论这个函数。)
def plural(word):
if word.endswith('y'):
return word[:-1] + 'ies'
elif word[-1] in 'sx' or word[-2:] in ['sh', 'ch']:
return word + 'es'
elif word.endswith('an'):
return word[:-2] + 'en'
else:
return word + 's'
endswith()
函数总是与一个字符串对象一起使用(如3.1中的word
)。要调用此函数,我们使用对象的名字,一个点,然后跟函数的名称。这些函数通常被称为方法。