我正在尝试使用uClassify API根据文本对对象进行分类。要与 API 交互,我需要发出 XML POST 请求,例如:
<?xml version="1.0" encoding="utf-8" ?>
<uclassify xmlns="http://api.uclassify.com/1/RequestSchema" version="1.01">
<writeCalls writeApiKey="YOUR_WRITE_API_KEY_HERE" classifierName="ManOrWoman">
<create id="CreateManOrWoman"/>
</writeCalls>
</uclassify>
Run Code Online (Sandbox Code Playgroud)
我尝试使用 HTTP Requests 模块以及 xml.etree.ElementTree 创建 XML 树来执行此操作,但我收到了左右错误。这是我尝试过的一些代码:
>>> import elementtree.ElementTree as ET
>>> from xml.etree.cElementTree import Element, ElementTree
>>> import requests
>>>
>>> root = ET.Element("uclassify", xlms="http://api.uclassify.com/1/RequestSchema", version="1.01")
>>> head = ET.SubElement(root, "writeCalls", writeApiKey="*************", classifierName="test")
>>> action = ET.SubElement(head, "create", id="CreateTest")
>>> tree = ElementTree(root)
>>>
>>> r = requests.post('http://api.uclassify.com/', tree)
>>>
>>> ........
>>> TypeError: …Run Code Online (Sandbox Code Playgroud) 我认为我对函数如何工作以及如何将它们分配给变量有了一个很好的理解.然而,我刚刚看了几个月前读过的一些学习Python的Hard Way练习(最值得注意的是练习21),并注意到一些关于解释器输出的有趣的事情.
def add(a, b):
print "ADDING %d + %d" % (a, b)
return a + b
Run Code Online (Sandbox Code Playgroud)
输出:
>>> add(30, 5)
ADDING 30 + 5
35
Run Code Online (Sandbox Code Playgroud)
为什么这显示35?难道你不应该写"print add(30,5)"来显示返回值吗?
>>> age = add(30, 5)
ADDING 30 + 5
>>> age
35
Run Code Online (Sandbox Code Playgroud)
变量赋值看起来像调用函数并输出print语句而不是返回值...但变量本身显示值35,为什么变量赋值不一样?
我希望这些问题有意义.我只是想更好地了解幕后发生的事情.如果有人有外读,请告诉我!
我有一个方法:
public static bool ItemsIntersectOrFirstIsEmpty<T>(IEnumerable<T> source, IEnumerable<T> target)
{
if (source.Any())
{
return source.Intersect(target).Any();
}
else
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我看到你可以将一个类型传递给Intersect(),所以第一个条件中的返回行是:
return source.Intersect<T>(target).Any();
Run Code Online (Sandbox Code Playgroud)
这与我原来的代码会有什么不同?