Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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中,如何将变量括在单引号内?这可能很简单,但我似乎无法理解!我需要对变量术语进行url编码术语由用户以表单形式输入,并传递给一个函数,该函数采用url编码Term=urllib.quote(Term)。如果用户输入“apple computer”作为他们的术语,在url编码后,它将是“apple%20Computer”。我想做的是在url编码之前用单引号将术语括起来,这样它将是“apple computer”,然后在url编码“%23apple%20computer%23”之后。我

在python中,如何将变量括在单引号内?这可能很简单,但我似乎无法理解!我需要对变量
术语
进行url编码<代码>术语
由用户以表单形式输入,并传递给一个函数,该函数采用url编码
Term=urllib.quote(Term)
。如果用户输入“apple computer”作为他们的术语,在url编码后,它将是“apple%20Computer”。我想做的是在url编码之前用单引号将术语括起来,这样它将是“apple computer”,然后在url编码“%23apple%20computer%23”之后。我需要将这个术语传递到url,除非我使用这个语法,否则它不会工作。有什么建议吗

示例代码:

import urllib2
import requests    

def encode():
        import urllib2
        query= avariable #The word this variable= is to be enclosed by single quotes
        query = urllib2.quote(query)
        return dict(query=query)

def results():

    bing = "https://api.datamarket.azure.com/Data.ashx/Bing/SearchWeb/Web?Query=%(query)s&$top=50&$format=json"
    API_KEY = 'akey'

    r = requests.get(bing % encode(), auth=('', API_KEY))
    return r.json

应该是您正在寻找的内容。

您可以使用字符串插值:

>>> term = "foo"
>>> "'%s'" % term
"'foo'"

在url编码后添加单引号有什么不对?或者,只需在输入上述编码函数之前添加它们?

有三种方法:

  • 字符串串联

    term = urllib.quote("'" + term + "'")
    
  • 旧式字符串格式

    term = urllib.quote("'%s'" % (term,))
    
    term = urllib.quote("'{}'".format(term))
    
  • 新型字符串格式

    term = urllib.quote("'%s'" % (term,))
    
    term = urllib.quote("'{}'".format(term))
    

  • 我只是偶然发现一些这样做的代码:

    term = urllib.quote(term.join(("'", "'")))
    
    (在本例中,
    join()
    使用
    term
    作为分隔符,将iterable参数中给定的所有元素组合成一个字符串。由于只有两个元素,因此它们仅围绕
    term
    的一个实例进行包装)

    虽然它很可读,但我仍然认为它比其他选项更难读。因此,我建议使用其他人提到的字符串格式:

    term = urllib.quote("'{}'".format(term))
    

    对于那些在谷歌搜索“python环绕字符串”之类的内容时来到这里的人来说,他们非常认真(或者只是在寻找“最佳”解决方案)

    我要补充的是,现在有一些用于Python3.6+的环境更容易使用,而且从我读到的内容来看,它们说它们更快

    #f-string approach
    term = urllib.parse.quote(f"'{term}'")
    
    我决定在python中对每个“环绕”字符串的方法进行一次分析

    import timeit
    
    results = {}
    
    results["concat"] = timeit.timeit("\"'\" + 'test' + \"'\"")
    results["%s"] = timeit.timeit("\"'%s'\" % ('test',)")
    results["format"] = timeit.timeit("\"'{}'\".format('test')")
    results["f-string"] = timeit.timeit("f\"'{'test'}'\"") #must me using python 3.6+
    results["join"] = timeit.timeit("'test'.join((\"'\", \"'\"))")
    
    for n, t in sorted(results.items(), key = lambda nt: nt[1]):
        print(f"{n}, {t}")
    
    结果:

    concat, 0.009532792959362268
    f-string, 0.08994143106974661
    join, 0.11005984898656607
    %s, 0.15808712202124298
    format, 0.2698059631511569
    
    奇怪的是,每次我运行f-string时,我都会发现级联比f-string快,但是你可以复制和粘贴,看看你的字符串/用法是否有不同的工作方式,也许还有一种更好的方法将它们放入timeit,而不是转义所有引号,所以请告诉我