当前位置: 首页 > news >正文

函数-高级用法+闭包

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

   定义函数(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.hskmm.com/?act=detail&tid=22845

相关文章:

  • 点云-标注-分类-航线规划软件 (一)点云自动分类 - 实践
  • JVM的内存分配策略有哪些?
  • 在Linux系统上一键配置DoH,解决DNS解析被污染
  • 《电路基础》第五章学习笔记
  • Elasticsearch集群监控信息(亲测) - 教程
  • 2025超声波清洗机厂家TOP企业品牌推荐排行榜,龙门式,悬挂式,全自动,多臂式,多槽式,履带式,通过式,单槽式,摆动式,平移式超声波清洗机公司推荐!
  • SQL:concat函数(连接字符串)
  • 2025 北京地下室防潮品牌最新推荐排行榜:TOP3 实力品牌出炉,精准解决地下空间潮湿难题
  • python脚本统计fastq数据的GC含量
  • 第一次软件工程作业
  • 关于数颜色
  • 2025仿石漆厂家 TOP 企业品牌推荐排行榜,真石漆,水包砂,冠晶石,外墙,多彩,批刮,别墅,批发,出口仿石漆推荐这十家公司!
  • CF1615F LEGOndary Grandmaster
  • 2025 年仿石漆品牌最新推荐排行榜:聚焦真石漆仿石漆,水包砂仿石漆,冠晶石仿石漆,外墙仿石漆,多彩仿石漆供采购参考
  • 诚信液压阀块定制厂家推荐榜:实力制造与精准工艺口碑之选
  • 24 两两交换链表中的节点
  • 算法导论图论部分总结
  • 19 删除链表的倒数第 N 个结点
  • 浅谈 Bakas Trick / 不带删尺取 / 对顶栈
  • 聚变堆:中国BEST装置全面开建
  • web
  • 如何用pivotby函数实现数据透视(2)
  • 2025 年彩钢板厂家 TOP 企业品牌推荐排行榜,复合彩钢板,保温彩钢板,耐腐蚀彩钢板,净化彩钢板推荐这十家公司!
  • 251002
  • AT_agc020_d [AGC020D] Min Max Repetition
  • 题解:P7810 [JRKSJ R2] Upper
  • 记录自己被AWS坑了6刀
  • 如何用pivotby函数实现数据透视(1)
  • 10/1
  • 详细介绍:【数据结构】图论核心应用:关键路径算法详解——从AOE网到项目管理实战​