python使用函数目的_python 定义函数

展开全部

python 定义函数:

在Python中,可以定义包含若干参数的函数,这里62616964757a686964616fe78988e69d8331333337613932有几种可用的形式,也可以混合使用:

1. 默认参数

最常用的一种形式是为一个或多个参数指定默认值。

>>> def ask_ok(prompt,retries=4,complaint='Yes or no Please!'):

while True:

ok=input(prompt)

if ok in ('y','ye','yes'):

return True

if ok in ('n','no','nop','nope'):

return False

retries=retries-1

if retries<0:

raise IOError('refusenik user')

print(complaint)

这个函数可以通过几种方式调用:

只提供强制参数

>>> ask_ok('Do you really want to quit?')

Do you really want to quit?yes

True

提供一个可选参数

>>> ask_ok('OK to overwrite the file',2)

OK to overwrite the fileNo

Yes or no Please!

OK to overwrite the fileno

False

提供所有的参数

>>> ask_ok('OK to overwrite the file?',2,'Come on, only yes or no!')

OK to overwrite the file? test

Come on, only yes or no!

OK to overwrite the file?yes

True

2. 关键字参数

函数同样可以使用keyword=value形式通过关键字参数调用

>>> def parrot(voltage,state='a stiff',action='voom',type='Norwegian Blue'):

print("--This parrot wouldn't", action, end=' ')

print("if you put",voltage,"volts through it.")

print("--Lovely plumage, the",type)

print("--It's",state,"!")

>>> parrot(1000)

--This parrot wouldn't voom if you put 1000 volts through it.

--Lovely plumage, the Norwegian Blue

--It's a stiff !

>>> parrot(action="vooooom",voltage=1000000)

--This parrot wouldn't vooooom if you put 1000000 volts through it.

--Lovely plumage, the Norwegian Blue

--It's a stiff !

>>> parrot('a thousand',state='pushing up the daisies')

--This parrot wouldn't voom if you put a thousand volts through it.

--Lovely plumage, the Norwegian Blue

--It's pushing up the daisies !

但是以下的调用方式是错误的:

>>> parrot(voltage=5, 'dead')

SyntaxError: non-keyword arg after keyword arg

>>> parrot()

Traceback (most recent call last):

File "", line 1, in

parrot()

TypeError: parrot() missing 1 required positional argument: 'voltage'

>>> parrot(110, voltage=220)

Traceback (most recent call last):

File "", line 1, in

parrot(110, voltage=220)

TypeError: parrot() got multiple values for argument 'voltage'

>>> parrot(actor='John')

Traceback (most recent call last):

File "", line 1, in

parrot(actor='John')

TypeError: parrot() got an unexpected keyword argument 'actor'

>>> parrot(voltage=100,action='voom',action='voooooom')

SyntaxError: keyword argument repeated

Python的函数定义中有两种特殊的情况,即出现*,**的形式。

*用来传递任意个无名字参数,这些参数会以一个元组的形式访问

**用来传递任意个有名字的参数,这些参数用字典来访问

(*name必须出现在**name之前)

>>> def cheeseshop1(kind,*arguments,**keywords):

print("--Do you have any",kind,"?")

print("--I'm sorry, we're all out of",kind)

for arg in arguments:

print(arg)

print("-"*40)

keys=sorted(keywords.keys())

for kw in keys:

print(kw,":",keywords[kw])

>>> cheeseshop1("Limbuger","It's very runny, sir.","It's really very, very runny, sir.",shopkeeper="Michael Palin",client="John",sketch="Cheese Shop Sketch")

--Do you have any Limbuger ?

--I'm sorry, we're all out of Limbuger

It's very runny, sir.

It's really very, very runny, sir.

----------------------------------------

client : John

shopkeeper : Michael Palin

sketch : Cheese Shop Sketch

>>>

3. 可变参数列表

最常用的选择是指明一个函数可以使用任意数目的参数调用。这些参数被包装进一个元组,在可变数目的参数前,可以有零个或多个普通的参数

通常,这些可变的参数在形参列表的最后定义,因为他们会收集传递给函数的所有剩下的输入参数。任何出现在*args参数之后的形参只能是“关键字参数”

>>> def contact(*args,sep='/'):

return sep.join(args)

>>> contact("earth","mars","venus")

'earth/mars/venus'

4. 拆分参数列表

当参数是一个列表或元组,但函数需要分开的位置参数时,就需要拆分参数

调用函数时使用*操作符将参数从列表或元组中拆分出来

>>> list(range(3,6))

[3, 4, 5]

>>> args=[3,6]

>>> list(range(*args))

[3, 4, 5]

>>>

以此类推,字典可以使用**操作符拆分成关键字参数

>>> def parrot(voltage,state='a stiff',action='voom'):

print("--This parrot wouldn't", action,end=' ')

print("if you put",voltage,"volts through it.",end=' ')

print("E's", state,"!")

>>> d={"voltage":"four million","state":"bleedin' demised","action":"VOOM"}

>>> parrot(**d)

--This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !

5. Lambda

在Python中使用lambda来创建匿名函数,而用def创建的是有名称的。

python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量

python lambda它只是一个表达式,而def则是一个语句

>>> def make_incrementor(n):

return lambda x:x+n

>>> f=make_incrementor(42)

>>> f(0)

42

>>> f(2)

44

>>> g=lambda x:x*2

>>> print(g(3))

6

>>> m=lambda x,y,z:(x-y)*z

>>> print(m(3,1,2))

4

6. 文档字符串

关于文档字符串内容和格式的约定:

第一行应该总是关于对象用途的摘要,以大写字母开头,并且以句号结束

如果文档字符串包含多行,第二行应该是空行

>>> def my_function():

"""Do nothing, but document it.

No, really, it doesn't do anything.

"""

pass

>>> print(my_function.__doc__)

Do nothing, but document it.

No, really, it doesn't do anything.

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值