python的函数怎么使用传递引用的方式?

我的理解是数据肯定是在内存中,而变量名是这个地址的代名词,t就应该是这个带名词,在函数调用前和调用后函数的参数(这个不知道叫什么我的意思是c语言中的形参和实参)都是同一段地址的代名词。

不知道在python,是否是这样理解的。 终于800帖子了。
不知道你在说什么。
“引用”,“代名词”什么的,本质上就是指针
List本身也就是一个指针,你用C可以做一个List结构出来。只不过python里面的指针不是那么明显存在的罢了
比如[1,'6','ftg']
他肯定有一个入口地址,当你把它作为一个参数传给别人的时候,实际上是把那个指向入口地址的指针传了过去,然后对方根据入口地址可以把整个list结构读取出来
严格到汇编的层次,跟没就没有什么“传值”的概念,操作数都是地址,就算是常量也是先扔到一个寄存器然后传寄存器名(寄存器名不还是地址吗)

所以,没有必要追究什么到底是传值、传引用还是穿指针,这些不过都是假象。你只要知道能把“那个东西”传过去,然后得到一个“这个东西”就可以了

python中是高级抽象,变量名不等于地址,一个list常量你都可以传,指针都是隐含的。记住python中所有的东西都是高级抽象,所有哪怕是简单的常数相加的操作,在后台也是经过很复杂处理的。所以python中变量不需要声明,因为python中每一个常量实际上都是一个C写的数据结构,都有完整的内存空间,有它的入口地址,因此变量声明不存在意义。python中不需要也不可以直接控制内存

“传引用”也是一种抽象方法,是为了解决某些语言不能返回多个值的手段,如果可以返回多个值,那么就没有必要这么罗嗦了
谢谢,果然是高级语言,很有潜力啊。
刚刚看《python宝典》我觉得不是很好。
在python中总出现引用啊,浅拷贝,深拷贝的东西。
这样翻译是否十分的合适那??
我想换本说看了。
http://doc.zoomquiet.org/data/20050907140515/index.html

How do I write a function with output parameters (call by reference)?

Remember that arguments are passed by assignment in Python. Since assignment just creates references to objects, there's no alias between an argument name in the caller and callee, and so no call-by-reference per se. You can achieve the desired effect in a number of ways.

By returning a tuple of the results:
def func2(a, b):
    a = 'new-value'        # a and b are local names
    b = b + 1              # assigned to new objects
    return a, b            # return new values

x, y = 'old-value', 99
x, y = func2(x, y)
print x, y                 # output: new-value 100

This is almost always the clearest solution.

By using global variables. This isn't thread-safe, and is not recommended.

By passing a mutable (changeable in-place) object:
def func1(a):
    a[0] = 'new-value'     # 'a' references a mutable list
    a[1] = a[1] + 1        # changes a shared object

args = ['old-value', 99]
func1(args)
print args[0], args[1]     # output: new-value 100

By passing in a dictionary that gets mutated:
def func3(args):
    args['a'] = 'new-value'     # args is a mutable dictionary
    args['b'] = args['b'] + 1   # change it in-place

args = {'a':' old-value', 'b': 99}
func3(args)
print args['a'], args['b']

Or bundle up values in a class instance:
class callByRef:
    def __init__(self, **args):
        for (key, value) in args.items():
            setattr(self, key, value)

def func4(args):
    args.a = 'new-value'        # args is a mutable callByRef
    args.b = args.b + 1         # change object in-place

args = callByRef(a='old-value', b=99)
func4(args)
print args.a, args.b