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

这篇具有很好参考价值的文章主要介绍了python第6课(函数,内置高阶函数,匿名函数,装饰器)笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,函数(下)

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 函数

例:文章来源地址https://www.toymoban.com/news/detail-679256.html

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 元
存钱结束

到了这里,关于python第6课(函数,内置高阶函数,匿名函数,装饰器)笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 系统学习Python——单元测试unittest:内置装饰器

    分类目录:《系统学习Python》总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测试unittest:执行测试用例 · 单元测试unittest:用例执行次序 · 单元测试unittest:内置装饰器 · 单元测试unittest:命令行执行测

    2023年04月13日
    浏览(31)
  • 匿名函数和常见是内置函数(配合匿名使用)和for循环的原理,异常的捕获

    匿名函数 常见的内置函数(配合匿名函数使用) 可迭代对象 迭代器对象 for循环内部原理 异常捕获

    2024年02月09日
    浏览(38)
  • Scala的函数式编程与高阶函数,匿名函数,偏函数,函数的闭包、柯里化,抽象控制,懒加载等

    函数式编程 解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题。 例如:请求-用户名、密码-连接 JDBC-读取数据库 Scala 语言是一个完全函数式编程语言。万物皆函数。 函数的本质:函数可以当做一个值进行传递

    2024年02月09日
    浏览(43)
  • 第5章 函数式编程**-函数和方法,高阶函数,匿名函数,函数柯里化,闭包,递归,控制抽象(传值参数,传名参数),惰性加载...

    1)面向对象编程 解决问题,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题。 对象:用户 行为:登录、连接 JDBC、读取数据库 属性:用户名、密码 Scala 语言是一个完全面向对象编程语言。万物皆对象 对象的本质:对数据和行为的一个封装 2)函数式编

    2023年04月10日
    浏览(71)
  • 【MySQL学习笔记】(七)内置函数

    获得当前年月日 获得当前时分秒 获得当前时间戳 mysql中该函数会自动将时间戳转化为年月日时分秒的格式 date(datetime),返回 datetime 参数中的日期部分(年月日部分) 在日期的基础上加上日期 在日期的基础上减去日期 计算两个日期相差多少天 创建一张表,记录生日 添加当前

    2024年02月09日
    浏览(28)
  • 系统学习Python——装饰器:函数装饰器-[添加装饰器参数:基础知识]

    分类目录:《系统学习Python》总目录 前面文章介绍的计时器装饰器有效运行,但是如果它可配置性更强的话,就会更好一一一例如提供一个输出标签并且可以打开或关闭跟踪消息,这些在一个多用途工具中可能很有用。装饰器参数在这里派上了用场:对它们适当编写后,我们

    2024年02月22日
    浏览(31)
  • Python笔记2(函数参数、面向对象、装饰器、高级函数、捕获异常、dir)

    Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill、endswith、open) 参数定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开。 定义

    2024年02月08日
    浏览(38)
  • 【0基础入门Python笔记】三、python 之函数以及常用内置函数

    函数是一种用于封装可重复使用代码块的工具,能够将一系列操作组织成一个逻辑单元。 函数定义 在Python中,函数通过def进行定义,后面跟着函数的名称、参数列表和冒号。函数的主体代码块缩进,并在需要时使用return返回值。 在上面的示例中,我们定义了一

    2024年02月12日
    浏览(57)
  • 如何使用Python内置缓存装饰器: @lru_cache,@cache 与 @cached_property

    使用缓存是优化Python程序速度的重要方法之一 。如果使用得当,可以大幅减少计算资源的负载,有效加快代码运行速度 Python 的内置库 functools 模块附带了 @lru_cache,@cache, @cached_property 装饰器,使用非常简便,不需要安装第3方库,不需要 redis 等数据库保存对象等,通常只需要

    2024年02月11日
    浏览(34)
  • 【Python基础】Python函数(匿名函数)

    Q:如果一个函数要有 多个返回值 ,该如何书写代码? 按照返回值的顺序,写对应顺序的多个变量接收即可 变量之间用逗号隔开 支持不同类型的数据return (1)位置参数 位置参数:调用函数时根据函数定义的 参数位置来传递参数 Tip:传递的参数 和 定义的参数 顺序及个数必须

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包