user13959056
user13959056

Reputation:

Trouble Understanding Python Scope

I have trouble understanding Python Scope. If you can help, I'll be thankful. This is my code:

def msgCmd(x):
    if x[0] == '/':
        cmd = x[1:len(x)]
        print(cmd)

def Cmd(x):
    if x == "hello":
        print("Hi how can I help you?")
    elif x == "music":
        print("Let's rock!")

while 1:
    inp = input()
    cmd = ''
    msgCmd(inp)
    Cmd(cmd)

I am essentially trying to type in a command using /command and get two results. One being only the command name following slash and the other being a result of what it did. Say, I enter /music. I am expecting 'music' as the first result and 'Let's rock!' as the next. But, somehow I am failing to retrieve the second desired result, possibly due to a Python Scope problem.

Also, please explain why this code works as it should when I add global cmd at the top of the function msgCmd(x) like this:

def msgCmd(x):
    global cmd
    if x[0] == '/':
        cmd = x[1:len(x)]
        print(cmd)

And, why doesn't it run as desired when global cmd added here outside function:

global cmd

def msgCmd(x):
    if x[0] == '/':
        cmd = x[1:len(x)]
        print(cmd)

or here within the while loop:

while 1:
    inp = input()
    cmd = ''
    msgCmd(inp)
    global cmd
    Cmd(cmd)

Upvotes: 0

Views: 52

Answers (1)

TNTzx
TNTzx

Reputation: 527

return the value of msgCmd first:

def msgCmd(x):
    if x[0] == '/':
        cmd = x[1:len(x)]

    return cmd # right here

then get the value of that function so you can pass that value to another function:

    ...
    cmd_str = msgCmd(inp)
    Cmd(cmd_str)

Upvotes: 1

Related Questions