Python&R&Matlab:批量生成变量

在编写程序时,有时咱们须要命名至关多的变量,好比x0、x一、x二、...、xn,用手一个个打出来是至关麻烦的。那么这时咱们就须要批量生成变量了。html

解决这个问题的关键在于,'xn'是自动构造出来的字符串,须要利用适当途径,把它转化成能被赋值的变量。python

这个功能在各类编程语言中应该都是能够实现的。如下咱们以Python、R、Matlab分别为例,构造10个变量,每一个的值为2n+3。编程

 

Python编程语言

方法1函数

这里要利用Python中的locals()函数。spa

locals() 函数会以字典类型返回当前位置的所有局部变量。code

 利用这一点,咱们就能“搞事情”了。orm

#变量构造
for i in range(10): locals()['x'+str(i)]=2*i+3
#变量访问
for i in range(10): print(locals()['x'+str(i)])

 

 方法2htm

利用Python中的另外一个内置函数exec()。对象

函数exec()用于执行储存在字符串或文件中的 Python 语句,看上去很无聊的函数,在这里显出了威力。

#变量构造
for i in range(10): exec('x{}={}'.format(i,2*i+3)) #变量访问
for i in range(10): exec('print(x{})'.format(i))

 这里顺便提一下format的用法,示例以下:

>>> a=12
>>> print('sf %d sfd'%a) sf 12 sfd >>> print('sf {} sfd'.format(a)) sf 12  sfd

菜鸟上有个更详细的介绍,可参考:

https://www.runoob.com/python/att-string-format.html

 

方法3

在面向对象编程中,一个类的属性存放在字典__dict__中。

咱们就能够在这里面作文章了。

#构造变量
class abc(): def __init__(self): kk = self.__dict__
            for i in range(10): kk['x'+str(i)] = 2*i + 3
#访问变量
for i in range(10): exec('print(abc().x{})'.format(i))

 

R

这里用到R中的两个函数assign()和paste()或paste0(),前者用于赋值,后者用于合并字符串。

for (i in 0:9) { assign(paste0('x',i),2*i+3) }

 

Matlab

Matlab中有个eval()函数,跟Python里的exec()函数功能类似,用于执行字符串中的程序语句。

因为原理类似,很少赘述,直接上代码:

for i = 0:9 b=['x',num2str(i)]; eval([b,'=2*i+3;']) end

相关文章
相关标签/搜索