欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python的高阶函数

程序员文章站 2024-03-26 09:44:29
...

高阶函数

高阶函数
-实参是一个函数名
-函数的返回值是一个函数

  print(abs(10))    ##绝对值
函数本身也可以赋值给变量 变量可以指向函数
f = abs
print(f(-10))   ##对-10取绝对值
def fun(x,y,f):
    return f(x),f(y)
print(fun(-10,34,abs))    ##对-10,34进行取值

内置高阶函数map

map():接收两个参数,一个是函数 一个是序列
map将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回

#对一个序列[-1,3,-4,-5]的每一个元素求绝对值

import random
print(list(map(abs,[-1,3,-4,-5])))

对每个元素求阶乘

def f(x):
    """对x求阶乘"""
    res = 1
    for i in range(1,x+1):
        res = res * i
    return res
--------------------------------------------------------
li = [random.randint(2,7) for i in range(10)]
print(li)

print(list(map(f,li)))

内置高阶函数reduce

reduce():把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算

reduce(f,[x1,x2,x3,x4]) = f(f(x1,x2),x3),x4)

python2中:reduce是内置函数
python3:from functools import reduce

计算1-10的乘积
from functools import reduce
def multi(x,y):
    return x*y
print(reduce(multi,range(1,10)))
计算1-100的和
from functools import reduce
def add(x,y):
    return  x+y
print(reduce(add,range(1,101)))

高阶函数的练习

将一个字符串转换成整型

‘332.31321’
‘0’:0
‘1’:1

from functools import reduce
def str2int(s):
    def char2int(ch):
        c = {str(x):x for x in range(10)}
        #print(c)
        return c[ch]
    def fun(n1,n2):
        return n1 * 10 + n2
    return reduce(fun,map(char2int,s))

num = str2int('12343')
print(type(num),num)

内置高阶函数filter

filter函数
和map()类似的,也接收一个函数和一个序列
但是和map()不同的是,filter()把传入的函数依次作用于
每个元素,然后根据返回值是True或者False决定保留还是丢弃该元素
def isodd(num):
    if num % 2 ==0:
        return True
    else:
        return False
print(list(filter(isodd,range(100))))

匿名函数

匿名函数的关键字为 lambda
冒号前面是 形参 冒号后面是返回值

from functools import reduce

def add(x,y):
    return x+y

print(reduce(add,range(10)))
print(reduce(lambda x,y:x+y,range(10)))

# def mypow(x):
#     return x **2
print(list(map(lambda x:x**2,range(5))))

# def isood(num):
#     return num%2 ==0
# print(isood(11))

print(list(filter(lambda x:x%2==0,range(100))))

高阶函数的练习

1.利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字

def normalize(name):
   name=name[0].upper()+name[1:].lower()
   return name
name = []
name.append(input(''))
L2 = list(map(normalize, name))
print(L2)

2.利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456


3.回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数


字符串的补充

快速生成验证码(内推码)

import random
import string   ##随机字符串的库

# code_str1 = string.ascii_lowercase
# code_str2 = string.ascii_uppercase
# # print(code_str1,code_str2)
# print(string.ascii_letters)
# print(string.digits)
code_str = string.ascii_letters + string.digits
print(code_str)

# print(random.sample(code_str,4))

def gen_code(len=4):
    # code = ''
    # for i in range(len):
    #     new_s = random.choice(code_str)
    #     code += new_s
    # return code
    return ''.join(random.sample(code_str,len))
# print(gen_code(8))
print([gen_code(10) for i in range(1000)])

内置高阶函数

list = [6,8,9,1,3,4,5,6,8,9]
# list.sort()
# print(list)
# 不改变原来的列表内容 生成一个新的列表
# list2 = sorted(list)
# print(list2)
# print(list)
# list2 = [6,-8,-9,-1,3,4,5,6,8,9]
# list2.sort()
# print(list2)
# list3 = sorted(list2,key=abs)
# print(list3)
#
# s = ['fdsf','Ffsdf','dsa','ERW']
# print(s)
# print(sorted(s))
# print(sorted(s,key=str.lower))
# print(sorted(s,key=str.upper))

info = [
    # 商品名称,商品数量,商品价格
    ('apple1',200,32),
    ('apple2', 40, 12),
    ('apple3', 1000, 23),
    ('apple1', 40, 2),
    ('apple1', 40, 5),

]

# 按照商品数量进行排序
def sorted_by_count(x):
    return x[1]
# 按照商品价格进排序
def sorted_by_price(x):
    return x[2]
# 先按照商品数量进行排序,如果商品数量一致
# 则按照商品价格进行排序
def sorted_by_count_price(x):
    return x[1],x[2]

print(sorted(info,key=sorted_by_count))
print(sorted(info,key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))

(2018-携程-春招题)题目需求:
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
输入:
第一行是数组长度, 后续每一行是数组的一条记录;
4
0 2
7 1
0 2
2 1
输出:
调整后数组的内容;
7
2
0
0

n = int(input())

li = [int(input()) for i in range(n)]

def move_zore(item):
    if item ==0:
        return 2
    else:
        return 1
for i in sorted(li,key=move_zore):
    print(i)