As is, it does absolutely nothing. It is a type annotation for the main function that simply states that this function returns None. Type annotations were introduced in Python 3.5 and are specified in PEP 484. Annotations for the return value of a function use the symbol -> followed by a type. It is completely optional and if you removed it, nothing would change. This will have absolutely no ...
The advantage of def file is that, it helps you to maintain the backword compatibility with the already realsed dlls. i.e it maintains the ordinal numbers for apis. Suppose you add a new api in the dll, then the linker looks at your .def file genearate the ordinal number for the ne wapi such that the ordinal numbers for the old apis are intact.
Variables inside def main are local, while those outside it are global. This may introduce a few bugs and unexpected behaviors. But, you are not required to write a main() function and call it inside an if statement. I myself usually start writing small throwaway scripts without any kind of function.
I would like to return two values from a function in two separate variables. What would you expect it to look like on the calling end? You can't write a = select_choice(); b = select_choice() because that would call the function twice. Values aren't returned "in variables"; that's not how Python works. A function returns values (objects). A variable is just a name for a value in a given ...
However, variables defined using the keyword "def" are treated as local variables, that is, local to this one script. Variables without the "def" in front of them are stored in a so called binding upon first use. You can think of the binding as a general storage area for variables and closures that need to be available "between" scripts.
def add(x,y): return x+ y # calling this will require only x and y add(2,3) # 5 If we want to add as many arguments as we may want, we shall just use *args which shall be a list of more arguments than the number of formal arguments that you previously defined (x and y).
def can be used to define a method, and this is fastest option. @A.Karimi For fun: on 2.12, even eq even. @animageofmine Scala compiler can try to inline methods. There is @inline attribute for this. But it can't inline functions because function call is a call to virtual apply method of a function object.
For a language-agnostic consideration of the design decision, see What is the advantage of having this/self pointer mandatory explicit?. To close debugging questions where OP omitted a self parameter for a method and got a TypeError, use TypeError: method () takes 1 positional argument but 2 were given instead. If OP omitted self. in the body of the method and got a NameError, consider How can ...