本节将学习如何用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. EditText----

    ==============01   editText属性 1.输入法Enter键图标的设置: 软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有normal,a ...

  2. web.xml 文件配置01

    web.xml 文件配置01   前言:一般的web工程中都会用到web.xml,方便开发web工程.web.xml主要用来配置Filter.Listener.Servlet等.但是要说明的是web. ...

  3. ubuntu14.04配置impala的odbc连接

    cdh hive和impala的odbc驱动 http://www.cloudera.com/downloads.html.html 选择 SLES 11 64-bit下载: http://www.c ...

  4. 创建线程方式-NSThread

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. spring数据源配置

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-// ...

  6. EXT学习之——Ext下拉框绑定无效的问题

    1.保证store定义是否在combobox前面 2.有没写  .load 3.有没赋值  xxstore:xxstore 具体看详细步骤 http://www.cnblogs.com/wdw3121 ...

  7. 【JavaScript】前端插件

    树形结构: http://www.jeasyui.com/documentation/index.php 网上有对这个插件的说明,总的来说这个插件将selected和checked作为两种状态: 1. ...

  8. windows 10启动盘制作工具

    Rufus 官方网站:http://rufus.akeo.ie/

  9. PHP指定字段的多维数组排序方法

    PHP数组排序可以用array_multisort方法实现,但是如果是多维数组,并且我们要指定数组中的某个字段进行排序,那么这就需要我们自己写方法实现了. function sortArrByFiel ...

  10. iOS 调用拍照、选择本地相册、上传功能---未完善。

    1.新建viewController 拖入一个Button,添加点击事件,使用代理方法 <UIActionSheetDelegate,UIImagePickerControllerDelegat ...