首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回由逗号分隔的相同变量。

函数返回由逗号分隔的相同变量。
EN

Stack Overflow用户
提问于 2018-11-16 04:43:18
回答 1查看 95关注 0票数 0

我不明白这个函数返回两个变量的意义,这两个变量是相同的:

代码语言:javascript
复制
def construct_shingles(doc,k,h):
    #print 'antes -> ',doc,len(doc)
    doc = doc.lower()
    doc = ''.join(doc.split(' '))
    #print 'depois -> ',doc,len(doc)
    shingles = {}
    for i in xrange(len(doc)):
        substr = ''.join(doc[i:i+k])
        if len(substr) == k and substr not in shingles:
            shingles[substr] = 1

    if not h:
        return doc,shingles.keys()

    ret = tuple(shingles_hashed(shingles))

    return ret,ret

似乎是多余的,但肯定有一个很好的理由,我只是不明白为什么。也许是因为有两个返回语句?如果“h”为真,它是否返回两个返回语句?调用函数如下所示:

代码语言:javascript
复制
def construct_set_shingles(docs,k,h=False):
    shingles = []
    for i in xrange(len(docs)):
        doc = docs[i]
        doc,sh = construct_shingles(doc,k,h)
        docs[i] = doc
        shingles.append(sh)
    return docs,shingles

代码语言:javascript
复制
def shingles_hashed(shingles):
    global len_buckets
    global hash_table
    shingles_hashed = []
    for substr in shingles:
        key = hash(substr)
        shingles_hashed.append(key)
        hash_table[key].append(substr)
    return shingles_hashed

数据集和函数调用如下所示:

代码语言:javascript
复制
k = 3 #number of shingles

d0 = "i know you"
d1 = "i think i met you"
d2 = "i did that"
d3 = "i did it"
d4 = "she says she knows you"
d5 = "know you personally"
d6 = "i think i know you"
d7 = "i know you personally"

docs = [d0,d1,d2,d3,d4,d5,d6,d7]
docsChange,shingles = construct_set_shingles(docs[:],k)

集线器位置:lsh/LHS

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-16 04:58:50

您的猜测是正确的,关于为什么是return ret,ret,答案是返回语句意味着返回一对相等的值,而不是一个。

它更像是一种编码方式,而不是算法,因为这可以通过其他语法来完成。然而,在某些情况下,这个方法是有利的,例如,如果我们编写

代码语言:javascript
复制
def func(x, y, z):
    ...
    return ret

a = func(x, y, z)
b = func(x, y, z)

那么func将被执行两次。但如果:

代码语言:javascript
复制
def func(x, y, z):
    ...
    return ret, ret

a, b = func(x, y, z)

然后,func只能执行一次,同时能够返回到ab

也是在你的特殊情况下:

如果hfalse,那么程序直到执行到行return doc,shingles.keys()为止,然后construct_set_shingles中的变量docsh分别取docshingles.keys()的值。

否则,省略第一个返回语句,执行第二个返回语句,然后docsh都取相等的值,特别是与tuple(shingles_hashed(shingles))的值相等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53331567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档