Jawabannya adalah Anda tidak ingin melakukan ini. Gunakan daftar sebagai gantinya.
Sven Marnach
2
Jika ini adalah tempat Anda ingin menggunakannya, Anda dapat x = ["Hello" * 9]mengaksesnya dengan. x[0], x[1] ...Jika Anda ingin menggunakannya dengan cara yang berbeda, saya pikir Anda harus memberi kami lebih banyak latar belakang kode.
James Khoury
3
Jika saya pernah memiliki kekuatan atas suatu bahasa maka menggunakan angka dalam nama variabel akan menghasilkan SyntaxError: Use a data structure.;-)
Jochen Ritzel
1
dan jangan lupa string0 Anda;)
wim
10
@ James Khoury: Itu kurang tepat. Itu akan berakhir dengan xmenjadi daftar yang berisi satu elemen - string "HelloHelloHelloHelloHelloHelloHelloHelloHello". Saya pikir yang Anda maksud x = ["Hello"] * 9.
d ={}for x in range(1,10):
d["string{0}".format(x)]="Hello"
>>> d["string5"]'Hello'>>> d
{'string1':'Hello','string2':'Hello','string3':'Hello','string4':'Hello','string5':'Hello','string6':'Hello','string7':'Hello','string8':'Hello','string9':'Hello'}
Saya mengatakan ini agak sulit, tetapi sebenarnya cara terbaik untuk mengasosiasikan satu nilai dengan nilai lain adalah kamus. Untuk itulah ia dirancang!
for x in range(0,9):
globals()['string%s'% x]='Hello'
lalu misalnya:
print(string3)
akan memberimu:
Hello
Namun ini adalah praktik yang buruk. Anda sebaiknya menggunakan kamus atau daftar, seperti yang diusulkan orang lain. Kecuali, tentu saja, Anda benar-benar ingin tahu bagaimana melakukannya, tetapi tidak ingin menggunakannya.
Bisakah Anda menjelaskan mengapa ini adalah ide yang buruk?
ajdigregorio
6
@paintedcones: Pertama, harus ada satu cara untuk melakukannya , dan menggunakan kamus sederhana lebih alami. Menggunakan kamus global sebagai gantinya adalah ide yang buruk, karena itu juga "secara implisit" membuat variabel global atau memodifikasinya. Karena pengaturan dan pengubahan variabel dengan cara ini membutuhkan notasi kamus, tidak ada alasan untuk menggunakan globals()selain beberapa yang sederhana dict.
Tadeck
Ada beberapa situasi ketika Anda benar-benar perlu membuat banyak variabel, x1, x2, x3, dll. Namun dalam kebanyakan situasi, menggunakan kamus adalah hal yang paling tepat untuk dilakukan.
DevilApple227
20
Salah satu cara untuk melakukannya adalah dengan exec(). Sebagai contoh:
Ingat execsesuatu, sihir hitam, kerentanan serangan, hal-hal buruk, tetapi itu menjawab pertanyaan seperti yang ditanyakan.
psaxton
18
Tidak ada gunanya membuat nama variabel variabel. Mengapa?
Mereka tidak diperlukan: Anda dapat menyimpan semuanya dalam daftar, kamus, dan sebagainya
Mereka sulit dibuat: Anda harus menggunakan execatauglobals()
Anda tidak dapat menggunakannya: Bagaimana Anda menulis kode yang menggunakan variabel ini? Anda harus menggunakan exec/globals()lagi
Menggunakan daftar jauh lebih mudah:
# 8 strings: `Hello String 0, .. ,Hello String 8`
strings =["Hello String %d"% x for x in range(9)]for string in strings:# you can loop over themprint string
print string[6]# or pick any of them
Terima kasih!! Saya harus memilih formulir di antara kamus atau daftar kerangka data. Dan karena saya perlu menyusun ulang kerangka data berdasarkan nilai tertentu pada kerangka data, saya tidak dapat menggunakan bentuk kamus. Ya, Anda benar! Dalam beberapa kasus, tidak ada gunanya membuat nama variabel!
Doo Hyun Shin
9
Jangan lakukan ini menggunakan kamus
import sys
this = sys.modules[__name__]# this is now your current namespacefor x in range(0,9):
setattr(this,'string%s'% x,'Hello')print string0
print string1
print string2
print string3
print string4
print string5
print string6
print string7
print string8
jangan lakukan ini gunakan dikt
globals () memiliki risiko karena memberi Anda apa yang saat ini diarahkan oleh namespace tetapi ini dapat berubah sehingga mengubah pengembalian dari global () bukanlah ide yang baik
Tidak seperti beberapa bahasa, Anda tidak dapat menetapkan elemen dalam daftar Python yang belum ada (Anda akan mendapatkan kesalahan "daftar tugas indeks di luar jangkauan"). Anda mungkin ingin menggunakan string.append("Hello")sebagai gantinya.
Greg Hewgill
1
Saya seharusnya tahu itu, terima kasih telah mengingatkan saya. Sudah diperbaiki.
Lledargo
Hak Anda, saya sedang berpikir untuk menambahkan ke ujung string, bukan menambahkan ke array. Saya minta maaf semuanya.
Lledargo
Pedantically 'you would have 9 "Hello"' should be 'you would have 1 "Hello" 9 times'. Itu adalah string yang sama yang berulang, bukan sembilan string yang berbeda.
Duncan
2
Saya pikir tantangannya di sini bukanlah untuk memanggil global ()
Saya pribadi akan menentukan daftar untuk variabel (dinamis) Anda yang akan disimpan dan kemudian menambahkannya ke dalam for loop. Kemudian gunakan for loop terpisah untuk melihat setiap entri atau bahkan menjalankan operasi lain.
Berikut ini contohnya - Saya memiliki sejumlah switch jaringan (misalnya antara 2 dan 8) di berbagai BRanches. Sekarang saya perlu memastikan bahwa saya memiliki cara untuk menentukan berapa banyak sakelar yang tersedia (atau tes ping hidup) di cabang tertentu dan kemudian melakukan beberapa operasi padanya.
Ini kode saya:
import requests
import sys
def switch_name(branchNum):# s is an empty list to start with
s =[]#this FOR loop is purely for creating and storing the dynamic variable names in sfor x in range(1,8,+1):
s.append("BR"+ str(branchNum)+"SW0"+ str(x))#this FOR loop is used to read each of the switch in list s and perform operations onfor i in s:print(i,"\n")# other operations can be executed here too for each switch (i) - like SSH in using paramiko and changing switch interface VLAN etc.def main():# for example's sake - hard coding the site code
branchNum="123"
switch_name(branchNum)if __name__ =='__main__':
main()
Kamus dapat berisi nilai dan nilai dapat ditambahkan dengan menggunakan metode update (). Anda ingin sistem Anda membuat variabel, jadi Anda harus tahu di mana harus menyimpannya.
variables ={}
break_condition=True# Dont forget to add break condition to while loop if you dont want your system to go crazy.
name =“variable”
i =0
name = name + str(i)#this will be your variable name.whileTrue:
value =10#value to assign
variables.update({name:value})if break_condition ==True:break
x = ["Hello" * 9]
mengaksesnya dengan.x[0], x[1] ...
Jika Anda ingin menggunakannya dengan cara yang berbeda, saya pikir Anda harus memberi kami lebih banyak latar belakang kode.SyntaxError: Use a data structure.
;-)x
menjadi daftar yang berisi satu elemen - string "HelloHelloHelloHelloHelloHelloHelloHelloHello". Saya pikir yang Anda maksudx = ["Hello"] * 9
.Jawaban:
Tentu kamu bisa; itu disebut kamus :
Saya mengatakan ini agak sulit, tetapi sebenarnya cara terbaik untuk mengasosiasikan satu nilai dengan nilai lain adalah kamus. Untuk itulah ia dirancang!
sumber
Ini benar-benar ide yang buruk, tapi ...
lalu misalnya:
akan memberimu:
Namun ini adalah praktik yang buruk. Anda sebaiknya menggunakan kamus atau daftar, seperti yang diusulkan orang lain. Kecuali, tentu saja, Anda benar-benar ingin tahu bagaimana melakukannya, tetapi tidak ingin menggunakannya.
sumber
globals()
selain beberapa yang sederhanadict
.Salah satu cara untuk melakukannya adalah dengan
exec()
. Sebagai contoh:Di sini saya memanfaatkan pemformatan string f yang praktis dengan Python 3.6+
sumber
exec
sesuatu, sihir hitam, kerentanan serangan, hal-hal buruk, tetapi itu menjawab pertanyaan seperti yang ditanyakan.Tidak ada gunanya membuat nama variabel variabel. Mengapa?
exec
atauglobals()
exec/globals()
lagiMenggunakan daftar jauh lebih mudah:
sumber
Jangan lakukan ini menggunakan kamus
jangan lakukan ini gunakan dikt
globals () memiliki risiko karena memberi Anda apa yang saat ini diarahkan oleh namespace tetapi ini dapat berubah sehingga mengubah pengembalian dari global () bukanlah ide yang baik
sumber
Ini seharusnya berhasil.
sumber
Saya akan menggunakan daftar:
Dengan cara ini, Anda akan mendapatkan 9 kata "Halo" dan Anda bisa mendapatkannya satu per satu seperti ini:
Di mana Anda
x
dapat mengidentifikasi kata "Halo" yang Anda inginkan.Jadi,
print(string[1])
mau mencetakHello
.sumber
string.append("Hello")
sebagai gantinya.Saya pikir tantangannya di sini bukanlah untuk memanggil global ()
Saya pribadi akan menentukan daftar untuk variabel (dinamis) Anda yang akan disimpan dan kemudian menambahkannya ke dalam for loop. Kemudian gunakan for loop terpisah untuk melihat setiap entri atau bahkan menjalankan operasi lain.
Berikut ini contohnya - Saya memiliki sejumlah switch jaringan (misalnya antara 2 dan 8) di berbagai BRanches. Sekarang saya perlu memastikan bahwa saya memiliki cara untuk menentukan berapa banyak sakelar yang tersedia (atau tes ping hidup) di cabang tertentu dan kemudian melakukan beberapa operasi padanya.
Ini kode saya:
Outputnya adalah:
BR123SW01
BR123SW02
BR123SW03
BR123SW04
BR123SW05
BR123SW06
BR123SW07
sumber
Menggunakan kamus harus menjadi cara yang tepat untuk menyimpan variabel dan nilai terkait, dan Anda dapat menggunakan ini:
Tetapi jika Anda ingin menambahkan variabel ke variabel lokal, Anda dapat menggunakan:
Dan misalnya jika Anda ingin menetapkan nilai 0 hingga 8, Anda dapat menggunakan:
sumber
Kamus dapat berisi nilai dan nilai dapat ditambahkan dengan menggunakan metode update (). Anda ingin sistem Anda membuat variabel, jadi Anda harus tahu di mana harus menyimpannya.
sumber