1
import re


value = eval("'Hello「World」'")
c = [
    "g = re.search('.*「(.*)」', value, re.IGNORECASE)",
    "print(value)",
    "value = g.group(1)",
    "print(value)"
]
if c is not None:
    for d in c:
        exec(d)


def test():
    value2 = eval("'Hello「World」'")
    c2 = [
        "g2 = re.search('.*「(.*)」', value2, re.IGNORECASE)",
        "print(value2)",
        "value2 = g2.group(1)",
        "print(value2)"
    ]
    if c2 is not None:
        for d2 in c2:
            exec(d2)

test()

Expect result:

Hello「World」
World
Hello「World」
World

Actual result:

Hello「World」
World
Hello「World」
Hello「World」

I am running in Python 3.6.2. My question is why cannot exec set the value when it is inside the function?

However, it can set on a new variable.

def test2():
    value2 = eval("'Hello「World」'")
    c2 = [
        "g2 = re.search('.*「(.*)」', value2, re.IGNORECASE)",
        "print(value2)",
        "value3 = g2.group(1)",
        "print(value3)"
    ]
    if c2 is not None:
        for d2 in c2:
            exec(d2)

test2()

Result:

Hello「World」
World
Hello「World」
World

How can I make test() change value2 inside exec?

Joshua
  • 5,901
  • 2
  • 32
  • 52

0 Answers0