这段代码是做什么的,python

时间:2015-05-03 00:00:46

标签: python if-statement

我正在自学python,我正在做一个练习,其解决方案发布在this主题中。任何人都可以将这段代码的含义翻译成英文吗?当我学习语句时,我从未遇到过这种语法。

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

2 个答案:

答案 0 :(得分:11)

这是一段较长的代码,作为生成器编写。这是它的样子,更多的是。

f.cktext_area

循环遍历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

consonants = 'bcdfghjklmnpqrstvwxz' def gencons(s): for l in s: if l in consonants: yield l + 'o' + l else: yield l return ''.join(gencons(s)) 只是一个任意名称,我给了生成器函数。

答案 1 :(得分:0)

这段代码既不包含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是否为真,表达式都必须具有值。如果y为真,则值为x;否则,值为z。在这种情况下,值为l + 'o' + l(当l是辅音时)或l本身。

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

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

return ''.join([l + 'o' + l if l in consonants else l for l in s])