Skip to content

Functions defined in PythonREPL aren't accessible to other functions due to Locals != Globals #4

@nasirus

Description

@nasirus

See this replit for a demonstration of what the problem seems to be
https://replit.com/@XidaRen/Test-Exec-Problem#main.py

See this stack overflow question for my documentation of my explorations
https://stackoverflow.com/questions/75970939/python-exec-fails-to-define-function-when-locals-and-globals-are-different

It seems that Exec can't have different Locals and Globals or else using function definitions would fail.

Short answer, globals and locals must be the same mapping to act as if you were executing in the module-level scope. If you pass two different mappings, it is executed like a class definition. Just as if you define a = classvar in a class block, methods won't have access to a
https://stackoverflow.com/questions/46354011/python-variable-defined-by-exec-not-defined-in-a-function-scope
(comment by juanpa.arrivillaga)

Symptoms:
Please copy and paste this code into a Python environment to use it.
Observation: name 'is_prime' is not defined
Thought:My apologies for the confusion. Here is a Python function that should give you the sum of the first N prime numbers:

{
"action": "Python REPL",
"action_input": "def is_prime(n):\n if n <= 1:\n return False\n for i in range(2, int(n**0.5) + 1):\n if n % i == 0:\n return False\n return True\n\ndef sum_first_n_primes(n):\n count = 0\n num = 2\n total = 0\n while count < n:\n if is_prime(num):\n total += num\n count += 1\n num += 1\n return total\n\nprint(sum_first_n_primes(10)) # Example usage"
}
Please copy and paste this code into a Python environment to use it.
Observation: name 'is_prime' is not defined
Thought:My apologies for the confusion. Here is a Python function that should give you the sum of the first N prime numbers:

{
"action": "Python REPL",
"action_input": "def is_prime(n):\n if n <= 1:\n return False\n for i in range(2, int(n**0.5) + 1):\n if n % i == 0:\n return False\n return True\n\ndef sum_first_n_primes(n):\n count = 0\n num = 2\n total = 0\n while count < n:\n if is_prime(num):\n total += num\n count += 1\n num += 1\n return total\n\nprint(sum_first_n_primes(10)) # Example usage"
}
Please copy and paste this code into a Python environment to use it.
Observation: name 'is_prime' is not defined

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions