如何在Python中返回两个值

如何在Python中返回两个值,python,return-value,Python,Return Value,我有下面的代码 class NameParser: def __init__(self): self.getName def getName(self, name): splitName = name.split(' ') surname = splitName.pop() for i in range(len(splitName)): print('Name: %s' % splitNa

我有下面的代码

class NameParser:

    def __init__(self):
        self.getName

    def getName(self, name):
        splitName = name.split(' ')
        surname = splitName.pop()
        for i in range(len(splitName)):
            print('Name: %s' % splitName[i])

        return('Surname: %s' % surname)


np = NameParser()

print(np.getName("ali opcode goren"))

# output: name: ali, name: opcode, surname: goren
如何返回两个值?类似以下代码:

for i in range(len(splitName)):
    return('Name: %s' % splitName[i])

return('Surname: %s' % surname)

# output: name ali: (error) i want all values name, name, surname
我想要所有的值,但只有一个输出。如何解决此问题?

尝试以下方法:

class NameParser:

    def __init__(self):
        self.getName

    def getName(self, name):
        listy = [] # where the needed output is put in
        splitName = name.split(' ')

        for i in range(len(splitName)):
            if i==(len(splitName)-1):#when the last word is reach
                listy.append('Surname: '+ splitName[i])
            else:
              listy.append('Name: '+ splitName[i])


        return listy


nr = NameParser()

print(nr.getName("ali opcode goren"))

# output: name: ali, name: opcode, surname: goren
whithout循环:

class NameParser:

    def __init__(self):
        self.getName

    def getName(self, name):
        listy = [] # where the needed output is put in
        splitName = name.split(" ")
        listy ="Name",splitName[0],"Name",splitName[1],"Surname",splitName[2]



        return listy


nr = NameParser()

print(nr.getName("ali opcode goren"))

# output: name: ali, name: opcode, surname: goren

尝试使用
yield

class NameParser:

    def __init__(self):
        self.getName

    def getName(self, name):
        splitName = name.split(' ')
        surname = splitName.pop()
        for i in range(len(splitName)):
            yield ('Name: %s' % splitName[i])

        yield ('Surname: %s' % surname)


np = NameParser()

for i in (np.getName("ali opcode goren")):
    print i
您可以这样做:

def getName(self, name):
    return name.split(' ')
它将返回一个元组

def get_name(name):
   return name.split(' ')

>>> get_name("First Middle Last")
['First', 'Middle', 'Last']
  • 拆分:按空格拆分名称,然后再次执行列表理解,以从列表中删除空字符串
  • POP:通过
    POP()
    方法从列表中获取最后一项,并将其分配给
    姓氏
    变量
  • 异常处理:在pop过程中执行异常处理。如果输入为空,则会引发
    索引器
    异常
  • 字符串连接:通过循环迭代列表中的每个项目,并将值分配给
    用户名
    变量
  • 再次在字符串中连接
    姓氏
  • 显示结果
  • 演示

    class NameParser:
        def __init__(self):
            pass
    
        def getName(self, name):
            #- Spit name and again check for empty strings.
            splitName = [i.strip() for i in name.split(' ') if i.strip()]
            #- Get Surname. 
            try:
                surname = splitName.pop()
            except IndexError:
                print "Exception Name for processing in empty."
                return ""
            user_name = ""
            for i in splitName:
                user_name = "%s Name: %s,"%(user_name, i)
            user_name = user_name.strip()
    
            user_name = "%s Surname: %s"%(user_name, surname)
            return user_name
    
    
    np = NameParser()
    user_name = np.getName("ali      opcode       goren      abc")
    print "user_name:", user_name
    
    user_name: Name: ali, Name: opcode, Name: goren, Surname: abc
    
    输出

    class NameParser:
        def __init__(self):
            pass
    
        def getName(self, name):
            #- Spit name and again check for empty strings.
            splitName = [i.strip() for i in name.split(' ') if i.strip()]
            #- Get Surname. 
            try:
                surname = splitName.pop()
            except IndexError:
                print "Exception Name for processing in empty."
                return ""
            user_name = ""
            for i in splitName:
                user_name = "%s Name: %s,"%(user_name, i)
            user_name = user_name.strip()
    
            user_name = "%s Surname: %s"%(user_name, surname)
            return user_name
    
    
    np = NameParser()
    user_name = np.getName("ali      opcode       goren      abc")
    print "user_name:", user_name
    
    user_name: Name: ali, Name: opcode, Name: goren, Surname: abc
    
    或者你可以试试

    class test():
        map = {}
        for i in range(10):
            map[f'{i}'] = i
        return map
    

    您的预期输出是什么?不是预期的。两次返回的输出:ali goren。一次打印和一次返回的输出:ali opcode goren(我想要这个)
    return“名称:%s,名称:%s,姓氏:%s”%(splitName[0],splitName[1],splitName[2])
    ,当输入字符串中缺少某个名称时需要执行异常处理。或者只返回split list
    返回splitName
    @VivekSable谢谢,但这是手动的。我要自动的。示例:abc cb cde ffe ags dle like=>split[0,1,2,3,4]。但是你的代码不是自动的。谢谢你的帮助,对不起。不工作。只需输出:Name:ali我想要像:Name:ali,Name:opcode,姓氏:goren如果我使用print,这就是工作。谢谢,我得到了“goren”:。我无法获得其他值。我想我可以解决。我还添加了另一个代码,当你不需要循环时。您可以在另一个注释中询问它。@MartijnvanWezel:在第二个代码中,为什么定义
    listy=[]
    ?需要这份声明吗?你总是要列一张他有多大的名单。所以说他在我的代码中是空的,他将被声明。当你想填写列表时,使用append,这会将你想要的东西添加到列表中感谢它的工作!:)如何在没有for循环的情况下使用此代码?请阅读。阿里,要了解
    yield