Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谁能给我解释一下用Python写的这个语句的含义吗?_Python - Fatal编程技术网

谁能给我解释一下用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(…)意味着对于一组字符…而言,它们之间将没有任何(“”)的连接 因此, 这一部分是一种狡猾的方法,只在查询字符串中(在?符号

我是Python新手。请为我简化此代码。

[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
,这意味着“if
i
大于
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)