2012-07-19 60 views
58

thể trùng lặp:
How do I do variable variables in Python?Sử dụng một biến chuỗi như một tên biến

Tôi có một biến với một chuỗi được gán cho nó và tôi muốn xác định một biến mới trên cơ sở đó chuỗi.

foo = "bar" 
foo = "something else" 

# What I actually want is: 

bar = "something else" 
+14

Bạn có thể KHÔNG muốn điều đó. Tại sao bạn đang cố gắng làm điều đó? – JBernardo

+2

Không, bạn không có. Lý do bạn phải sử dụng 'exec' là vì' locals() 'không hỗ trợ sửa đổi. 'Người dân địa phương() 'không hỗ trợ thay đổi vì nó sẽ làm cho việc thực hiện phức tạp hơn và chậm hơn và là ** không bao giờ ** một ý tưởng tốt –

+1

tương tự bài viết: http://stackoverflow.com/questions/1373164/ làm thế nào-do-i-do-biến-biến-in-python – Kartik

Trả lời

107

Bạn có thể sử dụng exec cho rằng:

>>> foo = "bar" 
>>> exec(foo + " = 'something else'") 
>>> print bar 
something else 
>>> 
+52

+1 bởi vì ông trả lời câu hỏi (như là một ý tưởng tồi vì nó có thể được). – mgalgs

+0

Đây là câu trả lời hay nhất, nhưng nó không hiệu quả với tôi. Có lẽ đó là do phạm vi của tôi. Nó hoạt động trong một tệp đơn giản giống như tệp trong ví dụ của bạn, nhưng tôi đang trong một phương thức của một lớp cố gắng đặt các biến cục bộ và chúng không được thiết lập. – sudo

91

Bạn sẽ hạnh phúc hơn nhiều bằng cách sử dụng từ điển thay vì:

my_data = {} 
foo = "hello" 
my_data[foo] = "goodbye" 
assert my_data["hello"] == "goodbye" 
+22

Dường như không giải quyết được câu hỏi. – dnsmkl

+2

Có. Điều này có thể hữu ích, nhưng đó không phải là những gì OP hỏi. – sudo

+19

Tôi rất vui khi thấy câu trả lời vẫn còn ở đây. Tôi nghĩ rằng chúng ta có thể tin tưởng người đọc Stack Overflow để tự đánh giá liệu câu trả lời có phù hợp với nhu cầu của họ hay không. Câu trả lời này không cung cấp "biến biến", nó là sự thật. Nhưng tôi đảm bảo với bạn rằng 99% những người tìm kiếm chúng sẽ hạnh phúc hơn khi tìm thấy từ điển. –

59

Bạn có thể sử dụng setattr

name= 'varname' 
value= 'something' 

setattr(self, name, value) #equivalent to: self.varname= 'something' 

print self.varname 
#will print 'something' 

Nhưng , vì bạn nên inf orm một đối tượng để nhận được biến mới, tôi nghĩ rằng điều này chỉ hoạt động bên trong các lớp.

+8

Chính xác, nó chỉ hoạt động bên trong các lớp học. – sudo

Các vấn đề liên quan