在单个lin中返回缩写的函数

2024-10-03 09:15:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要定义一个函数,其中取一个名字,它的首字母以这种格式返回

assert initials('John Smith') == 'JS'
assert initials('Jason Ralph Jacobs') == 'JRJ'

到目前为止我有这个。。。在

^{pr2}$

但当我运行它时,我一直收到这个消息

initials('John Smith')<generator object initials.<locals>.<genexpr> at 0x000000000349F620>

Tags: 函数定义格式jsassert名字johnsmith
3条回答

像这样

def initials(name):
    return ''.join(letter[0].upper() for letter in name.split())

assert initials('John Smith') == 'JS'
assert initials('Jason Ralph Jacobs') == 'JRJ'

返回的是生成器表达式对象,必须对其进行迭代才能生成结果。这可以通过传递给list来实现。在

由于需要字符串而不是列表,因此可以使用join来迭代生成器。在

之所以会这样做,是因为您实际上是在使用以下语法创建generator expression(尤其是括号):

(letter [0].upper() for letter in names)

这也没有错。如果你迭代返回的内容,你会得到你的数据。在

但是,如果您只想得到一个列表,那么请将表达式更改为:

^{pr2}$

按原样运行代码并迭代得到的结果:

J
S

现在,考虑到您可能希望将其作为字符串返回,那么您可能需要在函数中执行以下操作:

如果要使用列表:

''.join([letter [0].upper() for letter in names])

或者使用生成器表达式,同样的事情:

''.join((letter [0].upper() for letter in names))

输出将是:

JS

当你说,initials = (letter [0].upper() for letter in names)它的计算结果是一个迭代器,它最终将产生所有的首字母。要用它们显式地生成一个字符串,请使用''.join(letter[0].upper() for letter in names)。在

相关问题 更多 >