这个Python字符串代码如何工作?

时间:2015-11-07 00:20:30

标签: python

我的教授向班级展示了一些我们可以用来显示名字缩写的代码,但她从未解释过它的工作原理。教科书也没有多大帮助。我只对第二行感到困惑。这不是作业;我只是想知道是什么让它显示字符串中的第一个字母。

userName = input("Enter your name: ")
initials = '.'.join(name[0].upper() for name in userName.split())
print(initials)

3 个答案:

答案 0 :(得分:1)

userName = input("Enter your name: ")

首先,userName是一个字符串,例如我的名字:kevin guan

'.'.join(name[0].upper() for name in userName.split())

现在,name[0].upper() for name in userName.split()是一个生成器理解(它给出了一个生成器):

userName.split()

提供了一个类似['kevin', 'guan']的列表。

name[0].upper() for name in ['Kevin', 'Guan']

您将获得['K', 'G'],因为name[0]k循环中为for,然后.upper()将其转换为K并将其保存到列表中(实际上它是一个生成器)。 在第二个循环中,我们得到G

然后,'.'.join给出K.G。有关详细信息,请查看有关str.join()generator comprehension

的文档

答案 1 :(得分:1)

运行输入后说userName = "john paul jones"

然后userName.split()在空格' '上拆分名称,返回一个由字符串“john”,“paul”,“jones”(按此顺序)组成的列表。

for name in userName.split()部分对此进行迭代 - 因此name会先后绑定到"john",然后"paul"然后"jones"

name绑定到例如"paul"name[0]表达式'p'返回第一个字符(例如(name[0].upper() for name in userName.split()) ),然后将其转换为相应的大写字母(如果它不是大写的话)。最终结果是生成器表达式

'J'

依次返回字符串'P',然后'J',然后join(在我们的示例中)。

最后,'.'接受一个可迭代的字符串并将它们连接在一起,使用调用连接的字符串作为分隔符 - 在本例中为"J.P.J" - 将此分隔符视为粘合剂它将字符串保存在迭代中。如此加入 - 最终结果为+'.'

您的教师可能应该在表达式末尾添加"J.P.J."以获得最后一段时间(@Entity public class Cat { @Column(name = "OWNER_ID") private Long ownerId; @ManyToOne @JoinColumn(name = "OWNER_ID", insertable = false, updatable = false) private Owner owner; } )。

答案 2 :(得分:1)

让我们把它拆开:

initials = '.'.join(name[0].upper() for name in userName.split())

这里有一个内环,for name in userName.split()。这会将userName中的字符串拆分为块或name s。 split()的文档说:

  

返回字符串s的单词列表。如果是可选的第二个   参数sep不存在或None,单词由任意分隔   空格字符串(空格,制表符,换行符,返回,   换页)。

因此,如果字符串包含空格,它将按预期分割字符串。 "my lastname"将被分为["my", "lastname"]列表。此列表将成为for循环中的名称列表。在这种情况下,name将成为"my""lastname"的值。

接下来,我们有神秘的功能name[0].upper()。这适用于name循环中for的每个值。第一部分name[0]获取name中字符串的第一个字符。第二部分.upper()将第一个字符(实际上是一个字符的字符串)转换为大写字符。这与上面相同的文档中描述。

继续我们的示例,name[0].upper()获取两个字符串"my""lastname",从每个字符串中取出第一个字母并将其转换为大写:"M"和{{1 }}。结果列表为"L"

最后,["M", "L"]表达式获取'.'.join()内的列表,并使用join()字符将它们连接在一起。在这种情况下,结果为'.'