所以我是一个绝对的初学者,学习Python 3不到2周。但是,我确实相信在过去2周中我学到了很多东西。
我当前的目标是连接到IG API,以创建一个自动交易应用程序。
到目前为止,我已经设法进行身份验证并收到一些令牌以连接到其API
但是,他们产生实时价格的Streaming API是通过称为Lightstreamer的服务器完成的。我设法连接到他们的服务器,并使用请求库创建了会话
现在的问题是从响应中打印出数据/值。
无论如何,这就是我环顾四周所得到的。你们能告诉我这个代码块做什么吗?特别是逐个变量,逐个函数,逐个值。
session_id = None
control_link = None
streaming_i = streaming_i.iter_lines(chunk_size=80, decode_unicode=True)
for line in streaming_i:
print("line", line)
if ":" not in line:
continue
[param, value] = line.split(":", 1)
if param == "SessionId":
session_id = value
if param == "ControlAddress":
control_link = value
if session_id and control_link:
break
特别是这段代码
[param, value] = line.split(":", 1)
答案 0 :(得分:0)
看起来这段代码只是试图通过读取看起来像文本的流来尝试设置两个控制变量
key1:value1
key2:value2
key3:value3
...
它首先检查行是否包含冒号,然后根据该冒号将行分为键和值,最后检查键是否与我们相关,并填充我们要尝试的相应控制变量找。它将继续对每一行执行此操作,直到设置了两个控制变量为止。
# initialize variables we'll want to use later
session_id = None
control_link = None
# get an iterator through this stream
streaming_i = streaming_i.iter_lines(chunk_size=80, decode_unicode=True)
# iterate through each line of that iterator
for line in streaming_i:
print("line", line) # print what the line looks lik3
if ":" not in line: # if the line does not contain a ':',
continue # then skip it
[param, value] = line.split(":", 1) # see below
if param == "SessionId": # determine what the parameter is,
session_id = value # and set the appropriate control variable
if param == "ControlAddress":
control_link = value
if session_id and control_link: # once we've read enough lines to set both control variables,
break # we stop reading
对于您感到困惑的行,它是简单的多次分配:
a, b = 1, 2
str.split()
返回一个子字符串列表,该子字符串是通过在给定的分隔符上分割给定的字符串而获得的。在这种情况下,提供了可选参数maxsplit
,该参数说明要考虑的分隔符数。因此,此处仅在第一个:
分隔符之后停止。
因此,如给定的,line.split(":", 1)
将始终返回2元组。此处使用的语法只是将该2元组中的第一个值分配给param
,并将其中的第二个值分配给value
。 param, value
周围的方括号完全没有用,可以删除-可以说它们是为了使从line.split(...)
返回的值更清楚地分配给相应变量,但最终结果不仅是不包括在内,还更加令人困惑。通常,您会使用()
而不是[]
。
如果您对函数的功能感到困惑,则可以运行python控制台并输入命令help(function)
。在这种情况下,您知道line
是一个字符串,因此您输入了help(str.split)
,它向您显示了方法split()
的文档:
split(self, /, sep=None, maxsplit=-1)
Return a list of the words in the string, using sep as the delimiter string.
sep
The delimiter according which to split the string.
None (the default value) means split according to any whitespace,
and discard empty strings from the result.
maxsplit
Maximum number of splits to do.
-1 (the default value) means no limit.