文章目录(PS:觉得不错请点赞收藏支持一下)
一、引用
1.1 入门
在Python中,值是靠引用来传递来的。
# 用 id() 来判断两个变量是否为同一个值的引用
# 我们可以将 id 值理解为那块的内存地址
"""
1. 如果两个变量的值一样,则两个变量的内存地址一样,变量 a 和 变量 b 引用的是同一个 10
"""
a = 10
b = a
print(id(a)) # 2576104778320
print(id(b)) # 2576104778320
"""
2. 如果两个变量的值不一样,则两个变量的内存地址不一样
"""
n1 = 20
n2 = 30
print(id(20)) # 1588465396624
print(id(30)) # 1588465396944
"""
3. int类型的值是不可变的
"""
m1 = 1
m2 = m1
m1 = 2
print(id(m1)) # 2966472517968
print(id(m2)) # 2966472517936
"""
4. 列表是可变的
"""
a = [10,20,30]
b = a
print(id(a)) # 1804906729216
print(id(b)) # 1804906729216
print('-----修改列表 a 之后---------')
a.append(100)
print(id(a)) # 1804906729216
print(id(b)) # 1804906729216
1.2 引用当作实参
"""
1. 调用 f1 函数时,传递了实参 n, 相当于 a = n,此时变量 a 和 n 引用同一个内存地址
2. 在函数内,通过 a += a, 改变了变量 a 的 值, 所以变量 a 和 n 是不同的内存地址
"""
def f1(a):
print(a) # 100
print(id(a)) # 2255722403280
a += a # 200
print(id(a)) # 2255722406544
n = 100
f1(n)
"""
传列表实参,引用的内存地址是一样的,因为列表是可变的
"""
def f1(a):
print(a) # ['a','b']
print(id(a)) # 2553637375744
a += a # ['a','b','a','b']
print(id(a)) # 2553637375744
n = ['a','b']
f1(n)
二、递归
- 特点
- 函数内部自己调用自己
- 必须有出口
- 举例
"""
学递归前
计算 10 以内整数的累加的和
"""
result = 0
for i in range(1,11):
result += i
print(result) # 55
"""
学递归后
计算 10 以内整数的和
"""
def my_sum(n):
if n == 1:
return n
return n + my_sum(n-1)
print(my_sum(10)) # 55
三、任务清单
- 利用递归,将列表中的所有是列表类型的元素拆开,添加到一个新列表中,并返回这个新列表。
def f1(list1):
list2 = []
for i in list1:
# isinstance(变量名,类型) 函数, 判断某个变量是否是某个数据类型
if isinstance(i,list):
list2.extend(f1(i))
else:
list2.append(i)
return list2
l1 = [10, 'b', 'c', ['d', 50, ['e', 70, [80, 'f']]], ['g', 100]]
res = f1(l1)
print(res) # [10, 'b', 'c', 'd', 50, 'e', 70, 80, 'f', 'g', 100]
- 有如下一个列表,当中存储了当前登录用户拥有的所有菜单权限
"""
menus = [
{'id': '001', 'title': '用户管理', 'child': [
{'id': '00101', 'title': '添加用户'},
{'id': '00102', 'title': '删除用户'},
{'id': '00103', 'title': '用户禁言'},
{'id': '00104', 'title': '用户恢复'},
]},
{'id': '002', 'title': '商品管理', 'child': [
{'id': '00201', 'title': '添加商品'},
{'id': '00201', 'title': '图片上传'},
]},
{'id': '003', 'title': '分类管理', 'child': [
{'id': '00301', 'title': '家用电器', 'child': [
{'id': '0030101', 'title': '电视', 'child': [
{'id': '003010101', 'title': '全面屏电视'},
{'id': '003010102', 'title': 'OLED电视'},
{'id': '003010103', 'title': '教育电视'}
]},
{'id': '0030102', 'title': '空调', 'child': [
{'id': '003010201', 'title': '空调挂机'},
{'id': '003010202', 'title': '空调机柜'},
{'id': '003010203', 'title': '中央空调', 'child': [
{'id': '00301020301', 'title': '多联机'},
{'id': '00301020302', 'title': '风管机'},
{'id': '00301020302', 'title': '天花机'}
]}
]},
]}
]}
]
编写代码,将所有权限名称提取出来,添加到一个列表中,如下所示
结果如下
['用户管理', '添加用户', '删除用户', '用户禁言', '用户恢复', '商品管理', '添加商品',
'图片上传', '分类管理', '家用电器', '电视', '全面屏电视', 'OLED电视', '教育电视',
'空调', '空调挂机', '空调机柜', '中央空调', '多联机', '风管机', '天花机']
"""
list2 = []
def f1(list1):
for item in list1:
list2.append(item['title'])
for value in item.values():
if isinstance(value,list):
f1(value)
return list2
res = f1(menus)
print(res)
# 运行结果:
['用户管理', '添加用户', '删除用户', '用户禁言', '用户恢复', '商品管理', '添加商品', '图片上传', '分类管理', '家用电器', '电视', '全面屏电视', 'OLED电视', '教育电视', '空调', '空调挂机', '空调机柜', '中央空调', '多联机', '风管机', '天花机']