def函数返回错误值(Python2.7)

2024-05-20 20:59:45 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我第一次使用def函数,文档看起来很简单。还有一些例子。但是我不能把它和我的代码联系起来。 我有两个文件langpy和test1:

测试1.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()

兰皮:

^{pr2}$

我希望它返回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)

Tags: importlangtimeportdefservicesysitem
2条回答

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

return language

以及

^{pr2}$

然后您需要在test1文件中print(lang(my_lang))和{}。这些print语句将基本上读为“打印函数调用lang(my_lang)(或port(my_port))返回的任何内容”。在

您正在正确导入这些函数:

from langpy import lang
from langpy import port

但是,您打印的是这些函数的引用,而不是返回值。在

^{pr2}$

实际上,您需要调用函数,然后打印返回的内容。你可以这样做:

^{3}$

再加一个括号!在

编辑:进一步看,您也不会从函数返回任何内容。尝试:

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参数用于类方法,因此它们知道要引用哪个对象。在

相关问题 更多 >