python传值和函数 python 函数传值

Python 的函数是怎么传递参数的Python 的函数传递参数python传值和函数:
Python 传参数可以理解为 C 的 const 指针(your_type* const your_variable)python传值和函数 , 它所指向的对象可以被修改产生副作用,但变量本身不能修改指向其他对象 。这个和 C的 reference 差不多 。
所以如果一定要产生 C 的修改指针指向其他对象的效果,用 list、dict 或其他自定义的 mutable 对象包装是一个办法,但python传值和函数我认为这样是一种不良实践 。在 C 语言中用参数输出结果有非常多的理由python传值和函数:
C 语言没有 tuple,不能返回多值,除非声明一个 struct 类型 。这种情况下划分 in 参数和 out 参数成为一种惯例
C 语言没有异常机制,返回值一般要保留给 errno
但这些情况在 Python 中都是不存在的
Python 的函数是怎么传递参数的?首先你要明白python传值和函数,Python的函数传递方式是赋值python传值和函数,而赋值是通过建立变量与对象的关联实现的 。
对于你的代码python传值和函数:
执行 d = 2时,你在__main__里创建python传值和函数了d,并让它指向2这个整型对象 。
执行函数add(d)过程中:
d被传递给add()函数后,在函数内部,num也指向python传值和函数了__main__中的2
但执行num = num10之后,新建了对象12,并让num指向了这个新对象——12 。
如果你明白函数中的局部变量与__main__中变量的区别,那么很显然,在__main__中,d仍在指着2这个对象,它没有改变 。因此,你打印d时得到了2 。
如果你想让输出为12,最简洁的办法是:
在函数add()里增加return num
调用函数时使用d = add(d)
代码如下:
def add(num):
num= 10
return num
d = 2
d = add(d)
print d
Python 函数中 , 参数是传值,还是传引用这个问题python传值和函数的答案无外乎这几种说法:传值python传值和函数,传引用python传值和函数,对于可变对象是传引用,不可变对象是传值 。
传引用
先看下面这个例子:
def foo(n):
...print id(n)
...n = 3
...print id(n)
n = 2
id(n)
31030000L
foo(n)
31030000L
31029976L
【python传值和函数 python 函数传值】 n
2
id(n)
31030000L
由foo中两次输出不相等可以看出 , 传引用说法并不成立 。
传值
来看下面的例子:
def foo(n):
...print n
...n.append(3)
...print n
n = [1, 2, 4, 8]
foo(n)
[1, 2, 4, 8]
[1, 2, 4, 8, 3]
n
[1, 2, 4, 8, 3]
按传值的说法 , 一个值传进来,在函数内改动并不会影响变量本身的值,上面例子中n变量本身的值也被改变了,说明传值的说法也不对 。
3.可变对象传引用,不可变对象传值
相比上面两种说法,这种说法似乎更靠谱,传播也更为广泛,那它到底对不对呢?
def foo(n):
...print id(n)
...n = ['1', '2', '3']
...print id(n)
...print n
n = [1,2,3,4,5,6]
id(n)
35637576
foo(n)
35637576
35916168
['1', '2', '3']
n
[1, 2, 3, 4, 5, 6]
按照可变对象传引用的说法 , 上面list类型是可变对象,应该传引用,这foo方法中两次调用id应该输出一样的值,更改的结果也应该影响到外部变量,但结果显然不是这样的 , 这说明,这种说法也是不正确的 。
那么Python传值的方法到底是什么样呢python传值和函数?其实Python中的函数参数所遵循的是传对象(call by object),或者叫做穿对象的引用(call by object reference) 。在调用函数时 , 将变量整个对象传入,对于可变对象的修改 , 在函数内外均可见;而对于不可变对象,因为其并不能真正意义上被赋值 , 修改是通过生成新的对象来实现的 。
下面来一个有趣的例子作为结尾:
def bar(a = []):
...print id(a)
...a.append(7)
...print a
for _ in range(5):
...bar()
#结果输出请自己动手实践 , 原因应该不难理解
Python中函数调用是传值还是传引用python中所有数据都是对象,所以传参也是传的对象的引用,这个引用在函数执行前和执行后是不会被改变的,如:
num
=
1
def
change(num):
print(id(num))
num
=
2
print(id(num))
执行change(num)后num的值还是1
可以看到在执行前num的id值(可以理解为内存地址)是某一值
但在执行change后 , num的id值改变了,也就是说内部的num指向了另外的对象 , 而外部的num却还是指向原来的对象,所以值没有变;
同理,如:
num_list
=
[1,2]
def
change_list(num_list):
print(id(num_list))
num_list.append(3)
print(id(num_list))
可以看到执行change_list后num_list的id值没有改变,也就是说num_list是在原来的对象上添加了新的数据,外部的num_list也是指向这一对象,所以外部的num_list数据也添加了新的数据 。
python传值和函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python 函数传值、python传值和函数的信息别忘了在本站进行查找喔 。

    推荐阅读