本节将学习如何用Python定义函数,调用函数,以及学习匿名函数的使用


1.定义函数


Python中定义函数用关键字def,如下例所示,testFun为函数名

def testFun():

print "hello world"


2.函数参数


一个函数可以有0个或多个形式参数:

def testAdd(x,y):

print x+y

函数的形式参数值可以初始化,使用了初始值的参数,在调用的时候可以不需要指定该参数。

def testSum(z,x=1,y=0):

print x+y+z

调用函数:

testSum(3) #   将打印出:4

testSum(10,y=1) # 将打印出:12

testSum(y=1,x=2,z=10) #将打印出:13

注意:定义函数时,没有初始化的形式参数必须放在初始化形式参数的前面,否则会报错

调用函数时,必须指定未初始化的参数,且参数的顺序要与函数定义的参数顺序一致(除非调用时指定了参数名)


3.函数返回值


Python函数可以通过return语句返回函数值,如果没有return语句或者return语句后什么都没有,函数将返回:None

def testSub(x,y):

return x-y

调用函数:

x=testSub(10,2)
print x   #将打印出:8


4.字典和元组形式的函数参数


Python函数的形式参数个数有时候不确定,这时候,我们可以使用*args或**args的形式参数。*args以元组的形式接收参数,而**args以字典的形式接收参数,当两者都存在时,定义函数时,*args必须定义在**args前面

字典形参(**args)例子:

def testDict(a,**b):

print 'a is:',a

print 'b is:',b

调用函数方法一:

tict={'x':1,'y':2,'z':3}
testDict(10,**tict)

调用函数方法二:

testDict(10,x=1,y=2,z=3)

输出结果:

>>>
a is: 10
b is: {'y': 2, 'x': 1, 'z': 3}

元组形参(*args)例子:

def testTuple(a,*b):

print 'a is :' ,a

print b

调用函数方法一:

tup=('a',1,2,'b')
testTuple(1,*tup)

调用函数方法二:

testTuple(1,'a',1,2,'b')

输出结果:

>>>

a is : 1

('a', 1, 2, 'b')


5.匿名函数


Python可以用关键字lambda定义一个匿名函数,当需要一个函数类型的对象时,可以创建一个匿名函数来实现

def testLambda(x):

return lambda x:x+y     #这里将返回一个函数对象

函数调用:

f=testLambda(10)  #创建了一个函数对象:f
print f(5)        #将会打印出:15


6.要点记录


当多次调用一个具有初始化参数的函数时,该参数只会在第一次调用时被初始化一次。 这使得当形式参数为可变对象,如:列表、字典或者类的实例时,其结果可能和我们预期的不一样:

def testParam(x=[]):

x.append(10)

print x

多次调用函数(可能我们希望调用函数的结果是:都打印出列表[10]):

testParam()
testParam()
testParam()
testParam()

实际输出结果:

>>>
[10]
[10, 10]
[10, 10, 10]
[10, 10, 10, 10]

当形式参数为不可变对象时,又是怎样的情况呢?我们再观察另一个例子:

def testParam(x=2):

x=x+2

print x

调用函数:

testParam()
testParam()
testParam()
testParam()

实际输出结果:

>>>
4
4
4
4


备注:

python中,万物皆对象。

python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址。

不可变对象(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)

可变对象(mutable):字典型(dictionary)、列表型(list)、类的实例

(Python) 函数、匿名函数的更多相关文章

  1. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  2. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  3. day16 python之匿名函数,递归函数

    匿名函数 匿名函数格式 函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任 ...

  4. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  5. (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)

    原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...

  6. 孤荷凌寒自学python第二十天python的匿名函数与偏函数

    孤荷凌寒自学python第二十天python的匿名函数与偏函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python为使函数的使用更加方便高效,可以使用两种特殊的函数简化语句书写. 一 ...

  7. Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数

    Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...

  8. 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)

    小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>> 1. lambda 匿名函数 lambda 参数: ...

  9. python基础-匿名函数和内置函数

    匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...

  10. python笔记4 内置函数,匿名函数.递归函数 面向对象(基础, 组合,继承)

    内置函数 eval和exec eval :执行字符串中的代码并将结果返回给执行者,有返回值 exec:执行字符串中的代码,往往用于执行流程语句,没有返回值. s1 = '1+2' s2 = 'prin ...

随机推荐

  1. mysql 异步执行 query //@todo

    http://stackoverflow.com/questions/27240421/php-asynchronous-mysql-query http://php.net/manual/en/my ...

  2. C++模板元编程 - 挖新坑的时候探索到了模板元编程的新玩法

    C++真是一门自由的语言,虽然糖没有C#那么多,但是你想要怎么写,想要实现什么,想要用某种编程范式或者语言特性,它都会提供. 开大数运算类的新坑的时候(又是坑),无意中需要解决一个需求:大数类需要分别 ...

  3. [ActionScript 3.0] NetConnection建立客户端与服务器的双向连接

    一个客户端与服务器之间的接口测试的工具 <?xml version="1.0" encoding="utf-8"?> <!--- - - - ...

  4. WCF服务部署IIS

    一.将WCF服务部署到IIS上  [转载自简单笑容——http://www.cnblogs.com/skdsxx/p/5072726.html ] 1.首先检测电脑上是否安装了IIS,一般来说Win7 ...

  5. Gocd持续部署利器

    http://www.go.cd/documentation/user/current http://www.go.cd/images/home-image1.png Gocd 是ThoughtWor ...

  6. uva 1368 DNA Consensus String

    这道题挺简单的,刚开始理解错误,以为是从已有的字符串里面求最短的距离,后面才发现是求一个到所有字符串最小距离的字符串,因为这样的字符串可能有多个,所以最后取最小字典序的字符串. 我的思路就是求每一列每 ...

  7. Linux防火墙

    9.1 认识防火墙   只要能够分析与过滤进出我们管理之网域的封包数据, 就可以称为防火墙. 硬件防火墙 由厂商设计好的主机硬件, 这部硬件防火墙内的操作系统主要以提供封包数据的过滤机制为主,并将其他 ...

  8. (转)django上传文件

    本文转自:http://www.cnblogs.com/linjiqin/p/3731751.html 另:  本文对原文做了适当修改 更为详细的介绍可以参考官方文档. emplate html(模板 ...

  9. spark1.5.1环境搭建

    今天一个小伙伴找我搞spark,搞了一个中午都没搭建好.心里痒痒的.索性自己重来了一遍. 本来很简单的事情,被这小子搞的老复杂了.究其原因,有以下几点: 下载的软件不对,我用的是这两个软件 spark ...

  10. asp.net mvc 如何将controller 里一个action 返回值为list<>的值输出到view

    在controller中:return View(myRole.ToList());在view文件开头加上:@model IEnumerable<LTXYCallCenter.Models.Ro ...