这段代码在做什么,python

2024-09-30 01:23:51 发布

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

我是python的自学者,我正在做一个练习,它的解决方案发布在this线程中。有人能把这段代码翻译成英语吗?当我学习if语句时,我从未遇到过这种语法。在

 consonants = 'bcdfghjklmnpqrstvwxz'
 return ''.join(l + 'o' + l if l in consonants else l for l in s)

Tags: 代码inforreturnif语法语句解决方案
2条回答

这是一段较长的代码,作为生成器编写。这是它看起来的样子,更拉长。在

consonants = 'bcdfghjklmnpqrstvwxz'

ls = []
for l in s:
    if l in consonants:
        ls.append(l + 'o' + l)
    else:
        ls.append(l)

return ''.join(ls)

它循环遍历s,并检查l是否在字符串consonants中。如果是,则将l + 'o' + l推送到列表中,如果不是,则只推l。在

然后使用''.join将结果联接到一个字符串中,并返回。在

更准确地说(作为发电机):

^{pr2}$

其中gencons只是我给生成器函数指定的任意名称。在

这段代码既不包含if语句,也不包含for循环。因为语句不能嵌入表达式中,例如作为参数传递给join的表达式,所以您可以很容易地判断。在

consonants = 'bcdfghjklmnpqrstvwxz'
return ''.join(l + 'o' + l if l in consonants else l for l in s)

if条件表达式的一部分,其形式为x if y else z。与if语句不同,else是必需的,因为无论{}是否为真,表达式都必须有一个值。如果y为真,则值为x;否则,值为z。在本例中,值要么是l + 'o' + l(当l是辅音时)要么是l本身。在

for关键字用于表示生成器表达式,您可以将其视为基于另一个序列生成值序列的方法。这里,我们从某个序列s开始,并为该序列中的每个字符l生成另一个值。生成的序列由join用来生成一个新字符串。在

(稍微偏离主题,但是显式地将列表而不是生成器传递给join更有效,因为无论如何,它都需要先构建一个列表,以计算出要为结果字符串分配多少空间。在

^{pr2}$

相关问题 更多 >

    热门问题