三艺网站建设,浙江广发建设有限公司网站,网站优化该怎么做,网站上如何做天气插件From: http://blog.csdn.net/winterttr/article/details/2590741 作者#xff1a;winterTTr #xff08;转载请注明#xff09; 我想#xff0c;这个标题或许是很多初学者的问题。尤其是像我这样的对C/C比较熟悉#xff0c;刚刚进入python殿堂的朋友们 。C/C的函数参数的传…From: http://blog.csdn.net/winterttr/article/details/2590741 作者winterTTr 转载请注明 我想这个标题或许是很多初学者的问题。尤其是像我这样的对C/C比较熟悉刚刚进入python殿堂的朋友们 。C/C的函数参数的传递方式根深蒂固的影响这我们的思维--引用传值究竟是那种呢。 呵呵语言的特性决定了是使用的方法那么现在我们来探究一下python的函数参数传递方式。 在开始之前我们有必要分清一下python的一些基础概念。 首先要说的是变量 与 对象 在python中类型属于对象变量是没有类型的这正是python的语言特性也是吸引着很多pythoner的一点。所有的变量都可以理解是内存中一个对象的“引用”或者也可以看似c中void*的感觉。所以希望大家在看到一个python变量的时候把变量和真正的内存对象分开。 类型是属于对象的而不是变量。这样很多问题就容易思考了。 例如 nfoo 1 #一个指向int数据类型的nfoo再次提醒nfoo没有类型 lstFoo [1] #一个指向list类型的lstFoo这个list中包含一个整数1。 对应于上一个概念就必须引出另了另一概念这就是“可更改”mutable与“不可更改”immutable对象。 对于python比较熟悉的人们都应该了解这个事实在python中strings, tuples, 和numbers是不可更改的对象而list,dict等则是可以修改的对象。那么这些所谓的可改变和不可改变影响着什么呢 还是上面的例子 nfoo 2 这时内存中原始的1对象因为不能改变于是被“抛弃”另nfoo指向一个新的int对象其值为2 lstFoo[0] 2 更改list中第一个元素的值因为list是可改变的所以第一个元素变更为2其实应该说有一个新int对象被指定给lstFoo 所指向的对象的第一个值但是对于lstFoo 来说所指向的对象并没有变化就是这个看似void*的变量所指向的对象仍旧是刚刚的那个有一个int对象的list。听着有点晕吧仔细琢磨一下就明白了嘿 好了被我这么填鸭似的复习了一下python的基础知识改转回题目的问题了Python的函数参数传递传值引用 对于变量与对象相对的概念其实python函数参数传递可以理解为就是变量传值操作注意哦我说的是变量不是对象 _ ) 接着说例子好了 def ChangeInt( a ): a 10 # change the number nfoo 2 ChangeInt(nfoo) print nfoo #结果是2 这时发生了什么有一个int对象2和指向它的变量nfoo当传递给ChangeInt的时候按照传值的方式复制了变量nfoo的值这样a就是nfoo指向同一个Int对象了函数中a10的时候发生什么 还记得我上面讲到的那些概念么int是不能更改的对象于是做了一个新的int对象另a指向它但是此时被变量nfoo指向的对象没有发生变化于是在外面的感觉就是函数没有改变nfoo的值看起来像C中的传值方式。 def ChangeList( a ): a[0] 10 # change the number lstFoo [2] ChangeList(lstFoo ) print nfoo #结果是[10] 当传递给ChangeList的时候变量仍旧按照“传值”的方式复制了变量lstFoo 的值于是a和lstFoo 指向同一个对象但是list是可以改变的对象对a[0]的操作就是对lstFoo指向的对象的内容的操作于是这时的a[0] 10就是更改了lstFoo 指向的对象的第一个元素所以再次输出lstFoo 时显示[10]内容被改变了看起来像C中的按引用传递。 恩现在是不是对python中的变量和对象的概念有了更深入的理解了呢 通过我上面的解释我想大家也可以自己搞定其他类型对象的传递问题了吧。