python学习笔记8

什么是闭包?

内部函数可以引用外部函数的参数和局部变量,当外部函数返回内部函数时,相关参数和变量都保存在返回的函数中,这种特性被称为“闭包(Closure)。闭包是两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定由参数。

#闭包的类似格式
def 外部函数(参数):
	def 内部函数():
		pass
return 内部函数

闭包有以下几个特点

  • 必须有一个内嵌函数
  • 内嵌函数必须引用外部函数的变量(该函数包含对作用域而不是全局作用域名字的引用)。
  • 外部函数的返回值必须是内嵌函数

闭包与正常函数的区别

  • 闭包格式连个函数的嵌套
  • 闭包外部函数的参数可以在内存中保持
  • 闭包函数就如同一个类,只有在改函数里的方法才可以使用其局部变量,闭包函数之外的方法是不能读取其局部变量的。这就实现了面向对象的封装性,更安全更可靠,即闭包里面的数据是独有的数据,与外界无影响
  • 函数:在函数中,需要使用的全局变量在一定程度上是受到限制的,因为全局变量不仅可以给函数使用,其他的函数也可能会使用到,一旦被修改会影响到其他函数使用 全局变量,所以全局变量不能随便被修改,因此在函数的使用中受到一定的限制
def func_out(*args):#定义外部函数
	def func_in():
		sumV = sum(args)
		return sumV
		
S = func_out(1,2,3,4)
print(S())#真正调用的是func_in函数

请编写一个函数,接收整数参数n,返回一个函数,函数的功能把函数的参数和n想成并把结果返回

def mulby(num):
	def gn(val):
		return num*val
	return gn
	
zw = mulby(7)
print(zw(8))

函数中*args和**kwargs的作用是什么

 *args和**kwarags主要用于函数的定义。当函数的参数不确定时,可以使用*args和**kwargs来将不定数量的参数传递给一个函数。这里补丁的意思是预先不知道函数的使用者会传递多少个参数,所以在这种场景下可以使用这两个关键字
*args是用来发送一个非键值对的可变你数量的参数列表归一个函数*args会接受任意多个参数并把这些参数作为元组传递给函数。*argss没有key值,以元组形式传递
**kwargs存储可变的关键字参数,允许使用没有事先定义的参数名,将接收到多任意个关键字参数作为字典传递个函数。**kwargs有key置,以字典形式传递函数
需要注意的是,函数的参数的顺内需:*args和**kwargs前面,调用函数传递参数也必须依照此序列

args实例

def demo(args_f,*args_v):
	print(*args_f)
	for x in args_v:
		print(x,end='')
demo(1,'a','b','c','d')

image

def func(x,y,*args):
    print(x,y,args)

func(1,2,3,4,5,6)

image
说明传递给函数的是一个元组
**kwargs示例

def demo(**kwargs):
    print(kwargs,type(kwargs))

demo(name='mtcx')

image

如何在一个function里面设置一个全局的变量?

可以在function中使用global来声明一个变量

def f():
    global x

如果要给全局变量在一个函数里赋值,那么必须使用global语句。global VarName的表达式会告诉python,VarName是一个全局变量,这样python就不会在局部命名空间里寻找这个变量了

用python语言写一个自定义函数,输入一个字符串,返回倒序排列的结果

def string_reverse(input_str):
    return input_str[::-1]

print(string_reverse('abcdefg'))

image

给定一个红包的数额属组gifts=[2,3,6,2,24,5,26]以及它的大小n,返回是否有某某个金额出现的次数超过红包数的一半.若存在则返回改红包金额,若不存在则返回0

#使用函数来完成
def select_most_often_gift(gifts):
    gift_item = set(gifts)
    n = len(gifts)
    for gift in gift_item:
        num = gifts.count(gift)
        if num > n/2:
            return gift
    return 0

print(select_most_often_gift([2,3,6,2,24,5,26]))

image

posted @ 2021-04-20 15:07  MTcx  阅读(72)  评论(0编辑  收藏  举报