I use Python CGI. I cannot call a function before it is defined.
In Oracle PL/SQL there was this trick of "forward declaration": naming all the functions on top so the order of defining doesn't matter.
Is there such a trick in Python as well?
example:
def do_something(ds_parameter): helper_function(ds_parameter) .... def helper_function(hf_parameter): .... def main(): do_something(my_value) main()
David is right, my example is wrong. What about:
<start of cgi-script> def do_something(ds_parameter): helper_function(ds_parameter) .... def print_something(): do_something(my_value) print_something() def helper_function(hf_parameter): .... def main() .... main()
Can I "forward declare" the functions at the top of the script?
All functions must be defined before any are used. However, the functions can be defined in any order, as long as all are defined before any executable code uses a function.
Python is a dynamic programming language and the interpreter always takes the state of the variables (functions,...) as they are at the moment of calling them. You could even redefine the functions in some if-blocks and call them each time differently. That's why you have to define them before calling them.
Although in Python you can call the function at the bottom of your program and it will run (as we have done in the examples above), many programming languages (like C++ and Java) require a main function in order to execute.
All functions must be defined before any are used.
However, the functions can be defined in any order, as long as all are defined before any executable code uses a function.
You don't need "forward declaration" because all declarations are completely independent of each other. As long as all declarations come before all executable code.
Are you having a problem? If so, please post the code that doesn't work.
In your example, print_something()
is out of place.
The rule: All functions must be defined before any code that does real work
Therefore, put all the statements that do work last.
An even better illustration of your point would be:
def main(): print_something() .... def do_something(ds_parameter): helper_function(ds_parameter) .... def print_something(): do_something(my_value) def helper_function(hf_parameter): .... main()
In other words, you can keep your definition of main()
at the top, for editing convenience -- avoiding frequent scrolling, if most of the time is spent editing main.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With