今天继续去了解小蟒蛇的可爱特性,在函数定义和调用方面,有三个地方让我觉得蛮有意思的。
       第一个有意思的地方是缺省实参, 也就是在Python中定义函数,你可以为参数设定缺省值(默认值),这个特性在C和C++中也是有的,但是在Java中却没有,至于C#中有没有,就不清楚了。如下所示:

def  test(a, b, c=3):
        print a, b, c

当你调用test函数的时候,你可以这样调用test("abc", "def"), 这样是等价于test("abc", "def", 3)的。在设定参数的缺省值的时候,必须遵循的一个原则就是带缺省值的参数必须要放在没有缺省值的后面,也就是说像def test(a=3, b, c)这样的函数定义是错误的。而这个原则也适用于C和C++。使用缺省参数的好处是显而易见的,如果一个参数在大多数的情况都使用某一个确定的值,你就没有必要在每次函数调用中都不厌其烦的把这个值写了一遍又一遍了。虽然Python在缺省实参的使用上延续了C和C++的规则,但是它仍然有着自己的创新之处。还是上面的test函数,你是可以这样调用的test(c=2, b=4, a=5),是不是很灵活呢?这正好说明了在函数调用的时候,参数与参数值就是一个key/value pair(键值对),而键值对在Python当中就是Dictionary类型,Dictionary类型本身是无序的,那么哪个参数在前,哪个参数在后就无关紧要了。
   
        第二个是随机参数表,也就是你可以定义一个函数,而它不管你传递多少个参数都照单全收。不用惊讶,看看下面简单的代码吧:

def test(*arg):
       print arg

你可以这样调用:test(1, 2, 3),也可以这样调用:test("abc", 2, 3, [1, 2, 3])。所有传递给test的实参都会存储在arg这个tuple当中。是不是觉得很特别呢?其实,这也不是什么新鲜的特性了,在C和C++当中可以使用省略号来指定函数参数表,也就是说在C和C++中,你可以定义一个没有参数列表的函数,就像这样void foo(...),而这个函数是可以接收任意多个实参的。也许你从来都没有在C和C++中定义过以省略号作为参数表的函数,但是你一定使用过一个这样使用省略号定义的函数,它就是printf。printf的定义是int printf(const char* ...); 通常你可以这样调用:printf("Hello, world"); 同时也可以这样 printf("Hello, %s", yourName); 第二种调用方式就包含了两个实参,%号代表第二个参数,s则表示参数类型是字符串。
        在随机参数表方面, Python在充分遵循C和C++的原则之余,仍然发挥着其独有的创意。如上所述,由于可以使用类似test(c=2, b=4, a=5)的调用方式, Python也有一个特殊符号来应对这样的函数调用。如下所示:

 def test(**arg):
        print arg

arg实际上就是一个Dictionary,当你这样调用的时候:test(c=2, b=4, a=5),arg的内容就是{'c':2, 'b':4, 'a':5}。
       最后一个就是打包和解包实参。上面所说的两点让函数定义变得更加的简洁和方便,至少你不再需要定义一个带着长长的参数表的函数了。但是这仅是函数定义啊,如果我要向一个函数传递十个参数,不是还要在调用的时候写上一大串吗? 别急,Python是不会顾此失彼的。以第一个定义的test函数为例,它需要至少两个参数,那么我们可以定义一个List或者Tuple,把实参都放到里面去——打包实参。然后在函数调用的时候,通过*号从List或者Tuple中将实参取出来传递给函数——解包实参。如下如示:

def  test(a, b, c=3):
        print a, b, c

args = [2, 4, 5]
test(*args)               # test(*args) 等价于 test(2, 4, 5)

Python又让我再一次领略到了它的灵活和巧妙,还有汲取百家之长的谦逊。 这些,你感受到了吗?

转载于:https://www.cnblogs.com/perhaps/archive/2005/06/22/178755.html

