Python Forum
common code, def a function vs exec() a string
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
common code, def a function vs exec() a string
#1
in a long loop i have a big series of tests, some being multi-level nested if statements that do breaks to break out of that long loop. they are located in the upper part of the loop right after a cloud API operation. i need to duplicate these exact same tests in the lower part of the loop after another slightly different cloud API operation. i can't really put these in a "do twice" loop because of the diversity of surrounding code. so i was thinking of putting them in a function so i have just one copy of that code, but this means passing a long bunch of variables to the function.

i wish there was a way to run some common section of code in the same local context so that it has access to the same local (and global) variable space. it would be nice to have a way, in a function, to make its local (and global) variable space be that of one or two dictionaries passed to the function for such purpose.

can i just put all that code in a triple-quoted literal and use exec() on it, twice?
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#2
If you make an example, I could better understand what your issue is.
Reply
#3
documentation of the exec() builtin function describes passing it either a string (i've done that before) or a code object. what is a code object and how do i make one?

the short explanation is the i need to run some code that is written once and do that run of it in two places. this code also needs to run in the same context (sees all the same namespace. normal functions don't do this; they create a new context. so i need a way to run that block of code from 2 different places while keeping it in the same context.

i tried it; it doesn't work. a break done inside exec() where the exec() is in a loop does not exit that loop. the error message said break was done not in a loop,
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#4
OK, I understand
Reply
#5
i do use exec() to process config files. that lets me put dynamic code in the config file from simple things like:
howmanytimes = 2**32
to more complex code that figures out config parameters based on other information sources. it gets the local namespace back from exec() and deletes key '__builtins__' from that dictionary. it then hangs on to that dictionary for config settings or sets up things, sooner, such as opening files.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#6
OH, that sounds complicated.
Reply
#7
it's rather simple. you know where the file is. read the whole thing into a string. create an empty dictionary. call exec() passing the string and empty dictionary. del thatdict['__builtins__'] (exec() added it). now you have a dictionary of what variables that config file assigned as locals.
Tradition is peer pressure from dead people

What do you call someone who speaks three languages? Trilingual. Two languages? Bilingual. One language? American.
Reply
#8
Ok, I will try tommorrow.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Python code for Longest Common Subsequence Bolt 3 951 Sep-22-2023, 08:09 AM
Last Post: Bolt
  Changing a string value to a numerical value using python code and a lamda function Led_Zeppelin 6 1,609 Jul-05-2022, 11:29 PM
Last Post: deanhystad
  Convert a string to a function mikepy 8 2,519 May-13-2022, 07:28 PM
Last Post: mikepy
  a function common to methods of a class Skaperen 7 2,584 Oct-04-2021, 07:07 PM
Last Post: Skaperen
  How to avoid exec(), globals(), locals(), eval() paul18fr 10 5,034 Apr-21-2021, 05:53 PM
Last Post: snippsat
  exec in a function paul18fr 6 3,381 Apr-19-2021, 11:10 AM
Last Post: paul18fr
  Putting code into a function breaks its functionality, though the code is identical! PCesarano 1 1,993 Apr-05-2021, 05:40 PM
Last Post: deanhystad
  exec + subprocess = UnboundLocalError paul18fr 6 3,504 Feb-04-2021, 06:27 AM
Last Post: Gribouillis
  exec() in class, NameError niski1996 6 3,974 Apr-20-2020, 07:14 PM
Last Post: niski1996
  Is this use of exec pythonic? psolar 1 1,837 Feb-07-2020, 12:23 PM
Last Post: buran

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020