[英]Changes to iteration variable not reflected in original list
我正在尝试实现HTML转义功能
这是我的代码:
def escape_html(s):
for x in s:
if x == '>':
x = ">"
elif x == '<':
x = "<"
elif x == ' " ':
x = """
return s
s = "dasdasdas > < "
print escape_html(s)
我的输出与我的输入完全相同。 为什么不替换字符?
预期产量:
dasdasdas > <
实际输出:
dasdasdas > <
for
循环遍历给定的iterable,并in
每次循环中在in
之前设置变量。 和其他变量一样。 如果您尝试这样做:
my_list = [1, 2, 3]
x = my_list[1]
x = 5
这样一来,您的my_list
末尾就不会等于[1, 5, 3]
my_list
[1, 5, 3]
; 没有,而不是改变你得到了x
的,你只要重新绑定x
。 您的x
相同的问题。 你需要明确地把它放回到s
莫名其妙。
无论如何, 如果您实际上想转义HTML,请使用cgi.escape
。
与@icktoofay所说的一样, x
将采用s
中每个字符的值。 您如何期望一个字符等于' " '
?您可能应该改用索引。这是函数的修改版本, cgi.escape
您的要求(但是仍然很不完整,但是cgi.escape
是最好的方法) :
>>> def escape_html(s):
x = ''
for i in range(len(s)):
if s[i] == '>':
x += ">"
elif s[i] == '<':
x += "<"
elif s[i:i + 3] == ' " ':
x += """
else:
x += s[i]
return x
>>> print escape_html("dasdasdas > < ")
dasdasdas > <
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.