python高阶函数

# **********************   sorted高阶函数 *****************************

ipython交互式环境中测试:

In [1]: help(sorted)

In [2]: t = (12,34,1,24,37)

In [3]: sorted(t)
Out[3]: [1, 12, 24, 34, 37]

In [4]: def reversed_cmp(x,y):

   ...:    if x>y:
   ...:        return -1
   ...:    elif x < y:
   ...:        return 1
   ...:    else:
   ...:        return 0
   ...:    

In [5]: sorted(t,reversed_cmp)
Out[5]: [37, 34, 24, 12, 1]

In [6]: li = ['xiaowenya','haoningning','wangying']

In [7]: sorted(li)
Out[7]: ['haoningning', 'wangying', 'xiaowenya']

In [8]: li = ['xiaowenya','haoningning','wangying','Haoningning']

In [9]: sorted(li)
Out[9]: ['Haoningning', 'haoningning', 'wangying', 'xiaowenya']

In [11]: def ignore_case_cmp(x,y):
   ....:    lower1 = x.lower()
   ....:    lower2 = y.lower()
   ....:    if lower1 < lower2:
   ....:        return -1
  ....:    elif lower1 >lower2:
   ....:        return 1
   ....:    else:
   ....:        return 0
   ....:    

In [13]: sorted(li,ignore_case_cmp)
Out[13]: ['haoningning', 'Haoningning', 'wangying', 'xiaowenya']

```
# ****************
 
函数作为返回值(闭包) *****************************
#
示例1:
def wrap_sum(*args):
    def my_sum():    # (1,2,3,4)
       sum_num = 0
       for i in args:
           if notisinstance(i,(int,float)):
               print 'Error Type'
           sum_num = sum_num + i
        return sum_num
    return my_sum

# print my_sum(1,2,3,6)
f1 = wrap_sum(1,2,3,6)
print f1
# print f1()

f2 = wrap_sum(1,2,3,6)
print f2



#
示例2
def count():
    fs = []
    for i in range(1,4):
       def f():
           return i*i
       fs.append(f)
    return fs


f1,f2,f3 = count()
print f1()
print f2()
print f3()



# def hello():
#
    print 'hello....'
# print hello
# hello()

##
解决方案:再嵌套一个函数
def count():
    fs = []
    for i in range(1,4):   # i=1
       def f(j):
           def g():
               return j*j
           return g
       fs.append(f(i))  # fs.append(f(1)) fs=[]
    return fs


6f1,f2,f3 = count()
print f1()
print f2()
print f3()

# **********************
   
匿名函数   **************************
# [1,2,3...10]
# [1,4,9,....100]
#
匿名函数的优势:
#
   1).
匿名函数不需要函数名,可以避免函数名的冲突;
#  2).
匿名函数可以跳过给函数分配栈空间;

def pow1(x):
    return x*x
print map(pow1,range(1,11))

print map(lambda x:x*x, range(1,11))


#
匿名函数可以赋值给一个变量,需要运行时,变量名()
f = lambda :1
print f()


#
匿名函数传递必选参数和默认参数
f = lambda x,y=2:x**y
print f(2,3)
print f(2)

#
匿名函数传递可变参数
f = lambda *x:map(lambda x:x+x,x)
print f(1,2,3,4)

#
匿名函数传递关键字参数
f = lambda **kwargs:kwargs.items()
print f(name="fentiao",age=5)

#
练习:利用匿名函数和字典重新编辑计算器的代码。
from __future__ import division
x = input('num1:')
oper = raw_input('operator:')
y = input('num2:')
d = {
    "+": lambda x, y: x +y,
    "-": lambda x, y: x -y,
    "*": lambda x, y: x *y,
    "/": lambda x, y: x /y
}
if oper
 not in d.keys():
    print 'input +,-,*,/'

print d[oper](x,y)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值