python如何实现类似php的引用赋值

直接放代码,有注释,就不解析了

 1 # ############################
 2 # 改变一个变量的值,与之有关系的变量的值也会相等变化
 3 # 类似php的引用赋值,宏观来看
 4 # ############################
 5
 6 relation = []   # relation是装在有关系的集合的列表
 7
 8
 9 # 绑定有关系的变量
10 def bind(*arg):
11     if len(arg) < 2:
12         ‘‘‘
13         判断绑定变量的个数
14         ‘‘‘
15         print("error: 至少绑定两个变量")
16         exit()
17     global relation
18     for i in arg:
19         ‘‘‘
20         检查绑定的变量是否存在
21         ‘‘‘
22         if i not in globals().keys():
23             print("error: 变量%s不存在"%(i))
24             exit()
25
26     # 进行装载
27     flag = set(arg)
28     if len(relation):
29         i = 0
30         while i < len(relation):
31             if len(relation[i] & flag):
32                 relation[i] = relation[i] | flag
33                 break
34             i += 1
35         if i == len(relation):
36             relation.append(flag)
37     else:
38         relation.append(flag)
39
40     # 参数中,其余的变量的值等于以第一个变量参数的值
41     index = 1
42     while index < len(arg):
43         globals()[arg[index]] = globals()[arg[0]]
44         index += 1
45
46
47 # 给变量赋值
48 def assign(var, value):
49     global relation
50     if len(relation):
51         i = 0
52         while i < len(relation):
53             if var in relation[i]:
54                 for item in relation[i]:
55                     globals()[item] = value
56                 break
57             i += 1
58         if i == len(relation):
59             print(‘error: 赋值的变量尚未绑定‘)
60             exit()
61     else:
62         print("error: 当前不存在有关系的集合")
63         exit()
64
65
66 a = ‘sky‘
67 b = ‘land‘
68 bind(‘a‘, ‘b‘)  # 绑定有关系变量
69 print(relation)     # 打印当前有关系集合的列表 [{‘a‘, ‘b‘}]
70 print(a, b)     # 输出变量a和b的值 sky sky
71 assign(‘a‘, ‘sea‘)  # 改变变量的值
72 print(a, b)     # 输出变量a和b的值 sea sea

原文地址:https://www.cnblogs.com/youaremylife/p/9354127.html

时间: 2024-10-11 12:39:56

python如何实现类似php的引用赋值的相关文章

实现类似shared_ptr的引用计数

13.27 定义使用引用计数版本的HasPtr #include<iostream> #include<string> #include<new> using namespace std; class HasPtr { public: HasPtr(const string &s=string()):ps(new string(s)),i(0),use(new size_t(1)) {cout<<"constructer"<

Python全栈之路系列之赋值与运算符

Python全栈之路系列之赋值与运算符 在继续下面的文章之前我们先来浏览一下Python为我们提供的几种运算符,定义两个变量,分别是a和b,a的值是10,b的值是20. 算术运算符 运算符 描述 实例 + 加,两个对象相加 a+b=30 - 减,两个对象相减,可能会得到负数 a-b=-10 * 乘,两数相称或是返回一个被重复若干次的字符串 a*b=200 / 除,两个对象相除 b/a=2 % 取膜,返回除法的余数 b%a=0 ** 幂,返回x的y次幂 a**b=10000000000000000

python调用shell, shell 引用python

python 调用 shell get_line_num="wc -l as_uniq_info | awk '{print $1}'" ###get the lines of "as_uniq_info" line_num = os.popen(get_line_num).read().strip('\n') get_line_num 作为shell执行的命令,会取得文件as_uniq_info文件的行数 os.popen(get_line_num):执行shel

php foreach引用赋值

在写代码时发现php foreach引用赋值会导致意外的行为. 代码示例: <?php $arr = array('a','b','c'); foreach($arr as $k=>&$v) { } print_r($arr); foreach($arr as $k=>$v) { } print_r($arr); ?> 输出结果: Array ( [0] => a [1] => b [2] => c ) Array ( [0] => a [1] =&

传值赋值与引用赋值详解

1. 基础概念 传值赋值:当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋予到目标变量.这意味着,例如,当一个变量的值赋予另一个变量时,改变其中一个变量的值,将不会影响到另一个变量. 引用赋值:这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量.改动新的变量将影响到原始变量,反之亦然. 1 <?php 2 $a = 'a'; 3 $b = 'b'; 4 echo "$a,$b<hr />"; 5 // 显示a,b 6 $b = $a

Js的引用赋值与传值赋值

要说js的赋值方式时首先要说明js的数值类型:基本类型和引用类型. 1.基本类型 基本的数据类型有:undefined,boolean,number,string,null. 基本类型存放在栈区,访问是按值访问的,就是说你可以操作保存在变量中的实际的值. 当基本类型的数据赋值时,赋得是实际的值,a和b是没有关联关系的,b由a复制得到,相互独立.(字面量的才是基本类型) var a=10; var b=a; console.log(a+','+b);    // 10,10a++;console.

01PHP 引用赋值和传递赋值

PHP中变量的引用赋值是通过&符号进行的,在这里我们介绍下&符号引入的作用 1.先介绍下传递赋值 <?php $a=1; $b=3;                         从内存的角度上分析:$a指向一个地址,对应的数据是1   $b指向一个地址,对应的数据是3 $a=$b;                         现在执行$a=$b 是将$b中的数值赋给$a 这时 $a=3 echo $a,$b://3  3              因此两个变量的值都是3 3

PHP变量引用赋值与变量赋值变量的区别

变量默认总是传值赋值.那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量.这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量.有关这种类型的赋值操作,请参阅表达式一章. <?php $foo='abc'; $b=$foo; $b="my name is $b"; echo "$b"; //my name is abc echo "$foo"; // abc PHP

基本概念之引用赋值需要注意什么?

分析: 引用就是另外一个对象的别名,给引用赋值,就是将引用指向这个对象.此后对引用的任何操作,实际上就是对这个对象的操作. 记住:引用就是目标对象的指示物.所以当定义一个引用时,必须给引用赋值,将它指向某个对象.并且引用和它所指的对象之间的这种指向关系一旦确定就不能更改,也就是说,不能修改引用的初始指向,将其指向另外一个对象,引用和它所指向的对象之间的关系是从一而终的.