python在函数的修改变量值
2017-03-30 09:32
302 查看
和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。
实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,
就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,
就不能直接修改原始对象--相当于通过“传值'来传递对象。
python一般内部赋值变量的话,都是传个引用变量,和C语言的传地址的概念差不多。可以用id()来查询内存地址
下面的str_是可修改的对象,因此在add函数中可以修改:
输出为:
下面的str_是不可修改的对象,因此在add函数中不能修改:
关于python的复制
如果a=b的话, a和b的地址是相同的;如果只是想拷贝,那么就得用 a=b[:]。
!!!注意这一点,这可是可以引起重大错误的。。。
实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,
就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,
就不能直接修改原始对象--相当于通过“传值'来传递对象。
python一般内部赋值变量的话,都是传个引用变量,和C语言的传地址的概念差不多。可以用id()来查询内存地址
下面的str_是可修改的对象,因此在add函数中可以修改:
#!/usr/bin/env python #coding=utf-8 def add(s): s += 'b' print "In add function :", s if __name__ == "__main__": str_ = list("aaa") add(str_) print "In main function:", str_
输出为:
In add function : ['a', 'a', 'a', 'b'] In main function: ['a', 'a', 'a', 'b']
下面的str_是不可修改的对象,因此在add函数中不能修改:
#!/usr/bin/env python #coding=utf-8 def add(s): s += 'b' print "In add function :", s if __name__ == "__main__": str_ = "aaa" add(str_) print "In main function:", str_
In add function : aaab In main function: aaa
关于python的复制
如果a=b的话, a和b的地址是相同的;如果只是想拷贝,那么就得用 a=b[:]。
!!!注意这一点,这可是可以引起重大错误的。。。
相关文章推荐
- python内部函数如何修改外部函数变量
- Python global全局变量只能在函数中没做global申明,可以引用但修改会报错。
- 为什么python在函数中修改"字典型全局变量"不需要global
- 本方法学python 习题24(综合练习) 习题25(更多关于函数和变量的练习)习题26(修改程序)
- python全局变量在 函数中 修改
- python 在函数中使用全局变量的注意事项
- Python函数参数传递以及变量作用域
- python中那些双下划线开头得函数和变量
- javascript 中,哪些函数是对变量自身进行修改,哪些是创建一个新变量
- Python 学习笔记(一)语句,变量,函数
- Python之路:函数和变量
- 奇怪的函数内const变量。修改了变量对应内存区的值,但const变量值没有变化。
- python 在函数中使用全局变量的注意事项
- 关于python中带下划线的变量和函数 的意义
- python18 命名、变量、代码、函数
- python19 函数和变量
- Python中定义“私有”成员变量和成员函数
- python 判定变量是函数
- python嵌入C++------ boost.python如何在C++中调用含有不定长参数tuple变量和关键字参数dict变量的函数
- Learn Python The Hard Way学习(19) - 函数和变量