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


    在编写程序时,有时我们需要命名相当多的变量,比如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

  • 相关阅读:
    压缩与解压缩 ZipHelper
    ESFramework介绍之(15)-- IRAS
    ESFramework介绍之(8)-- 客户端插件IPassiveAddin
    使用Eclipse开发Jsp
    深入探讨 java.lang.ref 包
    java多线程总结二
    模拟弹子台球java多线程应用
    简单的邮件客户端
    最近创办了一个java学习邮件列表
    优秀的XML~~Altova XMLSpy 2010英文企业版+有效破解方法
  • 原文地址:https://www.cnblogs.com/maoerbao/p/11519254.html
Copyright © 2020-2023  润新知