python里的类和函数之间_python的类中定义的各个函数(方法)之间有什么关系?它们和所属的类又是什么关系?...

", 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值