引用:
1.不是在函数中使用,可以通过sys.getrefcount(a)引用个数
2.函数的引用:
必须要分清楚传递的值是可变类型还是不可变类型
如果
全局变量于局部变量:
# def test(n1): # n1=n=9 n1是局部变量,n是全局变量,所以n1+=1丝毫不会改变全局n的值
# # n1是局部变量
# n2 = 100
# for i in range(n1):
# print('----->', i)
# # n1 += 1
# # print(n1) # 此时的n1是10
# n = 9 # 9是全局的
# test(n)
# print(n)
函数里的可变与不可变类型:
# list1 = [1, 2, 3, 45, 6]
# def test1(l): # l=list1 # 容器里添加值不会改变地址
# if isinstance(l, list):
# for i in l:
# print('----->', i)
# l.insert(0, 8) # 往l里添加值也相当于往list1里添加值
# else:
# print('不是列表类型!!')
# test1(list1)
# print(list1) # 因为列表是可变类型,所以往list1里添加值不会改变内存地址,反而加了值
# def outer():
# a = 100
#
# def inner():
# b = 200
# # b+=a # 内部函数可以使用外部函数的变量
# nonlocal a # 如果想修改外部函数的变量,则需要在内部添加:nonloca
# a += b # 内部函数不能修改外部函数的变量
# print('这是内部函数', b)
#
# result = locals() # locals()表示查看函数中的局部变量,以字典的形式返回
# print(result)
# print(a)
# inner()
# outer()
闭包:
1,嵌套函数
2.内部函数引用了外部的变量
3,返回值是内部函数
全局:
全局变量是是不可变类型,必须添加global关键字,全局变量是可变类型无需添加
4,查看全局时用globals():是一个字典,分成1.字典2.自定义
# def outer(n):
# a = 10
#
# def inner():
# b = a + n # a
# print('内部函数', b)
#
# return inner # 把inner扔出去然后r接收inner
#
#
# r = outer(5) # 5传值给n,n跟5只想同一个内存地址
# print(r) # 此时的取得是r的内存地址
# r() # 值为15
装饰器:
def decorater(func): # func=house house给func传值
print('------>1')
def wrapper(): # wrapper是因为函数调用func内的值才调用wrapper
func() # 这是调用func所以相当与调用house所以先显示毛坯房
print('刷漆')
print('装修')
print('华丽的房子')
print('-------->2')
return wrapper # 把wrapper扔出去然后house接收wrapper
@decorater # decorater(house)相当于
def house():
print('毛坯房')
house() # 相当与house=wepper 表面是调用house其实内存里调用的是wepper 内部里的内存地址也改变了
def decorater(func):
print('------>1')
# 因为装饰器一般可以装饰多个函数,所以就用到*args,**kwargs,
def wrapper(*args,**kwargs): # 此时zhe时接收到的是一个整体的元组或自字典
r=func(*args,*kwargs) #所以这里要拆散
print(r)
print('刷漆')
print('装修')
print('华丽的房子')
return r
print('-------->2')
return wrapper
@decorater
def house():
print('毛坯房')
house()
@decorater
def houtel(one,many):
print('酒店的面积是{},每间房的面积是{}'.format(one,many))
return 5000 # 调用函数有返回值,那么装饰器内部函数也要带返回值
r=houtel(1000,100)
标签:函数,house,wrapper,print,n1,装饰,def From: https://www.cnblogs.com/shuai61457/p/17213854.html