python5

高阶函数——————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<y:

...:         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‘<‘zhangxuemeng‘

Out[7]: True

In [9]: 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

...:     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()

测试:

时间: 2024-12-14 11:22:00

python5的相关文章

python5 购物车

设置商品列表.价格列表.购物车列表 用户输入自己的工资 显示商品和价格列表,供用户选择购买 用户输入想购买的商品 假如工资>=商品价格,则假如购物车,反之不能加入购物车 工资随购买商品价格递减,直到无法购买最便宜的商品时,提示并退出 #!/usr/bin/env python import sys products = ['Car','Iphone','Coffee','Mac','Cloths','Blcyle'] #商品名称 prices = [250000,4999,35,10000,43

自学Python5.3-类和对象的操作

自学Python之路 自学Python5.3-类和对象的操作 面向对象编程的2个非常重要的概念:类和对象 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9854607.html

Python--5 列表~一个打了激素的数组

整数 浮点数 字符串 对象 创建列表 方式一:创建一个普通列表 >>>member = ['jhon', 'dog', 'pig' ] >>>member ['jhon', 'dog', 'pig' ] 方式二: 创建一个混合列表 >>>mix = [1, 'fish', 3.14, [1, 2, 3]] 方式三:创建一个空列表 >>> empty = [] 向列表添加元素: append() >>> member.

python5字典列表

一 变量# 变量是用一个变量名来表示,变量必须有大小变量名的开头不能是用 下滑线数字开头的#:变量没有处置功能只是定义个名字只是绑定功能二列表# 定义:[]内用逗号分隔,按照索引,存放各种类型,每个位置代表一个元素的特性# 1,可以存放多个值# 2可以修改指定的索引位置对应的值,是可变的类型(可变类型的定义:是id 不变 type不变值变的过程)# 1列表的一些操作方法: # c=["alex","wang"] # for i in range (len(c)):

python-5

条件语句 循环语句 条件语句 流控制语句-分支结构 if 条件: 语句执行 else: 执行语句 if 条件: elif: elif: else: 练习: 价格大于等于五百以后打印出价格或者显示原价 jiage=input('...')if jiage >=500 :        print int(jiage)*0.8else:        print jiageround(价格,2) 取变量后的两位小数截止. 无限个商品,总价大于500则八折,小于五百不打折输出各种信息 c=0jiage

一起入门python5之for循环

昨天中午本来写了的,结果手贱了一下ctrl+x以后又去复制了别的东西.结果所有写的都没有了.蛋疼.继续写吧.今天来说for循环即条件判断>>> age = 20        #首先将20赋值给age,通俗的说就是年龄二十岁.>>> if age >= 18:                   #如果大于等于十八就输出你是成年人否则输出第二条语句...     print "你是成年人了"... else:...     print &quo

零基础学python-5.4 数字精度与复数

1.整数精度 这里我们对照一下python2.7与python3.4的整数精度 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > python3.4支持无限大的整数(取决于你的内存),而在2.7版本号里面,他支持有限的整数长度,对于很长的整数,他会在数字后面加上L代表Long intege类型 尽管支

零基础学python-5.1 数字简单介绍

1.创建数值对象并赋值 a=1#整数 b=1.1#浮点数 c=1.23e5#实数 d=1.23+4.56j#虚数 2.更新数值对象 注意:由于数值对象是不可变,所以与其说更新,还不如说把变量名从一个对象摘下,贴到还有一个新的对象上去 从上图能够看见尽管相同赋值1000,可是两者的id是不同的,代表不同的对象,仅仅只是是值相同而已 3.删除数值对象 依据第二点,事实上一般所谓的删除事实上就是不使用那个数值对象,假设严格来说删除,那么就须要用到del这个keyword 在运行del操作之后,a事实上

Python-5 数据类型、操作符

#1 数值类型: 整型int.浮点型float(科学记数法 e 或 E).布尔型bool #2 字符串: 与整型.浮点型转化:int()--截断处理 float() str() #3 获取数据类型: type(): >>> type(5.2) <class 'float'> >>> type(True) <class 'bool'> isinstance(): >>> isinstance(5.2,float) True >