Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Funnction保存previus调用的结果,并使用它代替参数_Python - Fatal编程技术网

Python Funnction保存previus调用的结果,并使用它代替参数

Python Funnction保存previus调用的结果,并使用它代替参数,python,Python,你不必理解整个代码——问题就在一行 对不起,非英语单词 这是完整的代码:导入、参数、函数、函数调用,正常工作: import pymorphy2 import re def lemmatization(string, expression, morh): string = string.lstrip() print("1 ", string, "\n") lemmatised_string = [] for line in string.splitlines()

你不必理解整个代码——问题就在一行

对不起,非英语单词

这是完整的代码:导入、参数、函数、函数调用,正常工作

import pymorphy2
import re

def lemmatization(string, expression, morh):
    string = string.lstrip()
    print("1 ", string, "\n")
    lemmatised_string = []
    for line in string.splitlines():
        line = expression.sub("", line).split()
        for word in line:
            m = morph.parse(word)
            if m:
                m = m[0]
                if m.tag.POS not in ("NUMR", "PREP", "CONJ", "PRCL", "INTJ"):
                    lemmatised_string.append(m.normal_form)   
    return lemmatised_string

data = """ Я вышел не пойми откуда и зашел к собакам """
punctuation = re.compile("[\\d\\{}]".format("\\".join(string.punctuation)))
morph = pymorphy2.MorphAnalyzer()

lemmatized_string = lemmatization(data, punctuation, morph)
该函数正常工作,并返回一个列表:
['int'、'frutch'、'frutch'、'frutch'、'frutch'、'frutch'、'frutch']

但我希望它像一句话一样返回这个列表:

“а

因此,在返回之前添加了一行:

def lemmatization(string, expression, morh):
    string = string.lstrip()
    print("1 ", string, "\n")
    lemmatised_string = []
    for line in string.splitlines():
        line = expression.sub("", line).split()
        for word in line:
            m = morph.parse(word)
            if m:
                m = m[0]
                if m.tag.POS not in ("NUMR", "PREP", "CONJ", "PRCL", "INTJ"):
                    lemmatised_string.append(m.normal_form)  

    lemmatised_string = " ".join(lemmatized_string) #####<- THIS LINE
    return lemmatised_string

参数
data
仍然相同,没有更改!但是函数每次调用都返回不同的结果!!函数本身以某种方式保存了上一次调用的结果!发生了什么?

在命名变量时应该更加小心,这可能会造成混淆或导致错误,从而很难调试。
在本例中,您似乎加入了
lemmatized\u string
,我假设它是在脚本中的某个地方定义的

你能替换那些线路吗

lemmatised_string = " ".join(lemmatized_string) 
return lemmatised_string
为此:

return " ".join(lemmatised_string)
完整代码:

import string
import re
import pymorphy2

def lemmatization(my_string, expression, morh):
    my_string = my_string.lstrip()
    print("1 ", my_string, "\n")
    lemmatised_string = []
    for line in my_string.splitlines():
        line = expression.sub("", line).split()
        for word in line:
            m = morph.parse(word)
            if m:
                m = m[0]
                if m.tag.POS not in ("NUMR", "PREP", "CONJ", "PRCL", "INTJ"):
                    lemmatised_string.append(m.normal_form)  

    return " ".join(lemmatised_string)

#data = """ Я вышел не пойми откуда и зашел к собакам """
data = " Some random ASCII string. "

punctuation = re.compile("[\\d\\{}]".format("\\".join(string.punctuation)))
morph = pymorphy2.MorphAnalyzer()

lemmatized_string1 = lemmatization(data, punctuation, morph)
lemmatized_string2 = lemmatization(data, punctuation, morph)

print(lemmatized_string1)
print(lemmatized_string2)
应打印:

1  Some random ASCII string.

1  Some random ASCII string.

some random ascii string
some random ascii string

您的代码对我来说很好(python 2.7)。你能把你第二次调用柠檬化的部分包括进去吗?@t.m.adam我刚刚重新运行了我第一次调用的单元格。只是再跑一次,那没用:/我不明白。可能是关于西里尔文的编码,我无法在windows终端中打印您的字符串。如果没有,你能将我帖子中的代码复制粘贴到一个新文件中,然后再试一次吗?好的,我看到你的例子很好用。剩下的我自己学习用。塔克斯
1  Some random ASCII string.

1  Some random ASCII string.

some random ascii string
some random ascii string