博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之函数
阅读量:5235 次
发布时间:2019-06-14

本文共 3372 字,大约阅读时间需要 11 分钟。

函数

定义函数

为了定义python函数,你可以依次输入def,函数名,带有函数参数的圆括号,最后紧跟一个冒号(:)

现在定义一个无参数,但打印除一个单词的函数:

>>> def make_a_sound():...     print "quack"... >>> make_a_sound()quack

在函数中引入参数,定义带有一个anything参数的函数echo(),它使用return 语句将anything返回给它的调用者两次,并在两次中间加入一个空格

>>> def echo(anything):...     return anything+' '+anything... >>> echo('Rumplestitskin')'Rumplestitskin Rumplestitskin'

传入的值称为参数,当调用含参数的函数时,这些参数的值会复制给函数中的对应参数。

位置参数

Python处理参数的方式要比其他语言更加灵活,其中,最熟悉的就是位置参数,传入参数的值就是按照顺序依次复制过去的

>>> def menu(wine,entree,dessert):...     return{'wine':wine,'entree':entree,'dessert':dessert}... >>> menu('chardonnay','chicken','cake'){'dessert': 'cake', 'entree': 'chicken', 'wine': 'chardonnay'}

关键字参数

>>> menu(entree='beef',dessert='bagal',wine='bordeaux'){'dessert': 'bagal', 'entree': 'beef', 'wine': 'bordeaux'}>>>

指定默认参数值

>>> def menu(wine,dessert='flan',entree='pudding'):...     return {'wine':wine,'entree':entree,'dessert':dessert}... >>> menu('chicken'){'dessert': 'flan', 'entree': 'pudding', 'wine': 'chicken'}如果你提供参数值,在调用时会代替默认值>> menu('dunkelfelder','duck','doughnut'){'dessert': 'duck', 'entree': 'doughnut', 'wine': 'dunkelfelder'}

看下面的例子,函数buggy()在每次调用时,调用参时arg到一个空的列表result,然后打印输出一个单值列表,但是存在一个问题,只有在第一次调用时列表是空的,第二次调用时就会存在之前调用的返回值

>>> def buggy(arg,result=[]):...     result.append(arg)...     print result... >>> buggy('a')['a']>>> buggy('b')['a', 'b']

如果写成这个样子就会解决上面的问题

>>> def works(arg):...     result=[]...     result.append(arg)...     print result... >>> works('a')['a']>>> works('b')['b']

使用*收集位置参数
当参数被用到函数内部的时候,星号将一组数量的位置参数集合成参数值的元祖,在下面的例子中args是传入到函数print_args()的参数值的元祖

>> def print_args(*args):...     print ('Positional argument tuple: ',args)... >>> print_args() #无参数调用函数,什么也不会返回('Positional argument tuple: ', ())给函数传入的所有参数都会以元祖的形式返回输出>>> print_args(3,2,1,'waits','unh...')('Positional argument tuple: ', (3, 2, 1, 'waits', 'unh...'))>>>

使用**收集关键字参数
使用两个星号可以将参数收集到一个字典中,参数的名字是字典的健,对应参数的值是字典的值

>>> def print_kwargs(**kwargs):...     print('Keyword arguments:',kwargs)... X现在使用一些关键字参数调用函数>>> print_kwargs(wine='merlot',entree='mutton',dessert='macaroon')('Keyword arguments:', {'dessert': 'macaroon', 'entree': 'mutton', 'wine': 'merlot'})

在函数内部,kwargs是一个字典

内部函数
在python中,可以在函数中定义另外一个函数

>>> def outer(a,b):...     def inner(c,d):...             return c+d...     return inner(a,b)... >>> outer(2,3)5

当需要在函数内部多次执行复杂任务的时候,内部函数是非常有用的,内部函数可以看成一个闭包。

>> def knights(saying):...     def inner():...             return "we are the kgights who says :%s"%saying...     return inner...

Inner()函数可以得到sayin参数的值并且记录下来,return inner这一行返回的值是inner函数的复制(没有直接调用),所以它是一个闭包:一个动态创建的可以记录外部变量的函数

>>> a=knights('Duck')>>> b=knights('Hasenpffer')>>> a
>>> a()'we are the kgights who says :Duck'>>> b()'we are the kgights who says :Hasenpffer'>>>

匿名函数lanmbda()

)Lambda是一个表达式,而不是一个语句。因为这点。Lambda能够出现在不允许def出现的地方。

2)lambda的主体是一个单个的表达式,而不是一个代码块。
使用lambda好处:lambda起到了一种函数速写的作用,允许在使用的代码内嵌一个函数的定义,
Lambda函数小例子
1)用lambda函数求和

>>> f=lambda x,y,z:x+y+z>>> f(1,2,3)6

2)

>>> def knights():...     title="sir"...     action=(lambda x:title+' '+x)...     return action... >>> act=knights()>>> act('ll')'sir ll'

3)求某数的平方,三次方和四次方

>>> L=[(lambda x:x**2),(lambda x:x**3),(lambda x:x**4)]>>> for i in L:...     print i(2)... 4816>>> print L[0](3)9

4

)>>> ((lambda x:(lambda y:x+y))(99))(4)103>>> action=(lambda x:(lambda y:x+y))>>> act=action(99)>>> act(3)102

转载于:https://www.cnblogs.com/hanfei-1005/p/5703976.html

你可能感兴趣的文章
ajax post 传参
查看>>
2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」
查看>>
[转]Debug 和 Release 编译方式的区别
查看>>
android一些细节问题
查看>>
实验四
查看>>
oracle 建表--序列--插入值
查看>>
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
[转载]Trie树|字典树(字符串排序)
查看>>
Git学习系列 (一)
查看>>
【原】移动web页面使用字体的思考
查看>>
xp sp3安装IIS
查看>>
解决IE6浏览器下PNG图片无法正常显示的问题
查看>>
青蛙的约会 扩展欧几里得
查看>>
看了三遍,沉默了五天,人的一生真的很短暂!
查看>>
(转)接口自动化测试之http请求实践总结
查看>>
jQuery与Ext区别
查看>>
php 图片压缩
查看>>
HDU 1811 Rank of Tetris
查看>>
L - Subway - POJ 2502
查看>>