Posts: 69
Threads: 34
Joined: Sep 2017
Feb-14-2018, 09:03 AM
(This post was last modified: Feb-14-2018, 09:03 AM by digitalmatic7.)
I've heard from multiple sources I should try to avoid using global variables, since it's probably a sign of broken / badly written code. Here's an example of what I need to do:
list1 = None
list2 = None
list3 = None
def test():
global list1
list1 = [1, 2, 3, 4, 5]
def test2():
global list2
list2 = [6, 7, 8, 9, 10]
def test3():
global list3
list3 = [11, 12, 13, 14, 15]
test()
test2()
test3()
final_list = list1 + list2 + list3
print()
print(final_list)
'''
in the full script LOTS of actions will be taken inside each function to generate the lists,
this code is just for a very basic example of what I plan to do.
''' I'm aware of 'return' and 'function parameters', I've been researching them in my free time today, but I can't get them to replace global variables in this situation.
Posts: 2,122
Threads: 10
Joined: May 2017
def test():
return [1, 2, 3, 4, 5]
def test2():
return [6, 7, 8, 9, 10]
def test3():
return [11, 12, 13, 14, 15]
final_list = test1() + test2() + test3()
print()
print(final_list)
Posts: 8,152
Threads: 160
Joined: Sep 2016
Feb-14-2018, 09:35 AM
(This post was last modified: Feb-14-2018, 09:35 AM by buran.)
to elaborate further, based on DeaD_EyE's exmaple:
you can also assign what a function has returned to a variable to preserve and use latter in the code
my_list = test()
Posts: 54
Threads: 0
Joined: Jan 2018
Feb-14-2018, 09:39 AM
(This post was last modified: Feb-14-2018, 09:59 AM by ka06059.)
if we replace the outside list from None to []... then append it inside function, should work the same. no parameters,return or global keywords needed. list id also preserved. jz repeat the same for test2() and test3(). did this in python 2.7 just in case error occured
list = []
def test():
for a in range(1,6):
list.append(a)
test() Output: list = [1,2,3,4,5]
swallow osama bin laden
Posts: 8,152
Threads: 160
Joined: Sep 2016
OP wants to avoid using global variable (good).
Your code is poor because it uses global variable, change it using mutability of list and uses built-in function list() as variable name. Don't do this...
Posts: 54
Threads: 0
Joined: Jan 2018
thx, will keep in mind on that variabe name
if preserving id is the reason im using global variable...
OP uses global variable , yet the list id changed , same goes to my_list = test()
so either way we end up using global variable?
swallow osama bin laden
Posts: 8,152
Threads: 160
Joined: Sep 2016
the idea is to keep namespaces separated and the scope of variables as narrow as possible. in the OP original code and your code you mix the global module namespace and the local function namespace
Posts: 69
Threads: 34
Joined: Sep 2017
Feb-14-2018, 10:09 PM
(This post was last modified: Feb-14-2018, 10:09 PM by digitalmatic7.)
(Feb-14-2018, 09:29 AM)DeaD_EyE Wrote: def test():
return [1, 2, 3, 4, 5]
def test2():
return [6, 7, 8, 9, 10]
def test3():
return [11, 12, 13, 14, 15]
final_list = test1() + test2() + test3()
print()
print(final_list)
I appreciate the help once again, DeaD_EyE  !
I think I understand 'return' well enough to use it in my projects now.
Part of my confusion was passing multiple objects into a single return, then combining them outside the function, but it seems easy in this case (multiple lists I want to combine). I'm still not 100% sure how to return different object types, like for example a string and a list through return, because then it's like they're combined into a single variable when you call the function.
Is the rule to only return 1 kind of data per function?
def test1():
link_list1 = [1, 2, 3, 4, 5]
link_list2 = [6, 7, 8, 9, 10]
link_list3 = [11, 12, 13, 14, 15]
return link_list1 + link_list2 + link_list3
def test2():
link_list4 = [16, 17, 18, 19, 20]
link_list5 = [21, 22, 23, 24, 25]
link_list6 = [26, 27, 28, 29, 30]
return link_list4 + link_list5 + link_list6
final_list = test1() + test2()
print()
print(final_list) This forum is the best, its helped me overcome all the brick walls I've hit so far, you guys are amazing.
Posts: 8,152
Threads: 160
Joined: Sep 2016
you can return anything (i.e. any object), incl. some complex data structure like list/tuple of mixed element types, or dict, etc.
Posts: 2,122
Threads: 10
Joined: May 2017
Feb-15-2018, 09:32 AM
(This post was last modified: Feb-15-2018, 09:33 AM by DeaD_EyE.)
You can return everything:
def foo():
return {}, 'Foo', 42, 1337.13, [], () Implicit all arguments are packed into a tuple.
Afterwards you can unpack the objects.
Dict, String, Integer, Float, List, Tuple = foo() Now the names refer to the objects.
|