谁能给我解释一下用Python写的这个语句的含义吗?
我是Python新手。请为我简化此代码。谁能给我解释一下用Python写的这个语句的含义吗?,python,Python,我是Python新手。请为我简化此代码。[f(url[i])for i in xrange(len(url))]是Python中的反模式。(xrange(len(x))是你几乎不应该写的东西。)它基本上是对URL的每个字符做一些处理(假设URL是一个字符串)。您应该改为使用类似于[f(char)for char in url],或者如果需要索引,请使用枚举 “”。join(…)意味着对于一组字符…而言,它们之间将没有任何(“”)的连接 因此, 这一部分是一种狡猾的方法,只在查询字符串中(在?符号
[f(url[i])for i in xrange(len(url))]
是Python中的反模式。(xrange(len(x))
是你几乎不应该写的东西。)它基本上是对URL的每个字符做一些处理(假设URL
是一个字符串)。您应该改为使用类似于[f(char)for char in url]
,或者如果需要索引,请使用枚举
“”。join(…)
意味着对于一组字符…
而言,它们之间将没有任何(“”
)的连接
因此,
这一部分是一种狡猾的方法,只在查询字符串中(在?
符号之后)用%20
替换空格(
)
分解它,我们有一个生成器表达式,(c中a代表b)
,作为生成器的表达式,char.replace(''%20')if i>url.find('?')else char
,这意味着“ifi
大于url.find('?')
,然后使用char.replace(''%20'))
,否则使用char
作为一个简单的例子,如果url
是foo-bar?baz-qux
,我们最终会得到foo-bar?baz%20qux
,?
后面的空格将替换为%20
保留相同的功能,也可以通过更简洁高效地使用str.partition
和str.replace
来编写:
url = ''.join(
char.replace(' ', '%20') if i > url.find('?') else char
for i, char in enumerate(url)
)
剩下的内容很简单,无需解释,正如文档所解释的:
>>> url = 'foo bar?baz quux'
>>> lhs, pivot, rhs = url.partition('?')
>>> lhs + pivot + rhs.replace(' ', '%20')
'foo bar?baz%20quux'
下面是我尝试使用for循环重写的示例,以使您更好地理解:
req = urllib2.Request(url, data, _headers)
您截断了生成器表达式前面的某些内容。我现在添加了整个语句。我添加了一些换行符,以便该行至少具有模糊可读性。+1.值得一提的是,HTML转义字符串的非简捷方式是使用
urllib.quote
。
req = urllib2.Request(url, data, _headers)
ls = list()
url = 'https://www.facebook.com/?ref=here is me'
for i in range(len(url)):
# all the element after '?'
if i > url.find('?'):
ls.append(url[i].replace(' ', '%20'))
else:
ls.append(url[i])
nurl = ''.join(ls)
# nurl = https://www.facebook.com/?ref=here%20is%20me
req = urllib2.Request(nurl, data, _headers)