Python:这种{}格式如何工作来提取正确的数据?

Python:这种{}格式如何工作来提取正确的数据?,python,adc,Python,Adc,我正在使用Fraser May为MCP8004(adc)编写的一些代码,我为连接到Raspberry Pi 1B+的MCP3002修改了这些代码,现在我正在尝试将收集的数据发送到sparkfun服务器,但我发现我尝试获取数据时返回的是空字符串。我是Python新手,但在学校(我)有一些编码经验 以下是我必须收集adc数据的内容: def getAdc (channel): #check valid channel if ((channel>1)or(chan

我正在使用Fraser May为MCP8004(adc)编写的一些代码,我为连接到Raspberry Pi 1B+的MCP3002修改了这些代码,现在我正在尝试将收集的数据发送到sparkfun服务器,但我发现我尝试获取数据时返回的是空字符串。我是Python新手,但在学校(我)有一些编码经验

以下是我必须收集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
我想我可以调用
adc[0]
adc[1]
来获取我想要的数据,它显示在
getAdc
函数中,但显然不是,我得到的是一个空列表(
[]

我认为我的问题在于
getAdc
中发生了什么,其中使用了
{0:4d}
{1:3}
,但我不确定它们是做什么的。有人能帮我把那部分分解一下吗?到目前为止,我所能找到的只是解释
d
%
功能的文档,但它们在这里的应用对我来说毫无意义

提前谢谢

*注意:
adcOut
在我的
getAdc
脚本之前声明为全局。

选项1: 您需要指出您想要修改全局adcOut变量,而不仅仅是读取它的值。通过向函数添加一个
global adcOut
,修改getAdc(),如下所示:

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)

IMO,更好的选择是#2-返回adcOut而不是使用全局变量。

您应该生成
getAdc
返回值,而不是仅仅打印它们。
adcOut
在哪里填充值?为什么不将
getAdc(i)
存储在一个变量中?哎呀,编辑以进行更正。我使用的代码末尾有“return adcOut”…我从我的PC上的文件中复制了它,而不是我的Pi上的确切版本。我的麻烦似乎是从adcOut那里得到我想要的东西。adcOut填充在getAdc(最上面的代码)中,接下来我调用getAdc(最下面的代码)来抓取adcOut@gr8flux-请参阅我的答案,其中提供了两种可能的解决方案。请注意,后续编辑以将return语句添加到getAdc()函数是不够的。您需要在调用点使用返回值。非常好的Vijay Varadan,谢谢!没想到会是这个问题,很高兴你发现了。
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)
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!")