• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在编写程序时,有时我们需要命名相当多的变量,比如x0、x1、x2、...、xn,用手一个个打出来是相当麻烦的。那么这时我们就需要批量生成变量了。

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

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

 

Python

方法1

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

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

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

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

 

 方法2

利用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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
基于Delphi的BHO开发基础发布时间:2022-07-18
下一篇:
Delphi IOS EnteredBackground发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap