Python学习笔记(一)——Python函数的定义和使用

最近在一个在线网站http://www.runoob.com/上学习Python,因为我想除了专职语言之外还要掌握一门其它的脚本语言,虽然已经会Shell编程,不过因为Python独到的简介魅力吸引了我,而且在很多企业的招聘中都提出了要求会熟练运用至少一门脚本语言,所以我就开始了我的Python学习之路。

Python是一门解释型、脚本语言,所以也算是一门弱类型的语言,因为在Python中虽然也有基本的数据类型,不过我在用它编程的时候,并不需要像C语言那样显式声明数据类型,而是在程序中处理和赋值,这个和PHP比较相似,由于之前有用Python写过Raspberry上的串口读取程序和一些其它小的数据获取程序,那个时候只是浅尝辄止,没有真正地认识这门语言,今天重新翻开python的篇章,自然也有点熟悉的味道在里面。

众所周知Python没有像其它语言那样用大括号分隔代码块,而是用缩进来区分代码块,一开始学习的时候真的非常不习惯,因为一开始不想在IDE的选择上浪费时间,所以我选择了最简单的Python IDLE + Sublime编辑器的组合,在sublime上写代码然后在IDLE中调试运行,很多语法错误都是和缩进有关的,如果IDE没有自动对齐缩进的话,很多语法错误都很难调试出来,所以一定要耐心和细心。

在学到Python自定义函数这一块的时候,网站上说:所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。

于是我写了下面这样一个函数来测试这个理论:

def changenum( num ):
   num=num*2
   print "函数内取值: ", num
   return
 
# 调用changeme函数
n=2;
changenum(n);
print "函数外取值: ",n</span>

按照上面的理论,函数内外输出应该是一致的,然而输出的却是这样的:


这明显和网站上说的不一样啊,所以我困惑了好久,如果是C语言的话,输出这样的结果理所当然,但是Python不应该都是传递引用的吗,那这样参数的值应该会被改变才对啊。

然后我又百度了一下,在豆瓣上找到了这样一段笔记,让我豁然开朗:

和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

原文链接点击打开链接

所以我们这里传的参数是一个数字,也就是一个不可变对象的引用,所以就不能直接修改原始对象,于是我又试了一下网站上修改传入列表的函数,果真可以改变,但是由于网站上没有传递不可变对象的例子,所以导致我走入了误区,这同时也说明,理论需要经过实践的检验,发现问题,思考问题,解决问题才是避免错误的最佳途径。


  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值