"""
函数参数传递机制和赋值机制是一样的,其本质就是传递内存地址,这就是引用传递
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]
"""
一个* :代表的是可变参数(就是可以是多个值)
"""
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这个属性
#执行本文件的时候,打印的是main,name == main
print("1、"+name) #1、main
"""
一个文件就是一个模块,导入模块,就相当于导入文件,可以直接写
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) #
*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