Posts: 44
Threads: 17
Joined: Jan 2017
Hi guys,
During my undergraduation I wrote a program in MatLab. This program have functions separated in different files that are called in the main file. I want to pass the code to Python 3.5.2.
My program read a huge data base recorded with sensors installed on airplanes. I load this data base in the main program and every column is stored in vectors that are global variables. That way the functions can access the values without necessity to load the data base again.
The problem is that every explanation that I read, showed which I need to change the value of a global variable when I call it. For example:
def func1():
global myGlobal
myGlobal = 42 But I want to do something like that:
def func1():
global myGlobal
local = myGlobal
# do any math which I need in this function with the "local" variable I appreciate all help with this question.
Posts: 7,316
Threads: 123
Joined: Sep 2016
Do not use global
You give argument to function and return value out.
Posts: 2,342
Threads: 62
Joined: Sep 2016
I don't quite understand the question. Can you show the problem(s) that arise from not being able to do what you want to?
Posts: 44
Threads: 17
Joined: Jan 2017
Jan-11-2017, 09:50 PM
(This post was last modified: Jan-11-2017, 10:08 PM by Felipe.)
(Jan-11-2017, 06:51 PM)snippsat Wrote: Do not use global
You give argument to function and return value out.
Well that's a way, but some functions has a lots of arguments.
Using global I can simplify my code and avoid atributions errors.
(Jan-11-2017, 07:40 PM)micseydel Wrote: I don't quite understand the question. Can you show the problem(s) that arise from not being able to do what you want to?
Ok, I wrote this simple code to illustrate the problem.
Here's my main file:
#!/usr/bin/env python3
import numpy as np
from function import fwd
global I
I = 90
result = fwd()
print(result) My function "fwd" are in another file. This is the function code:
#!/usr/bin/env python3
def fwd():
global I
J = 10
K = I + J
return [K] When I try to run I receive this error:
Error: " NameError: name 'I' is not defined "
Basically, I want my program to call different functions, that can use the globals to do the math which I need to calculate different physics properties.
Thanks for the help.
Posts: 7,316
Threads: 123
Joined: Sep 2016
#!/usr/bin/env python3
import numpy as np
from function import fwd
global I # Make no sense since I is in global namespace
I = 90 # Is global
result = fwd()
print(result) Here how you do it.
#bar.py
import numpy as np
from foo import fwd
I = 90
result = fwd(I)
print(result) #foo.py
def fwd(I):
J = 10
K = I + J
return [K]
if __name__ == '__main__':
# Test this will not run on import
I = 90
print(fwd(I)) Running bar.py :
λ python bar.py
[100] Quote:Using global I can simplify my code and avoid atributions errors.
No,that not an excuse at all for using stupid global.
global destroy the whole point of functions,
which is keeping code local to function and not mix in with stuff in global namespace.
If it to difficult with function,using class is the next step.
Posts: 2,342
Threads: 62
Joined: Sep 2016
@Felipe: you don't need the global keyword for that example, and I'm no expert on that keyword but I think it just makes it global to the file, no farther. You can simply import the variable into the other file (again, no need for the global keyword).
Posts: 44
Threads: 17
Joined: Jan 2017
Jan-11-2017, 11:07 PM
(This post was last modified: Jan-11-2017, 11:13 PM by Felipe.)
(Jan-11-2017, 10:45 PM)snippsat Wrote: Using global I can simplify my code and avoid atributions errors.
No,that not an excuse at all for using stupid global.
global destroy the whole point of functions,
which is keeping code local to function and not mix in with stuff in global namespace.
If it to difficult with function,using class is the next step. OK, thanks for the help.
Globals are really common in MatLab and I wondering if in Python exist similar way to work with that.
As I can see, your suggestion is to work with functions like in C. It's a little bit more complicate to adapt my program, but I want to use Python, so I will try.
(Jan-11-2017, 10:53 PM)micseydel Wrote: @Felipe: you don't need the global keyword for that example, and I'm no expert on that keyword but I think it just makes it global to the file, no farther. You can simply import the variable into the other file (again, no need for the global keyword).
Oh, really, only for the file?
You can give me a short example from what you mean with "import the variable into the other file"? It's different from use arguments into functions?
Thanks.
Posts: 2,342
Threads: 62
Joined: Sep 2016
(Jan-11-2017, 11:07 PM)Felipe Wrote: You can give me a short example from what you mean with "import the variable into the other file"? It's different from use arguments into functions? They are different, but looking more closely, you can't do it because the files would have to import from each other.
Is I a variable or a constant? Things are hairy if it's a variable. If it's just a constant, you can keep it in a separate file for constants if it's needed by multiple things (or needs to be easy to change) and if it's just needed in one place, that's probably where it should live unless there's a good reason to put it somewhere else.
Posts: 44
Threads: 17
Joined: Jan 2017
(Jan-12-2017, 04:35 PM)micseydel Wrote: (Jan-11-2017, 11:07 PM)Felipe Wrote: You can give me a short example from what you mean with "import the variable into the other file"? It's different from use arguments into functions? They are different, but looking more closely, you can't do it because the files would have to import from each other.
Is I a variable or a constant? Things are hairy if it's a variable. If it's just a constant, you can keep it in a separate file for constants if it's needed by multiple things (or needs to be easy to change) and if it's just needed in one place, that's probably where it should live unless there's a good reason to put it somewhere else.
Hi,
The values are constants. Some like I are constants with integer values, others are vectors with N positions and float values.
For example, I = 90 is a constant that means the inclination of the magnetic field in degrees, X = 1, 1.2, 1.4, 1.6, 1.8... is a vector with positions of measure in kilometers.
If I can write something like a function or structure, which I can call in the main program to access the values and do the math that I need, it's fine.
The problem of use arguments is because some functions call another functions. It obligate me to write functions that have many arguments. I'm concerning about the efficiency too, because my program invert a problem with many dimension using PSO. So the computational cost can be a problem.
|