python第6课(函数,内置高阶函数,匿名函数,装饰器)笔记

本文介绍了Python中的函数概念,包括变量的作用域(局部、全局、外部函数),函数变量、偏函数的使用,以及内置的高阶函数如map、reduce、filter和sorted。此外,还讨论了匿名函数和装饰器,如闭包和如何实现行为修改。
摘要由CSDN通过智能技术生成

一,函数(下)

1.1变量的作用域

变量名的查找规则;
在访问变量时,先查找本地变量,然后是包裹此函数的外部函数的内部变量,之后是全局变量,最后是内置变量
1 在函数内使用全局变量

v = 100
def function():
    global v    #声明全局变量v
    v = 200     #改变全局变量v
    print(v)
function()
print(v)

执行结果
200
200

2使用nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量

v = 100
def function():    
    v = 200     
    def inner():
        nonlocal v #指定v为外层嵌套的作用域
        print(v)
    inner()
function()
print(v)

执行结果
200
100

1.2函数变量

函数名是变量,它在创建函数时绑定一个函数对象

def fn():
    print(1)
f1 = fn
f1()
print(type(f1))

执行结果
1
<class 'function'>

1.3偏函数

函数有很多参数时,如果固定一些参数,可以利用functools模块Partial得到一个偏函数,方便以后的使用。

print(int('123'))
print(int('11001',base=2)) #2进制转换成整形

执行结果
123
25

可以设置偏函数

import functools
int2 = functools.partial(int,base=2)
print(int2('10110'))

执行结果
22

二,python中内置的高阶函数

python中内置的高阶函数map,reduce,filter,sorted可以用来结构的封装

2.1 map函数

map(func,*iterable)把迭代器内的n个元素都进行func运算

def power2(x):
    return x**2
mit = map(power2,range(1,5))
print(type(mit))
for i in mit:
    print(i)

执行结果
<class 'map'>
1
4
9
16

2.2 reduce函数

reduce()函数会对参数序列中的元素进行函数运算后累积

from functools import reduce  

def fun1(x,y):
    return x*y
a = reduce(fun1, range(1,5))
print(a)

执行结果
241*2*3*4

2.3 filter函数

筛选可迭代对象中的数据,返回一个课迭代对象

import functools

def fun1(x):
    return x%2 == 1
a = filter(fun1, range(1,5))
for i in a:
    print(i)

执行结果
1
3

2.4sorted函数

newlist = sorted(listname,key=None,reverse=False)
listname为目标列表,key表示指定一个从每个列表元素中提取一个比较的键,reverse为可选参数,当指定为True时为降序,如果为Flase则为升序。默认为升序。

my_list = [2,1,3,5,4,6,8,9,7,10]
my_list.sort()#这种格式是直接在列表后使用sort()函数
b = sorted(my_list)#这种方式是定义一个新列表来存放排序过的序列
print(b)
print(my_list)

执行结果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

三, 匿名函数

lambda [参数1,参数2.。] : 表达式
作用:创建一个无名函数对象,通def类似,但不提供函数名
用途:在有些场合下不需要取名字,只要在这个地方用一下

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

可以改写成:

myadd = lambda x,y : x+y
print("20+30=",myadd(20,30))

执行结果
20+30= 50

四,装饰器

4.1 闭包

说明:如果一个内嵌函数访问函数外部作用域的变量,则这个函数就是闭包
例:

def make_power(x):
    def fn(arg):
        return arg ** x
    return fn
f2 = make_power(2)
print(f2(10))
f3 = make_power(3)
print(f3(10))

执行结果
100
1000

4.2 装饰器

目的:在不改变函数名的情况下,改变了包装函数(对象)的行为

def 装饰器函数名 (参数):
	函数块
	return 函数

例:

def msg_service(fn):
    def servemoney2(name,x):
        print("欢迎存钱")
        fn(name,x)
        print("存钱结束")
    return servemoney2
    
@msg_service
def servemoney(name,x):
    print(name,'存了',x,'元')
servemoney("小张",100)

#@msg_service的作用相当于servemoney = msg_service(servemoney)

执行结果
欢迎存钱
小张 存了 100 元
存钱结束
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值