Function returning same variable separated by a comma
I don't understand the point of this function returning two variables, which are the same:
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
Seems redundant, but there must be a good reason for it, I just don't see why. Perhaps because there are two return statements? If 'h' is true, does it return both return statements? The calling functions look like:
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
and
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
The data set and function call look like:
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)
The github location: lsh/LHS
python function return-value return-type lsh
add a comment |
I don't understand the point of this function returning two variables, which are the same:
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
Seems redundant, but there must be a good reason for it, I just don't see why. Perhaps because there are two return statements? If 'h' is true, does it return both return statements? The calling functions look like:
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
and
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
The data set and function call look like:
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)
The github location: lsh/LHS
python function return-value return-type lsh
1
Not all you find on github will make sense.
– Merlin
Nov 16 '18 at 4:52
add a comment |
I don't understand the point of this function returning two variables, which are the same:
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
Seems redundant, but there must be a good reason for it, I just don't see why. Perhaps because there are two return statements? If 'h' is true, does it return both return statements? The calling functions look like:
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
and
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
The data set and function call look like:
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)
The github location: lsh/LHS
python function return-value return-type lsh
I don't understand the point of this function returning two variables, which are the same:
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
Seems redundant, but there must be a good reason for it, I just don't see why. Perhaps because there are two return statements? If 'h' is true, does it return both return statements? The calling functions look like:
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
and
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
The data set and function call look like:
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)
The github location: lsh/LHS
python function return-value return-type lsh
python function return-value return-type lsh
edited Nov 16 '18 at 13:37
spacedustpi
asked Nov 16 '18 at 4:43
spacedustpispacedustpi
1199
1199
1
Not all you find on github will make sense.
– Merlin
Nov 16 '18 at 4:52
add a comment |
1
Not all you find on github will make sense.
– Merlin
Nov 16 '18 at 4:52
1
1
Not all you find on github will make sense.
– Merlin
Nov 16 '18 at 4:52
Not all you find on github will make sense.
– Merlin
Nov 16 '18 at 4:52
add a comment |
1 Answer
1
active
oldest
votes
Your guess is correct, and regarding why return ret,ret
, the answer is that return statement is meant to return a pair of equalling values rather than one.
It is more of a style of coding rather than algorithm, because this can be done by other syntaxes. However this one is advantageous in some cases, e.g. if we write
def func(x, y, z):
...
return ret
a = func(x, y, z)
b = func(x, y, z)
then func
would be executed twice. But if:
def func(x, y, z):
...
return ret, ret
a, b = func(x, y, z)
then func
can be executed only once while being able to return to both a
and b
Also in your particular case:
If h
is false
then the program until executes until the line return doc,shingles.keys()
, and then the variables doc
and sh
in construct_set_shingles
respectively take values of doc
and shingles.keys()
.
Otherwise, the first return statement is omitted, the second one is executed and then both doc
and sh
take equal values, particularly equalling to the value of tuple(shingles_hashed(shingles))
The extra return statement threw me off. I thought it was possibly a mistake, as the code actually does throw an 'out of index' error, when I set 'h' to true. But I see now that it is definitely unrelated.
– spacedustpi
Nov 16 '18 at 13:39
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331567%2ffunction-returning-same-variable-separated-by-a-comma%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Your guess is correct, and regarding why return ret,ret
, the answer is that return statement is meant to return a pair of equalling values rather than one.
It is more of a style of coding rather than algorithm, because this can be done by other syntaxes. However this one is advantageous in some cases, e.g. if we write
def func(x, y, z):
...
return ret
a = func(x, y, z)
b = func(x, y, z)
then func
would be executed twice. But if:
def func(x, y, z):
...
return ret, ret
a, b = func(x, y, z)
then func
can be executed only once while being able to return to both a
and b
Also in your particular case:
If h
is false
then the program until executes until the line return doc,shingles.keys()
, and then the variables doc
and sh
in construct_set_shingles
respectively take values of doc
and shingles.keys()
.
Otherwise, the first return statement is omitted, the second one is executed and then both doc
and sh
take equal values, particularly equalling to the value of tuple(shingles_hashed(shingles))
The extra return statement threw me off. I thought it was possibly a mistake, as the code actually does throw an 'out of index' error, when I set 'h' to true. But I see now that it is definitely unrelated.
– spacedustpi
Nov 16 '18 at 13:39
add a comment |
Your guess is correct, and regarding why return ret,ret
, the answer is that return statement is meant to return a pair of equalling values rather than one.
It is more of a style of coding rather than algorithm, because this can be done by other syntaxes. However this one is advantageous in some cases, e.g. if we write
def func(x, y, z):
...
return ret
a = func(x, y, z)
b = func(x, y, z)
then func
would be executed twice. But if:
def func(x, y, z):
...
return ret, ret
a, b = func(x, y, z)
then func
can be executed only once while being able to return to both a
and b
Also in your particular case:
If h
is false
then the program until executes until the line return doc,shingles.keys()
, and then the variables doc
and sh
in construct_set_shingles
respectively take values of doc
and shingles.keys()
.
Otherwise, the first return statement is omitted, the second one is executed and then both doc
and sh
take equal values, particularly equalling to the value of tuple(shingles_hashed(shingles))
The extra return statement threw me off. I thought it was possibly a mistake, as the code actually does throw an 'out of index' error, when I set 'h' to true. But I see now that it is definitely unrelated.
– spacedustpi
Nov 16 '18 at 13:39
add a comment |
Your guess is correct, and regarding why return ret,ret
, the answer is that return statement is meant to return a pair of equalling values rather than one.
It is more of a style of coding rather than algorithm, because this can be done by other syntaxes. However this one is advantageous in some cases, e.g. if we write
def func(x, y, z):
...
return ret
a = func(x, y, z)
b = func(x, y, z)
then func
would be executed twice. But if:
def func(x, y, z):
...
return ret, ret
a, b = func(x, y, z)
then func
can be executed only once while being able to return to both a
and b
Also in your particular case:
If h
is false
then the program until executes until the line return doc,shingles.keys()
, and then the variables doc
and sh
in construct_set_shingles
respectively take values of doc
and shingles.keys()
.
Otherwise, the first return statement is omitted, the second one is executed and then both doc
and sh
take equal values, particularly equalling to the value of tuple(shingles_hashed(shingles))
Your guess is correct, and regarding why return ret,ret
, the answer is that return statement is meant to return a pair of equalling values rather than one.
It is more of a style of coding rather than algorithm, because this can be done by other syntaxes. However this one is advantageous in some cases, e.g. if we write
def func(x, y, z):
...
return ret
a = func(x, y, z)
b = func(x, y, z)
then func
would be executed twice. But if:
def func(x, y, z):
...
return ret, ret
a, b = func(x, y, z)
then func
can be executed only once while being able to return to both a
and b
Also in your particular case:
If h
is false
then the program until executes until the line return doc,shingles.keys()
, and then the variables doc
and sh
in construct_set_shingles
respectively take values of doc
and shingles.keys()
.
Otherwise, the first return statement is omitted, the second one is executed and then both doc
and sh
take equal values, particularly equalling to the value of tuple(shingles_hashed(shingles))
answered Nov 16 '18 at 4:58
Mr.KMr.K
847
847
The extra return statement threw me off. I thought it was possibly a mistake, as the code actually does throw an 'out of index' error, when I set 'h' to true. But I see now that it is definitely unrelated.
– spacedustpi
Nov 16 '18 at 13:39
add a comment |
The extra return statement threw me off. I thought it was possibly a mistake, as the code actually does throw an 'out of index' error, when I set 'h' to true. But I see now that it is definitely unrelated.
– spacedustpi
Nov 16 '18 at 13:39
The extra return statement threw me off. I thought it was possibly a mistake, as the code actually does throw an 'out of index' error, when I set 'h' to true. But I see now that it is definitely unrelated.
– spacedustpi
Nov 16 '18 at 13:39
The extra return statement threw me off. I thought it was possibly a mistake, as the code actually does throw an 'out of index' error, when I set 'h' to true. But I see now that it is definitely unrelated.
– spacedustpi
Nov 16 '18 at 13:39
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53331567%2ffunction-returning-same-variable-separated-by-a-comma%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Not all you find on github will make sense.
– Merlin
Nov 16 '18 at 4:52