函数的笔记

目录

一、


一、函数的作用域

函数中变量的作用域:
          全局变量 局部变量
函数内部可以使用全局变量,但是不能修改,如果一定要在函数内部修改全局变量,那么用global

二、函数的值传递、引用传递

函数的值传递、引用传递:
值传递:在传递参数的时候,仅仅是将自己的值拷贝了一份,传递给了函数的参数,变量不会改变

def test_01(x,y):
    x += 10
    y += 100
    print(x)
    print(y)

a=10
b=20
test_01(a,b)
print(a)
print(b)


引用传递:在传递参数时,传地址,函数形参获取的值也是同一块内存

三、匿名函数:

function(){}
在python中,将一个函数作为参数传到另一个函数中去
函数的参数数据类型:只要是一个对象就可以
函数本身就是一个对象
test_fuc(lambda a ,b:a+b)【:后面是return值】
lambda【arge1,arge2……】:代码块(函数体)
存在函数作为参数传递给函数,并且又不想让外界访问,而且参数函数足够简单,即可以定义为匿名函数【lambda表达式】
_ _name_ _,拿到函数的名字

四、函数嵌套:

1函数可以作为返回值返回
2函数可以作为参数进行传进
3函数名本质上是一个变量名,指向函数的内存地址

def fun1():
    b=20
    def fun2():#近似看为 fun2=def(){}
        print(b)
    return fun2()
a = fun1()

五、闭包

内层函数如果要改变外层局部变量的值,需要使用nonlocal关键字赋予权限

闭包可以让一个变量常驻在内存中
#可以避免全局变量被修改

def outer():
    a=1

    def inner():
        #内层函数如果要改变外层局部变量的值,需要使用nonlocal关键字赋予权限
        nonlocal a
        a += 1
        print(a)
    return inner()

a= outer()
a()
a()

六装饰器

装饰器本质上是一个闭包,作用是不改变原有函数的前提下,为函数添加新的功能,但是源代码不变
用户登录
日志

表达式雏形:

def wrapper(目标函数)
def inner()

原函数可能有形参,所以用可变参数【*args】

def guanjia(fn):
    def inner():
       print("开挂")
       fn()
       print("关闭外挂")

    return inner

@guanjia #哪里需要就哪里@   play_wz =guanjia(play_wz)
def play_wz():
    print("来和妲己玩耍吧")

@guanjia
def  play_dnf():
    print("你好呀,我是赛利亚,今天又是美好的一天")

play_wz()
play_dnf ()

七偏函数

偏函数:
functool模块提供了很多方法,其中一个就是偏函数

import functools
int2 = functools.partial(int,base=2)#定义为2进制,别人改不了
print(int2("10010"))

八、高阶函数

高阶函数:
map():将来可以调用的额,可迭代数据
从可迭代对象中获取第一个元素,作为函数的参数,传入函数中,将函数执行后返回结果作为生成对象中的第一个元素
最终返回一个可迭代对象

a = map(lambda x:x*x,[1,2,3])
print(list(a))
for i in a:
    print(i)


filter()过滤:过滤对指定的序列执行过滤  只要成立(为真:0为假,其余数字为真)

a = filter(lambda x: x % 2, [1, 2, 3, 4])
print(list(a))


reduce():用上一次计算的结果作为下一次传入的x值,如果上一次没有计算结果,则将可迭代数据的强两个元素分别作为x,y传入
如果有额外数据,会作为第一次传入的x值
 

from functools import reduce

a = reduce(lambda x, y: x+y, [1, 2, 3, 4])
print(a)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值