我使用python实现了php中可用的str_replace函数版本。这是我的原始代码无效
def replacer(items,str,repl):
return "".join(map(lambda x:repl if x in items else x,str))
test = "hello world"
print test
test = replacer(test,['e','l','o'],'?')
print test
但打印出来
hello world
???
我按预期做的代码是
def replacer(str,items,repl):
x = "".join(map(lambda x:repl if x in items else x,str))
return x
test = "hello world"
print test
test = replacer(test,['e','l','o'],'?')
print test
打印出来
hello world
h???? w?r?d
就像我想要的那样。
除了可能还有一种方法可以使用我尚未见过的内置,为什么第一种方式失败,第二种方式做我需要的呢?
答案 0 :(得分:4)
replacer
的参数顺序是两者之间的区别。如果您在第一个版本中更改了参数排序,则其行为与第二个版本相同。
答案 1 :(得分:3)
请勿使用str
等内置名称作为您自己的标识符,这只会引发问题并且没有会带来任何好处。
除此之外,您的第一个版本是str
循环,第二个参数 - 列表['e', 'l', 'o']
- 所以当然它将返回一个恰好三个项目的字符串 - 你怎么能指望它返回任何其他长度的字符串?!使用str
命名列表参数特别有悖常理并容易出错。
第二个版本在str
上循环,第一个参数 - 字符串'hello world'
,所以当然它返回一个字符串长度
答案 2 :(得分:1)
你在第一个中向后传递它。它应该是
test = replacer(['e','l','o'], test, '?')