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

相關文章
相關標籤/搜索