美妙的Python又来了相关推荐

  1. 10个美妙的Python装饰器

    10个美妙的Python装饰器 对Python编程语言中我最喜欢的一些装饰器的概述. 简介 关于Python编程语言的伟大之处在于,它在一个小包里装了所有的功能,这些功能非常有用.很多特性可以完全改变 ...

  2. 如此美妙,Python 处理CSV、JSON和XML数据的方法真简便

    Python 尤其是优秀的简洁和易用性成为网络编程语言的首选,是数据和编程语言的首选,其主要的数据库和算法库成为python入门数据科学的首选语言. 在日常使用中,CSV,JSON和XML三种数据格式 ...

  3. python编程在哪里写-Python自带的IDE在哪里

    python自带的IDE打开方式如下 安装好python开发环境,打开搜索框,输入IDLE,回车,打开此应用,同样开启美妙的python之旅. 此时的编辑器是交互模式,我们还可以点击file-new- ...

  4. python idle怎么用_python的idle如何使用

    集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器. 调试器和图形用户界面等工具.集成了代码编写 ...

  5. 不可错过的MSDN TV —— IronPython: Python on the .NET Framework (中)

    在上一篇Post中,我已经对前四个Demo做了简要的介绍,但那四个只是饭前的开胃小菜,好戏还在后头呢.嘿,上菜咯!          Demo 5 使用WinFX:IronPython的开发从来都紧跟 ...

  6. python 题目是idle的文件模式是什么_python的idle如何使用

    集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器. 调试器和图形用户界面等工具.集成了代码编写 ...

  7. msf生成linux shellcode,使用MSF打造各种ShellCode

    生成各种后门 Windows: msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST= 攻击机IP L ...

  8. 窥探算法之美妙——寻找数组中最小的K个数python中巧用最大堆

    原文发表在我的博客主页,转载请注明出处 前言 不论是小算法或者大系统,堆一直是某种场景下程序员比较亲睐的数据结构,而在python中,由于数据结构的极其灵活性,list,tuple, dict在很多情 ...

  9. git diff 比较文件_使用Python创建你自己的diff工具

    为什么我需要自己的diff工具? 我经常使用git跟踪我的编码项目.文章.业务工作等等.git的一个美妙之处在于,你可以通过简单地使用其内置的diff功能来轻松地比较你的工作的不同状态.要使用这个功能 ...

最新文章

  1. Security+考试总结
  2. Nginx负载均衡+转发策略
  3. 前端学习(543):npm包管理
  4. 关于大型网站技术演进的思考(四)--存储的瓶颈(4)
  5. PHP数据表记录自己信息,PHP对数据表记录的操作
  6. ZCGL大数据项目优化组件布置
  7. Jquery,Ready函数.
  8. kotlin null_Kotlin Null安全– Kotlin可空
  9. Thread类的常用方法
  10. 简述python2.x和python3.x的区别_python面试题Python2.x和Python3.x的区别
  11. 重新思考路易斯维尔足球品牌
  12. 西门子PLC 间接寻址(指针)
  13. 使用Vulkan画三角形
  14. webpack 5高级配置优化
  15. 网络----OSI模型
  16. Android 安全框架 -- 总概
  17. 冯诺依曼原理计算机称为,冯·诺依曼提出的计算机工作原理又称为 工作原理。...
  18. taishan服务器修改为u盘启动,bios改成u盘启动
  19. 解决IE11审查元素面板空白问题
  20. kk的房《垃》产预《圾CXXN》测

热门文章

  1. 预测 “疯狂三月” 冠军的办法,我只告诉你!
  2. 增强for循环对于“二维”数组进行循环的案例
  3. mixed content 混合内容
  4. [译]Mimic, 轻量级Web Service测试桩
  5. 40条优化php代码的小实例
  6. python读取配置文件
  7. RIP和OSPF双点双向重发布_综合实验
  8. linux字符cdev和Inode的关系
  9. [NOI2010]航空管制(拓扑排序+贪心)
  10. Java多线程高并发学习笔记(一)——ThreadRunnable