Python:此 {} 格式如何工作以提取正确的数据?
Python: How does this {} formatting work to pull correct data?
我正在使用 Fraser May 为 MCP8004 (adc) 编写的一些代码,我为连接到 Raspberry Pi 1B+ 的 MCP3002 进行了修改,现在我正在尝试将我收集的数据发送到 sparkfun 服务器,只有我我发现我尝试获取数据 returns 是一个空字符串。我是 Python 的新手,但在学校 (ME) 有一些编码经验。
这是我必须收集的 adc 数据:
def getAdc (channel):
#check valid channel
if ((channel>1)or(channel<0)):
return -1
# Preform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (4+2+channel) << 4, 0])
#Filter data bits from retruned bits
adcOut = ((r[0]&3) << 8) + r[1]
percent = int(round(adcOut/10.24))
#print out 0-1023 value and percentage
print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent))
sleep(1)
return adcOut
现在在我的脚本中将数据发送到服务器我这样做(加上修改过的 phant 东西):
adcOut=[]
while True:
print("collecting data")
adc = [] #sets adc as a list
for i in range(2):
getAdc(i)
adc.append(adcOut)
print adcOut
print("ADC data collected!")
我以为我可以调用 adc[0]
或 adc[1]
来获取我想要的数据,这些数据显示在 getAdc
函数中,但显然不是,我得到了一个空列表 ([]
).
我认为我的问题出在 getAdc
中,其中使用了 {0:4d}
和 {1:3}
,但我不确定它们的作用。任何人都可以帮助分解那部分吗?到目前为止,我能找到的所有文件都解释了 d
和 %
的作用,但它们对我来说在此处应用没有意义。
提前致谢!
*注意:adcOut
在我的 getAdc
脚本之前声明为全局。
选项 1:
您需要指明您要修改全局 adcOut 变量,而不仅仅是读取它的值。修改 getAdc() 如下,在函数中添加一个 global adcOut
:
def getAdc (channel):
global adcOut # <-- this line is added
#check valid channel
if ((channel>1)or(channel<0)):
return -1
# Preform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (4+2+channel) << 4, 0])
#Filter data bits from retruned bits
adcOut = ((r[0]&3) << 8) + r[1]
percent = int(round(adcOut/10.24))
#print out 0-1023 value and percentage
print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent))
sleep(1)
选项 2:
或者,您可以 return adcOut,方法是在函数末尾添加 return adcOut
并更改调用点的代码,如下所示:
adcOut=[]
while True:
print("collecting data")
adc = [] #sets adc as a list
for i in range(2):
adcOut = getAdc(i) # <-- note this changed line
adc.append(adcOut)
print adcOut
print("ADC data collected!")
IMO,更好的选择是 #2 - return adcOut 而不是使用全局变量。
我正在使用 Fraser May 为 MCP8004 (adc) 编写的一些代码,我为连接到 Raspberry Pi 1B+ 的 MCP3002 进行了修改,现在我正在尝试将我收集的数据发送到 sparkfun 服务器,只有我我发现我尝试获取数据 returns 是一个空字符串。我是 Python 的新手,但在学校 (ME) 有一些编码经验。
这是我必须收集的 adc 数据:
def getAdc (channel):
#check valid channel
if ((channel>1)or(channel<0)):
return -1
# Preform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (4+2+channel) << 4, 0])
#Filter data bits from retruned bits
adcOut = ((r[0]&3) << 8) + r[1]
percent = int(round(adcOut/10.24))
#print out 0-1023 value and percentage
print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent))
sleep(1)
return adcOut
现在在我的脚本中将数据发送到服务器我这样做(加上修改过的 phant 东西):
adcOut=[]
while True:
print("collecting data")
adc = [] #sets adc as a list
for i in range(2):
getAdc(i)
adc.append(adcOut)
print adcOut
print("ADC data collected!")
我以为我可以调用 adc[0]
或 adc[1]
来获取我想要的数据,这些数据显示在 getAdc
函数中,但显然不是,我得到了一个空列表 ([]
).
我认为我的问题出在 getAdc
中,其中使用了 {0:4d}
和 {1:3}
,但我不确定它们的作用。任何人都可以帮助分解那部分吗?到目前为止,我能找到的所有文件都解释了 d
和 %
的作用,但它们对我来说在此处应用没有意义。
提前致谢!
*注意:adcOut
在我的 getAdc
脚本之前声明为全局。
选项 1:
您需要指明您要修改全局 adcOut 变量,而不仅仅是读取它的值。修改 getAdc() 如下,在函数中添加一个 global adcOut
:
def getAdc (channel):
global adcOut # <-- this line is added
#check valid channel
if ((channel>1)or(channel<0)):
return -1
# Preform SPI transaction and store returned bits in 'r'
r = spi.xfer([1, (4+2+channel) << 4, 0])
#Filter data bits from retruned bits
adcOut = ((r[0]&3) << 8) + r[1]
percent = int(round(adcOut/10.24))
#print out 0-1023 value and percentage
print("ADC Output: {0:4d} Percentage: {1:3}%".format (adcOut,percent))
sleep(1)
选项 2:
或者,您可以 return adcOut,方法是在函数末尾添加 return adcOut
并更改调用点的代码,如下所示:
adcOut=[]
while True:
print("collecting data")
adc = [] #sets adc as a list
for i in range(2):
adcOut = getAdc(i) # <-- note this changed line
adc.append(adcOut)
print adcOut
print("ADC data collected!")
IMO,更好的选择是 #2 - return adcOut 而不是使用全局变量。