def函数返回错误的值(python 2.7)

时间:2015-08-07 17:29:39

标签: python python-2.7

所以我第一次使用def函数,文档看起来很简单。并举了几个例子。但是我无法将它与我的代码联系起来。 我有2个文件langpy和test1:

test1.py

import time
import thread
import os
import sys
import ctypes
import wmi
from langpy import lang
from langpy import port
string = ""

class service_test:
        def __init__(self):
                thread.start_new(self.do_something, tuple())
                while True:
                        if getattr(sys,'stopservice', False):
                                sys.exit()
                        time.sleep(0.3)

        def do_something(self):
                print(str(lang))
                print(str(port))
                while True:
                        fname = 'c:\\\\test.txt'
                        f = open(fname, 'a')
                        f.write(str(time.time()))
                        #f.write("%s /n/r") % string
                        f.close()
                        time.sleep(1)

if __name__ == "__main__":
        tst = service_test()

langpy:

import os
import time
import ctypes
import wmi

def lang(self, language):
        windll = ctypes.windll.kernel32
        language = str(windll.GetUserDefaultUILanguage())
        return

def port(self, Ardport):
        Ardport = "not found"
        c = wmi.WMI()
        wql = "Select * From Win32_USBControllerDevice"
        for item in c.query(wql):
                        s = str(item.Dependent.Caption)
                        strfind = "Raptor"
                        if (s.find(strfind) >= 0):
                                Ardport = str(item.Dependent.Caption)
        return

我希望它在test1代码中从Ardport = str(item.Dependent.Caption)language = str(windll.GetUserDefaultUILanguage())返回字符串,但它会继续打印

function lang at 0x027479F0
function port at 0x027503B0

(他们外面也有<>,但论坛格式不包括它们)

我有一个未编辑的langpy版本(没有定义任何东西),它会重新调整正确的str

import os
import time
import ctypes
import wmi
windll = ctypes.windll.kernel32
lang = str(windll.GetUserDefaultUILanguage())
print(lang)
Ardport = "not found"
c = wmi.WMI()
wql = "Select * From Win32_USBControllerDevice"
for item in c.query(wql):
        s = str(item.Dependent.Caption)
        strfind = "Raptor"
        if (s.find(strfind) >= 0):
                Ardport = str(item.Dependent.Caption)
print (Ardport)

2 个答案:

答案 0 :(得分:0)

您正在正确导入这些功能:

from langpy import lang
from langpy import port

但是,您正在将参考打印到这些功能,而不是返回值。

print(str(lang))
print(str(port))

您希望实际调用功能,然后打印返回的内容。你可以这样做:

print(str(lang()))
print(str(port()))

再加上一组括号!

编辑:进一步查看,您也没有从功能中返回任何内容。尝试:

def lang():
            windll = ctypes.windll.kernel32
            language = str(windll.GetUserDefaultUILanguage())
            return language

def port():
        Ardport = "not found"
        c = wmi.WMI()
        wql = "Select * From Win32_USBControllerDevice"
        for item in c.query(wql):
            s = str(item.Dependent.Caption)
            strfind = "Raptor"
            if (s.find(strfind) >= 0):
                Ardport = str(item.Dependent.Caption)
        return Ardport

注意:除非我缺少某些功能,否则你不需要这些功能的争论。

self参数用于类方法,因此它们知道要引用哪个对象。

答案 1 :(得分:0)

您需要从函数中返回要打印的实际值。将return中的现有langpy行替换为:

return language

return Ardport

然后,您需要在print(lang(my_lang))文件中print(port(my_port))test1。然后,这些打印语句基本上会读取&#34;打印函数调用lang(my_lang)(或port(my_port))&#34;返回的内容。