iT邦幫忙

0

python變數名稱,能否使用遞迴修改,仍保有其變數效力?

  • 分享至 

  • xImage
c1 = 'xxx'
c2 = 'ooo'
c3 = 'ddd'

for m in range(1, 4):
   print('c'+str(m))
   

在下希望印出
xxx
ooo
ddd

結果印出
c1
c2
c3

滿常卡在這種地方的,懇請知道的大大幫忙解惑,謝謝m(__)m

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2023-03-28 15:33:38 檢舉
這種狀況請你把c1~c3做個list或dict,eval這個我就不教了。
謝謝大大m(__)m
ccutmis iT邦高手 2 級 ‧ 2023-03-28 16:34:10 檢舉
@froce 大師 : 除了 evil 還有 exec XD
froce iT邦大師 1 級 ‧ 2023-03-29 08:27:47 檢舉
沒在用的東西不用記那麼清楚。XD
貓虎皮 iT邦新手 3 級 ‧ 2023-04-01 20:21:07 檢舉
稍微糾正一下:
1. `for-in` 是迴圈,而非遞迴
2. 這是不同變數名稱的取用,而非修改變數名稱
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
kennex_x
iT邦新手 4 級 ‧ 2023-03-28 15:32:34
最佳解答

Code

c1 = 'xxx'
c2 = 'ooo'
c3 = 'ddd'

for m in range(1, 4):
    print(locals()["c"+str(m)])

Result

xxx
ooo
ddd

說明

c1, c2, c3 不是"字串" 而是變數,你print()語法是印出'c'這個字而不是印出變數,
所以需要使用locals() or globals()語法去調用變數在印出。

謝謝大大m(__)m

obarisk iT邦研究生 1 級 ‧ 2023-03-29 10:17:10 檢舉

大大別這樣><

此時無解勝有解...

1
mackuo
iT邦研究生 1 級 ‧ 2023-03-28 15:35:58

以下程式碼可以:

c1 = 'xxx'
c2 = 'ooo'
c3 = 'ddd'

for m in range(1, 4):
   print(globals()['c'+str(m)])

謝謝大大m(__)m

0
揮揮手
iT邦研究生 5 級 ‧ 2023-03-28 15:40:45

為什麼不把C1-C3
轉為陣列
用陣列的方式處理?

如果還有其他大神
能用字串代表變數的話
希望能學習~

感謝樓上兩位的語法~~
我只想到用陣列~

看更多先前的回應...收起先前的回應...

謝謝大大m(__)m

kennex_x iT邦新手 4 級 ‧ 2023-03-28 15:52:04 檢舉

以我的工作經驗,有時候可能會有多個相同類型但是不同日期的報表要進行資料處理分析的話,我才會用到我所提供的方法XD

#舉例說明我要讀某個地方的兩個檔案檔案("*.xlsx"),但是檔名相似只有日期不同(20230101.xlsx, 20230102.xlsx),然後分別讀進Python個別做後續處理。

date_list = ["20230101", "20230102"]
for date in date_list:
	locals()["df_" + date] = pd.read_excel("{}.xlsx".format(date))

#如此一來我就會有df_20230101& df_20230102 兩個變數的Dataframe可以進行處理了

要不然其實以此問題確實用陣列的方式就可以解決了XD

謝謝大大⊙口⊙!

froce iT邦大師 1 級 ‧ 2023-03-29 08:26:23 檢舉

以我的工作經驗,有時候可能會有多個相同類型但是不同日期的報表要進行資料處理分析的話,我才會用到我所提供的方法XD

你這種狀況我通常會在前面建個空dict來存,用locals來存我個人是覺得不是很清楚。而且locals會把某些你不想收集的也收進去。
基本上locals我幾乎不用。

result = dict()
date_list = ["20230101", "20230102"]
for date in date_list:
	result["df_" + date] = pd.read_excel("{}.xlsx".format(date))
2
一級屠豬士
iT邦大師 1 級 ‧ 2023-03-29 07:53:43

你應該先把Python 基本的工作馬,List 好好的練習一下.
而不是急著去做應用,然後東卡西卡. 總是有人急忙忙要砍柴,如果發覺柴刀不夠利,
是不是先把柴刀磨一磨.
資訊這條路,要學的東西很多,不要急躁浮躁.
另外我要說一下,有些人一直在Python的相關問答中,講陣列,這不是特定指誰,是有些人已經有在用
np,但是很多基本的問題,其實就是一些練習,最好是先使用語言基本的元素,鍛鍊基本的技巧,
再來使用進階更強大的套件.
我看到不少,來問Python問題的人,有些是問Pandas,問答的過程中,發覺對方對List完全沒有
理解.
這是幾個月前,我回答你關於List的.
https://ithelp.ithome.com.tw/questions/10210562

經過這些年觀察問Python問題的,一些書本大多是 List 簡單先帶過,然後教迴圈,
然後傻傻的迴圈取List內的值,後面也沒有再補充 List的用法,甚至還有人來這裡問問題,
把List叫陣列也不少,基本上就是把傳統C的教材,稍微改一下,就可以叫做 PythonXXX 的書了.
缺乏Python風格及特色的介紹.

froce iT邦大師 1 級 ‧ 2023-03-29 08:19:06 檢舉

基本上就是把傳統C的教材,稍微改一下,就可以叫做 PythonXXX 的書了.
缺乏Python風格及特色的介紹.

沒錯,這現象我很早之前就發現了。
很多學校教學也很明顯是拿C的例題來改,寫的範例都是C的寫法。
要用C的寫法沒有問題,但後面是不是該補充 pythonic 的寫法。
老師自己都偷懶了,學生哪有可能自己課後去查更方便的寫法。

我要發表回答

立即登入回答