返回后在函数中定义变量

时间:2017-07-13 03:32:40

标签: python pandas lambda

我在Pandas数据框中扼杀了一些词,并具有以下功能:

progress = 0

def stem(x):
    end = time.time()
    tokens = word_tokenize(x)
    global progress
    progress += 1
    sys.stdout.write('\r {} percent, {} position, {} per second '.format(float(progress / len(articles)), 
                                                             progress, progress / (end - start)))

    return [stemmer.stem(e) for e in tokens]

我调用该功能的方式是这样的:

start = time.time()
articles['stems'] = articles.content.apply(lambda x: stem(x))

其中articles.content是一个大字符串列。当前编写的sys.stdout.write中的最后一个变量计算每秒迭代的平均行数。我想做的是计算每一行的瞬时速率。挑战在于,在我返回词干后,必须定义start

我尝试在lambda表达式中定义一个新变量,然后了解到这是不可能的。我知道return [stemmer.stem...], start = time.time()会在数据框的值中包含start,这显然是我不想要的。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

我明白了:我可以将词干分配给变量,重新定义start并使用词干字返回变量:

进度= 0 start = time.time()

def stem(x):
    end = time.time()
    tokens = word_tokenize(x)
    global start
    global progress
    progress += 1
    stems = [stemmer.stem(word) for word in tokens]
    end = time.time()
    sys.stdout.write('\r {} percent, {} position, {} per second '.format(str(float(progress / len(articles))), 
                                                         str(progress), (1 / (end - start))))   
    start = time.time()
    return stems

start = time.time()
stem(strings)