为什么这段代码不起作用?

时间:2014-03-18 17:33:27

标签: python

def chan(ref, let, mode):
    if mode[0]=="d":
        ref=-ref
    a=ord(let)
    a=a+ref
    let=chr(a)
    return let
ref=1
let="q"
chan(ref, let,"k")
print(let)

当我运行它时,它出现了" q"当我希望它与" r" 我做错了什么,我需要做些什么才能使它发挥作用?

2 个答案:

答案 0 :(得分:6)

您需要将chan()函数的返回值分配回let变量:

let = chan(ref, let,"k")

答案 1 :(得分:0)

当您将变量传递给python函数时,它会将指针的副本传递给与传递给函数的函数参数相同的内存位置。这意味着如果更改传递给函数的对象的属性,那么这些更改将在函数外部持续存在(假设对象是可变的)。但是在函数内部重新分配该指针不会影响函数外部的参数,因为您只是将指针复制(在函数内部)指向不同的内存,这不会影响原始变量。在其他语言执行此操作的意义上,Python既不传递值也不传递引用。有许多文章详细说明了这一点,例如:

http://stupidpythonideas.blogspot.com/2013/11/does-python-pass-by-value-or-by.html

因此,上面的代码不会改变,因为您正在修改函数内的let指针的副本,而不是更改原始指针本身。