一、函数参数的类型

  之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求。而在Python中还有一种是通过参数名字来匹配的,这样一来,不需要严格按照参数定义时的位置来传递参数,这种参数叫做关键字参数

>>> def display(a,b):
  print a
  print b

>>> display('hello','world') # 位置参数,即参数是通过位置进行匹配
hello
world
>>> display('hello') # 这样会报错 Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
display('hello')
TypeError: display() takes exactly 2 arguments (1 given)
>>> display('world','hello')
world
hello
>>>
>>> display(a='hello',b='world') # 关键字参数
hello
world
>>> display(b='world',a='hello')
hello
world # 可以看到通过指定参数名字传递参数的时候,参数位置对结果是没有影响的。

关键字参数最厉害的地方在于它能够给函数参数提供默认值

>>> def display(a='hello',b='wolrd'):   # 分别给a和b指定了默认参数
print a+b

>>> display()
hellowolrd
>>> display(b='world') # 如果不给a或者b传递参数时,它们就分别采用默认值
helloworld
>>> display(a='hello')
hellowolrd
>>> display('world') # 没有指定'world'是传递给a还是b,则默认从左向右匹配,即传递给a
worldwolrd

注意:在重复调用函数时默认形参会继承之前一次调用结束之后该形参的值

>>> def insert(a,L=[]):
L.append(a)
print L

>>> insert('hello')
['hello']
>>> insert('world')
['hello', 'world'] # 重复调用函数时默认形参会继承之前一次调用结束之后该形参的值

二、任意个数参数(包裹传递

在无法确定参数的个数,就可以使用收集参数了,使用收集参数只需在参数前面加上'*'或者'**'。

'*'和'**'表示能够接受0到任意多个参数,'*'表示将没有匹配的值都放在同一个元组中,'**'表示将没有匹配的值都放在一个字典中。

>>> def func(*name):         # * 表示将没有匹配的值放在同一个元组中
print type(name)
print name >>> func(1,4,6)
<type 'tuple'>
(1, 4, 6)
>>> func(5,6,7,1,2,3)
<type 'tuple'>
(5, 6, 7, 1, 2, 3) >>> def func(**dict): # ** 表示将没有匹配的值放在同一个字典中
print type(dict)
print dict >>> func(a=1,b=2)
<type 'dict'>
{'a': 1, 'b': 2}
>>> func(m=4,n=5,c=6)
<type 'dict'>
{'c': 6, 'm': 4, 'n': 5}

三、递归

如果函数包含了对其自身的调用,该函数就是递归的。

1 def factorial(n):    # 阶乖函数
2 if n==0:
3 return 1 # 0的阶乖返回1
4 else:
5 return n*factorial(n-1) # n的阶乖则返回 n*f(n-1)
6
7 print factorial(10)

四、lambda函数

lambda函数也叫匿名函数,即,函数没有具体的名称。

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,也可以没有,冒号右边的返回值,lambda语句构建的其实是一个函数对象。

>>> g = lambda x : x * 2     # :左边表示参数,右边表示返回值
>>> print g(2)
4

lambda 函数好处:

1、在不需要再复用的地方用lambda,免去函数名,省去函数定义的过程

2、代码更精简

python学习笔记12(函数三): 参数类型、递归、lambda函数的更多相关文章

  1. Python学习笔记【第五篇】:基础函数

    一.函数:函数定义关键字def  后跟函数名称 def 函数名(参数):             ...     函数体     ...     返回值 案例: # 定义函数 def say_hei( ...

  2. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  3. Python 学习笔记12 函数模块

    函数的优点之一,使用它们可将代码块与主程序分离.通过给函数指定描述性的名称.可以让主程序非常好理解.但是如果将过多的函数和主程序放置在一起,会让文件显得非常凌乱.太多的代码混杂在一起,不方便管理.我们 ...

  4. python学习笔记12 ----线程、进程

    进程和线程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进程里的 ...

  5. Python学习笔记 for windows 三

    多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. 哺乳类:能跑的哺乳类,能飞的哺乳类: 鸟类:能跑的鸟类,能飞的鸟类. class Animal(object): ...

  6. Python学习笔记12—类

    典型的类和调用方法: #!/usr/bin/env Python # coding=utf-8 __metaclass__ = type #新式类 class Person: #创建类 def __i ...

  7. Python学习笔记摘要(一)类型 字符串 函数 列表 深浅拷贝

    python中的对象和类型 在python中,认为系统中的每一个"东西"都是一个对象,在python中,"对象"有着特殊的意义,python中的对象有: 一个标 ...

  8. python学习笔记:第三天(数字)

    Python3 数字(Number) 1. 数字数据类型 用于存储数值.数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 实例在变量赋值时 Number 对象将被创建, ...

  9. Python学习笔记(1)对象类型

    强制转换字符串函数str 如果我们求2的一百万次方是多少那么我们可以 print(2**1000000) 如果我们要求2的一百万次方有多少位那么我们可以用str函数强制转换成字符串然后len函数计算 ...

随机推荐

  1. hdu 4604 动态规划

    思路:这题的感觉就是最长上升子序列的升级版.首先对于最长上升子序列要用n*log(n)的算法才行,这个复杂度的算法可以从hdu1025得到启发.然后就是什么情况下最优问题了.对于序列中某个数i,找出其 ...

  2. Codeforces Round #191 (Div. 2)

    在div 188中,幸运的达成了这学期的一个目标:CF1800+,所以这次可以打星去做div2,有点爽. A.Flipping Game 直接枚举 B. Hungry Sequence 由于素数的分布 ...

  3. C#电脑自动关机代码指令

    Process p = new Process();//实例化一个独立进程                p.StartInfo.FileName = "cmd.exe";//进程 ...

  4. Table of Contents - JAXB

    Getting Started Hello World Hello World with Namespace xjc - 将 XML Schema 编译成 Java 类 wsimport: 编译 WS ...

  5. MyBatis(3.2.3) - Configuring MyBatis using XML, Environment

    The key component of MyBatis is SqlSessionFactory from which we get SqlSession and execute the mappe ...

  6. MyBatis(3.2.3) - Configuring MyBatis using XML, Properties

    The properties configuration element can be used to externalize the configuration values into a prop ...

  7. Javascript之换肤(未完待续)

    这个项目我还没有完全写出来,先记录至此.感觉是方法不对,背景图片的切换方法有Problem.如若有一大神发现了我的文章,还望指导,吾将感激不尽.日后代码还会再钻研再改改. <head> & ...

  8. kettle 表输入+流查询 与 数据库查询

    他们的主要区别: •流查询步骤只能进行等值查询,数据库查询步骤可以进行非等值查询 •流查询在查询之前把数据都加载到内存里,数据库查询可以选择是否把数据加载到内存. •进行等值查询时,数据库查询步骤如果 ...

  9. Objective-C访问SQLite

    数据库的相关知识我就不去说明了,毕竟只要会sql语言的人就大家都一样. 本案例是在Xcode7.2环境下创建的single view application进行演示操作. 首先第一点,为什么要使用sq ...

  10. 2013山东省“浪潮杯”省赛 A.Rescue The Princess

    A.Rescue The PrincessDescription Several days ago, a beast caught a beautiful princess and the princ ...