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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM