函数-高级用法+闭包

news/2025/10/2 11:39:08/文章来源:https://www.cnblogs.com/guohan222/p/19123124

   函数:增加代码可读性和重用性

   定义函数(3种形式):

def funk()    def funk(a,b)    def funk(*args,**kwargs)

   调用函数(高级用法):

           1.函数做元素:

2种形式
def funk1 ():print(888)
def funk2():print(222)
content = [funk1(),funk2()] #将funk函数运行后的结果放到列表中,无return默认返回None
print(content)>>>[None, None]def funk1 ():print(888)
def funk2():print(222)
content = [funk1,funk2] #将函数(地址)放到列表中
print(content)>>>[<function funk1 at 0x0000017D5ADA4168>, <function funk2 at 0x0000017D5ADA41F8>]

          2.可被赋值给变量:

示例
def greet(name):return f"Hello, {name}!"# 将函数 greet 赋值给变量 say_hello
say_hello = greet# 通过变量 say_hello 调用函数
print(say_hello("Alice"))  # 输出: Hello, Alice!

          3.函数可作参数:

def funk1 (a):a()
def funk2():print(222)
print(funk1(funk2))
>>>222
>>>None

          4.函数可作返回值:

  闭包:

形成条件:一个函数(外部函数)里面含有另外一个函数(内部函数)且外部函数返回内部函数,而且内部函数使用了外部函数被调用时创建的局部作用域中的变量,则当外部函数被调用时(a = funk1())内部函数被返回到a上,内部函数随时可以a()进行调用,则外部函数调用时创建的局部作用域不会被消除,因此形成了闭包且此局部作用域为内部函数的父级作用域

为什么有闭包:为函数创建一块区域以后执行时方便调用

#无闭包情况
a = "guohan"
def funk1 ():a = "gh"print(a)return funk2
def funk2():print(a)
b = funk1()
b()
>>>gh
>>>guohan
#有闭包情况1
a = "guohan"
def funk1 ():a = "gh"print(a)def funk2():print(a)return funk2
b = funk1()
b()
>>>gh
>>>gh
#有闭包情况2
a = "guohan"
def funk1 ():a = "gh"print(a)def funk2():global a #声明这里funk2函数使用全局变量aa = "gg"print(a)return funk2
b = funk1()
b()
>>>gh
>>>gg

   简单函数lambda表达式:    lambda  参数:表达式      表达式:有返回值无赋值语句的代码(x+=1:赋值语句)

        eg:v = lambda x: x+1 if x>100 else x

        eg:v = lambda x:x>44    print(v(2))>>>False

 

  内置函数(初级):

        输入输出:print,input

        强制转换:int,str,float,bool,list,dict,tuple,set

        数学相关:

max ,min ,sum    eg:

 
v = [1,2,3]
result = max(v)或者result = sum(v)
print(result)

abs:求绝对值

round:保留小数(四舍五入)  round(1.237,2)>>>1.24

pow:求指数  pow(2,3)>>>8

divmod:求商和余数(用于网页对数据进行分页查看)    a,b = divmod(101,5)>>>a = 20  b = 1

数据分页查看
USER_LIST = [...........]
page_content = 7 #每页数据数
A,B = divmod(len(USER_LIST),page_content)
A = A+1 if B>0 else A #A为总页数
def page(a):if a in range(1,A+1):for item in USER_LIST[page_content*(a-1):page_content*a]:print(item)else:return "无页码"
get = int(input("页码:"))
page(get)

        进制转换相关:

          十进制转2(0b开头),8(0o),16(0x):bin,oct,hex

          2,8,16转十进制:int(str,base = str表达的是几进制)  eg:result = int("1010",base = 2)

        其他:len,type,id

   内置函数(高级):

        map:遍历序列,对序列中每个元素进行操作,最终获取新的序列。

image

         用法:map = (函数,可迭代对象)      最终得到一个包含所有结果的迭代器需要用list()/tuple()等转换为可见结构

#单个可迭代对象
v = [1,2,3]
result = list(map(lambda x:x + 100,v))
print(result)
#多个可迭代对象(函数参数的数量得正确)
v1 = [1,2,3]
v2 = [4,5,6]
result = list(map(lambda x,y:x + y,v1,v2))
print(result)
>>>[5, 7, 9]

        filter:对于序列中的元素进行筛选,最终获取符合条件的序列

image 

        用法:filter = (判断函数(判断函数只能接收一个参数,判断返回Ture则保留),可迭代对象)  filter只能接收2个参数(函数,1个可迭代对象)      最终得到一个包含所有结果的迭代器需要用list()/tuple()等转换为可见结构

v = [1,2,3,21,22,34,54,63,234]
result = list(filter(lambda x:x>9,v))
print(result)
>>>[21, 22, 34, 54, 63, 234]

        reduce:对于序列内所有元素进行累计操作          reduce      py3中不在内置函数中,在模块functools内,使用时前导入import functools模块   

image

        用法:import functools  reduce(函数(接收2个参数),可迭代对象)  第一次迭代函数接收2个参数(2个迭代对象),后面迭代时,上一次迭代函数的返回值作这次迭代时函数的第一个参数,第二个参数为迭代对象                  最终得到一个值,无需进行强制转换

image

import functools
v = ["guo","h","an"]
result = functools.reduce(lambda x,y:x+y,v)
print(result)
>>>guohan

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站数据库怎么建立网站建设合同文百科

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 思路一 运用迭代的算法&#xff0c;把头指针…

点云-标注-分类-航线规划软件 (一)点云自动分类 - 实践

点云-标注-分类-航线规划软件 (一)点云自动分类 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

