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