直接放代码,有注释,就不解析了
# ############################
# 改变一个变量的值,与之有关系的变量的值也会相等变化
# 类似php的引用赋值,宏观来看
# ############################ relation = [] # relation是装在有关系的集合的列表 # 绑定有关系的变量
def bind(*arg):
if len(arg) < 2:
'''
判断绑定变量的个数
'''
print("error: 至少绑定两个变量")
exit()
global relation
for i in arg:
'''
检查绑定的变量是否存在
'''
if i not in globals().keys():
print("error: 变量%s不存在"%(i))
exit() # 进行装载
flag = set(arg)
if len(relation):
i = 0
while i < len(relation):
if len(relation[i] & flag):
relation[i] = relation[i] | flag
break
i += 1
if i == len(relation):
relation.append(flag)
else:
relation.append(flag) # 参数中,其余的变量的值等于以第一个变量参数的值
index = 1
while index < len(arg):
globals()[arg[index]] = globals()[arg[0]]
index += 1 # 给变量赋值
def assign(var, value):
global relation
if len(relation):
i = 0
while i < len(relation):
if var in relation[i]:
for item in relation[i]:
globals()[item] = value
break
i += 1
if i == len(relation):
print('error: 赋值的变量尚未绑定')
exit()
else:
print("error: 当前不存在有关系的集合")
exit() a = 'sky'
b = 'land'
bind('a', 'b') # 绑定有关系变量
print(relation) # 打印当前有关系集合的列表 [{'a', 'b'}]
print(a, b) # 输出变量a和b的值 sky sky
assign('a', 'sea') # 改变变量的值
print(a, b) # 输出变量a和b的值 sea sea