JVM的内存分配策略有哪些?

JVM的内存分配策略主要围绕对象在堆内存中的分配规则展开,核心目标是高效利用内存并减少垃圾回收开销。主要分配策略如下: 1. 优先在Eden区分配 大多数对象在新生代的Eden区中创建。当Eden区没有足够空间时,JVM会触…

网站的功能有哪些公司文化建设的意义

双写机制 问题的出现 在发生数据库宕机时&#xff0c;可能Innodb正在写入某个页到表中&#xff0c;但是这个页只写了一部分&#xff0c;这种情况被称为部分写失效&#xff0c;虽然innodb会先写重做日志,在修改页&#xff0c;但是重做日志中记录的是对页的物理操作&#xff0c;但…

网站网站做代理怎么发展下线太原seo优化公司

论文链接&#xff1a;http://aihuang.org/p/papers/AAAI2018Denoising.pdf来源&#xff1a;AAAI 2018MotivationDistant Supervision 是一种常用的生成关系分类训练样本的方法&#xff0c;它通过将知识库与非结构化文本对齐来自动构建大量训练样本&#xff0c;减少模型对人工标…

网站给部分文字做遮挡代码义乌外贸网站建设

2020年android 仿微信朋友圈 评论1.如果有人问我:那些艰难的岁月你是怎么熬过来的?我想我只有一句话回答:我有一种强大的精神力量支撑着我,这种力量名字叫“想死又不敢”二十、我喜欢转身转得漂亮&#xff0c;放手放得潇洒你在玩以这样的挂念&#xff0c;会悲伤的逃脱11、我嫉…

如何建设英文网站免费建站网站

HYJY系列电压继电器 HYJY-30-01集成电路电压继电器 HYJY-30-01A HYJY-30-01B HYJY-30-02集成电路电压继电器 HYJY-30-02A HYJY-30-02B HYJY-30-03-3集成电路电压继电器 HYJY-30-03-2 HYJY-30-03-1 HYJY-30-02电压继电器&#xff08;以下简称继电器&#xff09;用于发…

在Linux系统上一键配置DoH,解决DNS解析被污染

前言 最近我的 swag 服务突然证书 renew 失败 诊断了一下发现原来是无法解析 acme-v02.api.letsencrypt.org 域名 换了几个 DNS 都不行,应该是 DNS 被污染或者劫持了 这时我才意识到不上 DoH/DoT 怕是没办法了🤣 本…

免费网站源码下载器网站开发报价文件

介绍 ai查询 在Java中&#xff0c;动态数组通常通过ArrayList类来实现&#xff0c;它是Java集合框架&#xff08;Java Collections Framework&#xff09;的一部分。ArrayList是一个可调整大小的数组实现&#xff0c;提供了比标准数组更多的灵活性和功能。 以下是使用ArrayLis…

大连模板网站制作哪家专业天津专业网站制作流程优势

目录 一.Python 线程队列 Queue 分类二.Python 线程优先队列 PriorityQueue 简介三.Python 线程优先队列 PriorityQueue 函数介绍四.Python 线程优先队列 PriorityQueue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 线程队列…

服务器搭建网站方案500字淮北人论坛招聘信息

预算2014年院线预算 影城&#xff08;多选&#xff09;北京CBD影城 查询 科目蚌埠万达广场店北京CBD影城  营业收入11 票房收入11 卖品收入00 逾期收入00 广告收入00 映前广告00 LCD广告00 阵地收入00 IMAX广告收入00 其他广告收入00 其…

网页设计制作网站模板图片自己做的网站放在服务器哪里

文章目录 一、绪论1.1、数据结构的基本概念1.2、数据结构三要素1.2.1、逻辑结构1.2.2、数据的运算1.2.3、物理结构&#xff08;存储结构&#xff09;1.2.4、数据类型和抽象数据类型 二、算法的基本概念2.1、算法的特性2.2、“好”算法的特质2.2.1、算法时间复杂度2.2.2、算法空…

网站商城微信支付wordpress大前端2.0

V90伺服驱动器其它相关介绍,请参考V90控制专栏,常用地址如下: V90 Epos模式下点动控制 https://rxxw-control.blog.csdn.net/article/details/134263795https://rxxw-control.blog.csdn.net/article/details/134263795绝对定位往复运动可以参考下面文章链接: https://rx…

《电路基础》第五章学习笔记

《电路基础》第五章学习笔记本章主要介绍运算放大器。 一个特性与电压控制电压源类似的电子元件。可以对信号进行相加、放大、积分和微分。可以看作增益非常高的电压放大器。运算放大器定义: 运算放大器是一个用于执行…

完整教程:C 语言各种指针详解

完整教程:C 语言各种指针详解2025-10-02 11:23 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

51单片机-实现DAC(PWM)数模转换PWM控制呼吸灯、直流电机实验教程 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Elasticsearch集群监控信息(亲测) - 教程

Elasticsearch集群监控信息(亲测) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

基于Java springboot农村政务服务管理便捷的系统(源码+文档+运行视频+讲解视频)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

三木做网站初中校园网站建设制度

Java面向对象编程篇3——接口与抽象类 1、接口&#xff08;interface&#xff09; 接口中可以含有变量和方法。但是要注意&#xff0c;接口中的变量会被隐式地指定为public static final变量&#xff08;并且只能是public static final变量&#xff0c;用private修饰会报编译…

Matplotlib子图布局与响应式设计实战:GridSpec与CSS框架深度结合 - 教程

Matplotlib子图布局与响应式设计实战:GridSpec与CSS框架深度结合 - 教程2025-10-02 11:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: a…