python高阶函数

*参数传递*

*参数传递机制*

"""

函数参数传递机制和赋值机制是一样的,其本质就是传递内存地址,这就是引用传递

a传进来的时候传进来的是内存地址

如果实在不理解,你可以以为是 x= a

"""

def isid(x):

#打印参数的内存地址

print(id(x))



a = 10

#变量的内存地址

print(id(a)) #140731588047408



#a变成的参数,打印参数内存地址

isid(a) #140731588047408

*默认参数*

#定义一个带有默认参数的函数

def add(x,y=10):

sum01 = x+y

return sum01



"""

1.add(2) x=2 y=10

2.add(2,3) x=2 y=3

"""

print(add(2)) #12

print(add(2,3)) #5

"""

能不能传参传入一个序列类型,比如list,让他默认是[]

"""

def add(list01 = []):

list01.append(1)

return list01



#第一调用

print(add()) #[1]

#第二次调用

print(add()) #[1, 1]

#第三次调用

print(add()) #[1, 1, 1]

python高阶函数_第1张图片

 

*不定数目的参数*

*一个 **

"""

一个* :代表的是可变参数(就是可以是多个值)

"""

def add(x,*y):

sum01 = x

for i in y:

sum01 += i

return sum01



print(add(1,2,3,4,5)) #15

*两个**

"""

**y代表可以使用任意 键值(字典) 作为参数

**y就相当于字典类型

"""

def func_add(x,**y):

sum01 = x

#切记这里是字典的循环

for k,v in y.items():

print(k,v)

#把v(值)进行和x相加

sum01 += v

return sum01

"""

调用

a=3,b=4,c=5 ----> {"a":3,"b":4,"c":5}

"""

print(func_add(1,a=3,b=4,c=5)) #13

*name*

1. *执行本文件的时候,name==main*

#打印name这个属性

#执行本文件的时候,打印的是main,name == main

print("1、"+name) #1、main

*2.在被import导入到别的文件的时候,name==文件名字*

"""

一个文件就是一个模块,导入模块,就相当于导入文件,可以直接写

import 文件名字

"""

import 本文件 as bwj

#在其他类中运行导入的文件名字,name==文件名字

print(bwj.name) #本文件

*高阶函数*

*定义*

高阶函数是一个( 以函数为参数,或者以函数为返回值的)函数

函数可以是参数,参数是变量,那么函数可以是变量吗

参数其实就是变量进行了赋值,函数能不能是变量

*函数为变量(补充)*

函数为变量并不是高阶函数,只是和大家补充这个知识点

"""

函数为变量

"""

#定义一个函数,传入一个参数,求这个参数的平方

def func_pf(x):

return pow(x,2)

#字典

#已知李四的年龄是5的平方,求李四的年龄

dict01 = {"张三":20,"李四":func_pf}



"""

调用

1.func_pf = dict01["李四"] 根据key获取value,vaule是一个函数对象

2.age02 = func_pf(5) #调用函数就能获取年龄

"""

#字典的特点是根据key获取value

age01 = dict01["张三"]

print(age01) #20



#顾名思义,通过李四,我们可以拿到函数func_pf

#拿到的是函数对象,我们不能直接打印

func_pf = dict01["李四"]

print(func_pf) #



age02 = func_pf(5)

print(age02) #25

*函数为参数*

*定义*

#普通函数

def func_pf(x):

return x**2

#高阶函数,以函数为参数

def func_add(func_pf):

#x**2+10

return func_pf+10



#2**2+10

a = func_add(func_pf(2))

print(a) #14

*常用的高阶函数*

这些常用的高阶函数是以函数为参数的高阶函数

*m**ap(****)***

*定义*

"""

map(fun,x) 转换,接受一个序列,按照fun的函数逻辑转换成新的序列,返回一个map对象

\1. x必须是一个序列

\2. 返回一个map对象

"""

*代码*

def func_add(x):

return x+1

"""

把原来的数据,经过func_add函数以后,每一个都加1,然后输出新的列表

"""

m = map(func_add,[1,2,3,4,5])

print(m) #

print(list(m)) #[2, 3, 4, 5, 6]

*filter()*

*定义*

"""

filter(func,x) 过滤,接受一个序列x,按照func函数要求进行转换,

func函数返回 True 或 False,最后将返回 True 的元素放到新列表中。

返回filter对象

"""

*代码*

def func_ifScore(x):

#比较运算符,本身就是返回布尔值的

#如果大于等于60就是Ture,否则就是False

return x>=60

f = filter(func_ifScore,[80,98,70,34,60,59,10])

print(f) #

print(list(f)) #[80, 98, 70, 60]

*reduce()*

*定义

reduce(func,x) 计算,接受一个序列,把列表中的每一个值按照函数进行累加或者别的运算

返回一个计算数值

1.因为是计算,所以我们的func是两个参数

2.必须要导包

*代码*

"""

#累加 1+2+3+4+5

def func_add(x,y):

return x+y



a = reduce(func_add,[1,2,3,4,5])

print(a) #15



你可能感兴趣的:(python)