python5_python5

本文围绕Python编程展开,介绍了高阶函数sorted的使用,包括对元组、字符串的排序,还讲解了函数作为返回值的情况。同时阐述了匿名函数的特点及使用方式,如传递不同类型参数。最后介绍了装饰器,它是返回函数的高阶函数,可在不修改原函数定义的情况下增强其功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高阶函数——————sorted

排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速

排序,排序的核心是比较两个元素的大小。通常规定如下:

x < y, return -1

x == y, return 0

x > y, return 1

先进入ipython模式,进行以下操作

1.对元组进行排序

In [1]: t=(1,2,5,3,43,35,34)

In [2]: sorted(t)      ##对元组内的元素进行正序排序

Out[2]: [1, 2, 3, 5, 34, 35, 43]

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

...:     if x>y:

...:         return -1

...:     elif x

...:         return 1         ##对元组内的元素进行倒序

...:     else:

...:         return 0

...:

In [4]: sorted(t,reversed_cmp)

Out[4]: [43, 35, 34, 5, 3, 2, 1]

2.对字符串进行排序,按照第一个字符ASCLL码进行排序

In [5]: li=['zhangxuemeng','westos','wangying','redhat','Redhat']

In [6]: sorted(li)      ##如果有大写,大写在前,并且大写小于小写

Out[6]: ['Redhat', 'redhat', 'wangying', 'westos', 'zhangxuemeng']

In [7]: 'westos'

Out[7]: True

In [9]: def ignore_case_cmp(x,y):

...:     lower1=x.lower()

...:     lower2=y.lower()

...:     if lower1

...:         return -1           ##统一按照小写排序

...:     elif lower1>lower2:

...:         return 1

...:     else:

...:         return 0

...:     sorted(li,ignore_case_cmp)

...:

In [10]: sorted(li,ignore_case_cmp)

Out[10]: ['redhat', 'Redhat', 'wangying', 'westos', 'zhangxuemeng']

3.函数作为返回值

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回

(1)def wrap_sum(*args):

def my_sum():

sum_num=0

for i in  args:

if not isinstance(i,(int,float)):

print 'error type'

sum_num=sum_num +i

return sum_num

return my_sum

f=wrap_sum(1,2,3,6)

print f()

##调用 warp_sum() 时,返回的并不是求和结果,而是求和函数f()

##调用f(),运行my_sum函数进行计算求和

测试:

(2)def wrap_sum(*args):

def my_sum():

sum_num=0

for i in  args:

if not isinstance(i,(int,float)):

print 'error type'

sum_num=sum_num +i

return sum_num

return my_sum

f1=wrap_sum(1,2,3,6)

print f1()

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

print f2()

if f1==f2:

print "true"

else:

print "fluse"

测试:

4.匿名函数

(1)当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。

(2)关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数

(3)匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。

(4) 因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对

象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数

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)

练习:利用匿名函数和字典重新编辑计算器的代码

oper=raw_input("oper:")

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](3,2)

测试:

##########装饰器###########

装饰器就是用来装饰函数。

想要增强原有函数的功能;

但不希望修改now()函数的定义;

在代码运行期间动态增加功能的方式;

定义的装饰器实质是返回函数的高阶函数

import time

def timmer(func):

def dec():

start_time=time.time()

func()

stop_time=time.time()

return "%s run %f s"%(func.__name__,stop_time-start_time)

return dec

@timmer     ###hello1=timmer(hello1),语法糖

def hello1():

print 'hello1.....'

time.sleep(2)

print hello1()

测试:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值