标签:
---恢复内容开始---
11.1.1函数和过程
函数可以不带参数,最后返回一个值,
过程是简单,特殊,没有返回值的函数。
返回的对象的数目 | python实际返回的对象 |
0 | .None |
1 | object |
>1 | tuple |
11.2.2关键字参数
你可以按顺序输入对应的参数也可以显式的给定参数
比如:def foo(x) foo(x = 2)
11.2.4参数组
你可以向函数传递没有显式定义的参数,比如元组和字典
func(positional_args,keyword_args,*tuple_grp_nonkw_args, **dict_grp_kw_args)
1 from operator import add, sub 2 from random import randint, choice 3 4 ops = {‘+‘:add, ‘-‘:sub} 5 MAXTRIES = 2 6 def doprob(): 7 op = choice(‘+-‘) 8 nums = [randint(1,10) for i in range(2)] 9 nums.sort(reverse = True) 10 ans = ops[op](*nums) 11 pr = ‘%d %s %d=‘%(nums[0], op, nums[1]) 12 oops = 0 13 while True: 14 try: 15 if int(raw_input(pr)) == ans: 16 print "correct" 17 break 18 if oops == MAXTRIES: 19 print ‘answer\n %s%d‘%(pr,ans) 20 else: 21 print‘incorrect... try again‘ 22 oops += 1 23 except (KeyboardInterrupt, 24 EOFError, ValueError): 25 print ‘invalid input...try again‘ 26 27 def main(): 28 while True: 29 doprob() 30 try: 31 opt = raw_input(‘Again? [y]‘).lower() 32 if opt and opt[0] == ‘n‘: 33 break 34 except(KeyboardInterrupt, EOFError): 35 berak 36 if __name__ == ‘__main__‘: 37 main()
这是一个让人解算术题的程序
11.3.5内部/内嵌函数
在函数的内部定义函数时,这个函数的作用域是它的外部函数。
如果内部函数的定义里包含了对在外部函数里定义的对象的引用(或者说这个对象在外部函数之外),
这时内部函数将是一个闭包(closure)
11.3.6函数装饰器
装饰器看起来是这样的:
@decorator()
def func2Bdecorated(func_opt_args):
效果相当于
def func2Bdecorated(func_opt_args):
func2Bdecorated = decorator(func2Bdecorated)
之前的例子中装饰器没有参数,现在给出有参数的例子:
@deco1(deco_arg)
@deco2
def func():pass
相当于
func = deco1(deco_arg) (deco2(func))
通过一个例子更好的理解装饰器:
from time import ctime, sleep def tsfunc(func): def wrappedFunc(): print ‘[%s] %s() called‘ % (ctime(), func.__name__) return func() return wrappedFunc @tsfunc def foo(): pass foo() sleep(4) for i in range(2): sleep(1) foo()
标签:
原文地址:http://www.cnblogs.com/autoria/p/4488790.html