不能将函数的输出保存到列表或字符串中,函数如何在Python中返回多个值

2024-10-06 12:56:25 发布

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

我创建了一个函数,将语法特征返回给一组单词:

import nltk.tokenize
from io import StringIO

def get_pos_tag(string):
    detM =['un','le']
    nomM =['garçon','verre','chair']

    #Entréé
    test = nltk.word_tokenize(string)

    #Pos-Tag de chaque entréé
    for i in range(0,len(test)):

       #Déterminant masculin singulier
       if test[i] in detM:
           CAT = "Det"
           Nb = "Sg"
           GND = "M"
           return(test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb)
      #Nom Masculin Singulier
      elif test[i] in nomM:
           CAT = "N"
           Nb = "Sg"
           GND = "M"
           return(test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb)

现在在另一个脚本中,当我想将函数的输出保存到字符串或列表中时,我得到的是:

>>>import PosTag
>>> var1=PosTag.get_pos_tag("un garçon")
un : CAT: Det , Genre: M , Nombre: Sg
garçon : CAT: N , Genre: M , Nombre: Sg
>>> print (var1)
None
>>> var2=[]
>>> var2.append(PosTag.get_pos_tag("un garçon"))
un : CAT: Det , Genre: M , Nombre: Sg
garçon : CAT: N , Genre: M , Nombre: Sg
>>> print(var2)
[None]

我需要将结果存储在一个变量中,以便下一步使用它。你知道吗


Tags: inpostestimportgetontagsg
2条回答

也许你在找^{}关键字。Yield本质上是将函数转换为一个生成器,它将不断返回值,直到到达末尾。你知道吗

def get_pos_tag(string):
    detM =['un','le']
    nomM =['garçon','verre','chair']

    #Entréé
    test = nltk.word_tokenize(string)

    #Pos-Tag de chaque entréé
    for i in range(0,len(test)):

       #Déterminant masculin singulier
       if test[i] in detM:
           CAT = "Det"
           Nb = "Sg"
           GND = "M"
           yield test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb

       #Nom Masculin Singulier
       elif test[i] in nomM:
           CAT = "N"
           Nb = "Sg"
           GND = "M"
           yield test[i],":","CAT:",CAT,",","Genre:",GND,",","Nombre:",Nb

您可以对其进行迭代,或直接将其转换为列表:

for val in get_pos_tag(string):
    print(val)

# or

print(list(get_pos_tag(string)))

另外,文件末尾的return get_pos_tag(string)(在所有其他函数之外)实际上什么都不做(我不确定它是否有效)


问题澄清旧答案:

这是因为您没有从get_pos_tag()内返回任何内容,而只是调用printprint()函数不传输任何值,只显示它们。你知道吗

无论哪里有print()函数,都要用return替换它。你知道吗

任务的正确数据结构不是字符串列表,而是字典字典。你知道吗

def get_pos_tag(s):

    def d(e):
        if e in ['un','le']:
            return {'CAT':'Det', 'Genre':'M', 'Nombre':'Sg'}
        if e in ['garçon','verre','chair']:
            return {'CAT':'N', 'Genre':'M', 'Nombre':'Sg'}

    return {entréé:d(entréé) for entréé in s.split()}

作为使用示例:

d = get_pos_tag("un garçon")

for k in d:
    print(k, d[k])

收益率

un {'CAT': 'Det', 'Genre': 'M', 'Nombre': 'Sg'}
garçon {'CAT': 'N', 'Genre': 'M', 'Nombre': 'Sg'}

以及

print(d['un']['Genre'])

收益率

M

ps-为了测试我的解决方案,我用s.split替换了nltk.word_tokenize(我还没有安装)。你知道吗

相关问题 更多 >