(Python) 函数、匿名函数
本节将学习如何用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) 函数、匿名函数的更多相关文章
- python基础——匿名函数
python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...
- python基础——匿名函数及递归函数
python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...
- day16 python之匿名函数,递归函数
匿名函数 匿名函数格式 函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任 ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- (转)Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)
原文:https://www.cnblogs.com/chenwolong/p/reduce.html 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数 ...
- 孤荷凌寒自学python第二十天python的匿名函数与偏函数
孤荷凌寒自学python第二十天python的匿名函数与偏函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python为使函数的使用更加方便高效,可以使用两种特殊的函数简化语句书写. 一 ...
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...
- 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)
小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>> 1. lambda 匿名函数 lambda 参数: ...
- python基础-匿名函数和内置函数
匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...
- python笔记4 内置函数,匿名函数.递归函数 面向对象(基础, 组合,继承)
内置函数 eval和exec eval :执行字符串中的代码并将结果返回给执行者,有返回值 exec:执行字符串中的代码,往往用于执行流程语句,没有返回值. s1 = '1+2' s2 = 'prin ...
随机推荐
- logstash 因为jdk版本不对造成索引时间戳失败
版本 logstash 1.5.0 RC2 JDK 1.7.15 Logstash推荐使用JDK 1.7.75 每次启动都是会有部分的数据无法替换日志中的时间戳,导致日志时间戳被认定为当前读取时间. ...
- 玩转单元测试之DBUnit
DBunit 是一种扩展于JUnit的数据库驱动测试框架,它使数据库在测试过程之间处于一种已知状态,如果一个测试用例对数据库造成了破坏性影响,它可以帮助避免造成后面的测试失败或者给出错误结果. 虽然不 ...
- gps转百度地图
HttpResponse res=WS.url(mapUrl+"/ag/coord/convert?from=0&to=4&x="+longitude+" ...
- tomcat的乱码问题
String filename=request.getParameter("filename"); filename=new String(filename.getBytes(&q ...
- 滚动div的动画
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- django中自定义标签和过滤器
想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1 在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个tem ...
- zip和zippartition总结
最近在搞spark机器学习项目时,碰到了一些小问题.两个数据集要联到一起.比如rdd1=("abc","cde","dfc"),rdd2=( ...
- arpg网页游戏之地图(四)
这一节主要是针对上一节的补充,关于地图的优化策略上一节中已经涉及了一些,这一节具体说下. 地图块加载队列:就拿1280*800的屏幕分辨率来讲,大约需要加载的地图块为30~35块之间,如果这个时候一下 ...
- 3.openssl speed和openssl rand
(1).openssl speed 测试加密算法的性能. 支持的算法有: openssl speed [md2] [mdc2] [md5] [hmac] [sha1] [rmd160] [idea-c ...
- okhttp3的使用
http://www.qingpingshan.com/rjbc/az/110232.html 请求队列,post? 待定 http://www.07net01.com/2015/12/1017279 ...