Scope of a function variable
I have the following function saved as dummy_function.py
def abc():
return q*q
On the Python console, I run
from dummy_function import *
q=4
b=abc()
I get the following error:
NameError: name 'q' is not defined
I understand that even though I have defined q in my current environment, it doesn't belong in the scope of the function abc. My question is how to solve this. I cannot define q in dummy_function. It will be in my current program but I have to run imported customized code on variables in the current program.
python function scope
|
show 4 more comments
I have the following function saved as dummy_function.py
def abc():
return q*q
On the Python console, I run
from dummy_function import *
q=4
b=abc()
I get the following error:
NameError: name 'q' is not defined
I understand that even though I have defined q in my current environment, it doesn't belong in the scope of the function abc. My question is how to solve this. I cannot define q in dummy_function. It will be in my current program but I have to run imported customized code on variables in the current program.
python function scope
5
why not passq
to your function as a parameter?
– Mike Scotty
Nov 23 '18 at 9:14
This is just a raw example. I am passing a data-frame to the imported function but the range of the column value is available only in the current program. So if I say, xyz(df.iloc[:,range]), it says range not defined even though I have passed df as an argument in the function building
– Abhishek Kulkarni
Nov 23 '18 at 9:18
1
raw examples get raw answers. how should we help you if you do not provide a Minimal, Complete, and Verifiable example? your approach still sounds like a bad design choice to me. imported modules should not rely on magical global variables from the main program.
– Mike Scotty
Nov 23 '18 at 9:21
1
Anyway, what you are essentially asking for is dynamic scoping, but python (and pretty much all modern languages) use lexical scope. The sane way of doing this is to pass the values you need as arguments to the function.
– juanpa.arrivillaga
Nov 23 '18 at 9:21
2
what name error? Please provide a Minimal, Complete, and Verifiable example
– juanpa.arrivillaga
Nov 23 '18 at 9:26
|
show 4 more comments
I have the following function saved as dummy_function.py
def abc():
return q*q
On the Python console, I run
from dummy_function import *
q=4
b=abc()
I get the following error:
NameError: name 'q' is not defined
I understand that even though I have defined q in my current environment, it doesn't belong in the scope of the function abc. My question is how to solve this. I cannot define q in dummy_function. It will be in my current program but I have to run imported customized code on variables in the current program.
python function scope
I have the following function saved as dummy_function.py
def abc():
return q*q
On the Python console, I run
from dummy_function import *
q=4
b=abc()
I get the following error:
NameError: name 'q' is not defined
I understand that even though I have defined q in my current environment, it doesn't belong in the scope of the function abc. My question is how to solve this. I cannot define q in dummy_function. It will be in my current program but I have to run imported customized code on variables in the current program.
python function scope
python function scope
edited Nov 23 '18 at 9:48
9769953
1,5881416
1,5881416
asked Nov 23 '18 at 9:12
Abhishek KulkarniAbhishek Kulkarni
1348
1348
5
why not passq
to your function as a parameter?
– Mike Scotty
Nov 23 '18 at 9:14
This is just a raw example. I am passing a data-frame to the imported function but the range of the column value is available only in the current program. So if I say, xyz(df.iloc[:,range]), it says range not defined even though I have passed df as an argument in the function building
– Abhishek Kulkarni
Nov 23 '18 at 9:18
1
raw examples get raw answers. how should we help you if you do not provide a Minimal, Complete, and Verifiable example? your approach still sounds like a bad design choice to me. imported modules should not rely on magical global variables from the main program.
– Mike Scotty
Nov 23 '18 at 9:21
1
Anyway, what you are essentially asking for is dynamic scoping, but python (and pretty much all modern languages) use lexical scope. The sane way of doing this is to pass the values you need as arguments to the function.
– juanpa.arrivillaga
Nov 23 '18 at 9:21
2
what name error? Please provide a Minimal, Complete, and Verifiable example
– juanpa.arrivillaga
Nov 23 '18 at 9:26
|
show 4 more comments
5
why not passq
to your function as a parameter?
– Mike Scotty
Nov 23 '18 at 9:14
This is just a raw example. I am passing a data-frame to the imported function but the range of the column value is available only in the current program. So if I say, xyz(df.iloc[:,range]), it says range not defined even though I have passed df as an argument in the function building
– Abhishek Kulkarni
Nov 23 '18 at 9:18
1
raw examples get raw answers. how should we help you if you do not provide a Minimal, Complete, and Verifiable example? your approach still sounds like a bad design choice to me. imported modules should not rely on magical global variables from the main program.
– Mike Scotty
Nov 23 '18 at 9:21
1
Anyway, what you are essentially asking for is dynamic scoping, but python (and pretty much all modern languages) use lexical scope. The sane way of doing this is to pass the values you need as arguments to the function.
– juanpa.arrivillaga
Nov 23 '18 at 9:21
2
what name error? Please provide a Minimal, Complete, and Verifiable example
– juanpa.arrivillaga
Nov 23 '18 at 9:26
5
5
why not pass
q
to your function as a parameter?– Mike Scotty
Nov 23 '18 at 9:14
why not pass
q
to your function as a parameter?– Mike Scotty
Nov 23 '18 at 9:14
This is just a raw example. I am passing a data-frame to the imported function but the range of the column value is available only in the current program. So if I say, xyz(df.iloc[:,range]), it says range not defined even though I have passed df as an argument in the function building
– Abhishek Kulkarni
Nov 23 '18 at 9:18
This is just a raw example. I am passing a data-frame to the imported function but the range of the column value is available only in the current program. So if I say, xyz(df.iloc[:,range]), it says range not defined even though I have passed df as an argument in the function building
– Abhishek Kulkarni
Nov 23 '18 at 9:18
1
1
raw examples get raw answers. how should we help you if you do not provide a Minimal, Complete, and Verifiable example? your approach still sounds like a bad design choice to me. imported modules should not rely on magical global variables from the main program.
– Mike Scotty
Nov 23 '18 at 9:21
raw examples get raw answers. how should we help you if you do not provide a Minimal, Complete, and Verifiable example? your approach still sounds like a bad design choice to me. imported modules should not rely on magical global variables from the main program.
– Mike Scotty
Nov 23 '18 at 9:21
1
1
Anyway, what you are essentially asking for is dynamic scoping, but python (and pretty much all modern languages) use lexical scope. The sane way of doing this is to pass the values you need as arguments to the function.
– juanpa.arrivillaga
Nov 23 '18 at 9:21
Anyway, what you are essentially asking for is dynamic scoping, but python (and pretty much all modern languages) use lexical scope. The sane way of doing this is to pass the values you need as arguments to the function.
– juanpa.arrivillaga
Nov 23 '18 at 9:21
2
2
what name error? Please provide a Minimal, Complete, and Verifiable example
– juanpa.arrivillaga
Nov 23 '18 at 9:26
what name error? Please provide a Minimal, Complete, and Verifiable example
– juanpa.arrivillaga
Nov 23 '18 at 9:26
|
show 4 more comments
1 Answer
1
active
oldest
votes
You should put a parameter that your function will receive:
def abc(q):
return q*q
Then when you run your function, you should put what number you want the function to execute:
q = 4
print(abc(q))
Or you can do
print(abc(4))
You can also define a default value of q in the abc function
– Norfeldt
Nov 23 '18 at 9:22
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%2f53443625%2fscope-of-a-function-variable%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
You should put a parameter that your function will receive:
def abc(q):
return q*q
Then when you run your function, you should put what number you want the function to execute:
q = 4
print(abc(q))
Or you can do
print(abc(4))
You can also define a default value of q in the abc function
– Norfeldt
Nov 23 '18 at 9:22
add a comment |
You should put a parameter that your function will receive:
def abc(q):
return q*q
Then when you run your function, you should put what number you want the function to execute:
q = 4
print(abc(q))
Or you can do
print(abc(4))
You can also define a default value of q in the abc function
– Norfeldt
Nov 23 '18 at 9:22
add a comment |
You should put a parameter that your function will receive:
def abc(q):
return q*q
Then when you run your function, you should put what number you want the function to execute:
q = 4
print(abc(q))
Or you can do
print(abc(4))
You should put a parameter that your function will receive:
def abc(q):
return q*q
Then when you run your function, you should put what number you want the function to execute:
q = 4
print(abc(q))
Or you can do
print(abc(4))
answered Nov 23 '18 at 9:19
redgermanyredgermany
235
235
You can also define a default value of q in the abc function
– Norfeldt
Nov 23 '18 at 9:22
add a comment |
You can also define a default value of q in the abc function
– Norfeldt
Nov 23 '18 at 9:22
You can also define a default value of q in the abc function
– Norfeldt
Nov 23 '18 at 9:22
You can also define a default value of q in the abc function
– Norfeldt
Nov 23 '18 at 9:22
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%2f53443625%2fscope-of-a-function-variable%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
5
why not pass
q
to your function as a parameter?– Mike Scotty
Nov 23 '18 at 9:14
This is just a raw example. I am passing a data-frame to the imported function but the range of the column value is available only in the current program. So if I say, xyz(df.iloc[:,range]), it says range not defined even though I have passed df as an argument in the function building
– Abhishek Kulkarni
Nov 23 '18 at 9:18
1
raw examples get raw answers. how should we help you if you do not provide a Minimal, Complete, and Verifiable example? your approach still sounds like a bad design choice to me. imported modules should not rely on magical global variables from the main program.
– Mike Scotty
Nov 23 '18 at 9:21
1
Anyway, what you are essentially asking for is dynamic scoping, but python (and pretty much all modern languages) use lexical scope. The sane way of doing this is to pass the values you need as arguments to the function.
– juanpa.arrivillaga
Nov 23 '18 at 9:21
2
what name error? Please provide a Minimal, Complete, and Verifiable example
– juanpa.arrivillaga
Nov 23 '18 at 9:26