在编写程序时,有时我们需要命名相当多的变量,比如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 :) {
assign(paste0('x',i),*i+)
}

Matlab

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

由于原理相似,不多赘述,直接上代码:

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

Python&R&Matlab:批量生成变量的更多相关文章

  1. R语言批量生成变量(变量名中含有参数)

    我们经常会需要生成这样一类的变量,比如a1,a2,a3...... 这时候我们需要用到这两个函数:get()和assign() get()用法 get()函数只是在环境中搜索该变量名的变量,如果该变量 ...

  2. Python写一个批量生成账号的函数

    批量生成账户信息,产生的账户由@sina.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母.小写字母和数字组成. def Users(num,len): # n ...

  3. Python操作Word批量生成文章

    需要做一些会议记录.总共有多少呢?五个地点x7个月份x每月4篇=140篇.虽然不很重要,但是140篇记录完全雷同也不好.大体看了一下,此类的记录大致分为四段.于是决定每段提供四种选项,每段从四选项里随 ...

  4. matlab批量修改变量的名称

    使用matlab做实验的时候,保存的文件里面的变量名都是一样的 ,所以希望能够把变量名全部都重命名.我举个个例子,假设我一堆文件,文件名分别是gds1,gds2,gds2,-.. 但是实际上load进 ...

  5. Python批量生成用户名

    写在最前 平时在工作中尤其是在做压测的时候难免需要一些用户名和密码,写个简单的Python小脚本批量生成一些 代码示例 import random,string #生成大小字母和数字一起的大字符串 a ...

  6. MyEclipse和eclipse生成变量快捷键

    MyEclipse和eclipse生成变量快捷键MyEclipse和eclipse生成变量快捷键 一.MyEclipse快捷生成变量(两种):第一种: 光标放在该行的任意位置,按 Ctrl+2,会弹出 ...

  7. R8—批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数

    一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到 ...

  8. python脚本批量生成数据

    在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家 ...

  9. 批量生成python自动化测试脚本

    先前有家供应商与我们合作开发自动化工程,采用的py unittest作为脚本运行框架.我发现他们出的脚本都是挨个手写的,格式上也是参差不齐.所以有了根据用例表批量生成脚本的一段小代码 对一个测试脚本必 ...

随机推荐

  1. PTA(Basic Level)1022.D进制的A+B

    输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输出 A+ ...

  2. 使用Themleaf 模板引擎手动生成html文件

    1.为什么要写这一篇呢? 在做一个邮件发送功能的时候,需要发送html邮件,javaMail 发送html 的时候需要有已经生成的html正文,所以需要提前将要发送的内容生成,所以就需要模板引擎来动态 ...

  3. 利用commons-pool2自定义对象池

    一.为什么使用对象池   恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.commons-pool2是Apache下一个开源的公共资源池.我们可以根据它来快速的建立 ...

  4. jsp文件

    新建的jsp文件比新建的html文件多了一行内容<%@ page contentType="text/html; charset=utf-8" %>,这样不会显示乱码 ...

  5. Spring添加声明式事务

    一.前言 Spring提供了声明式事务处理机制,它基于AOP实现,无须编写任何事务管理代码,所有的工作全在配置文件中完成. 二.声明式事务的XML配置方式 为业务方法配置事务切面,需要用到tx和aop ...

  6. C++学习 之 类的继承中的虚函数(笔记)

    1.多态行为 多态是面向对象语言的一种特征,让我们能够以类似的方式处理不同类型的对象.在C++中我们可以通过继承层次结构实现子类型多态. 我们可以通过下面的代码进一步了解多态: #include< ...

  7. Feign声明式服务调用

    Feign是一种声明式.模板化的HTTP客户端(仅在Application Client中使用).声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求. Spring Clo ...

  8. java native本地方法详解(转)

    文章链接出处: 详解native方法的使用 自己实现一个Native方法的调用 JNI 开始本篇的内容之前,首先要讲一下JNI.Java很好,使用的人很多.应用极 广,但是Java不是完美的.Java ...

  9. 10 Python之文件操作

    1.文件操作 f = open(文件路径, mode="模式", encoding="编码") f: 文件句柄 文件的路径: 相对路径 相对于当前程序所在的文件 ...

  10. jQuery制作弹出窗(模态框)

    来源:(二少)在南极 ##index.html <!DOCTYPE html><html lang="zh"><head> <meta c ...