2012-02-24 35 views
35

Để đơn giản đây là một phiên bản rút gọn của những gì tôi muốn làm:Làm thế nào để có được giá trị của một biến được đặt tên của nó trong một chuỗi?

def foo(a): 
    # I want to print the value of the variable 
    # the name of which is contained in a 

tôi biết làm thế nào để làm điều này trong PHP:

function foo($a) { 
    echo $$a; 
} 

global $string = "blah"; // might not need to be global but that's irrelevant 
foo("string"); // prints "blah" 

Bất kỳ cách nào để làm điều này?

Trả lời

55

Nếu đó là một biến toàn cầu, sau đó bạn có thể làm:

>>> a = 5 
>>> globals()['a'] 
5 

Một lưu ý về các giải pháp "eval" khác nhau: bạn nên cẩn thận với eval, đặc biệt là nếu chuỗi bạn đang đánh giá đến từ một nguồn có khả năng không đáng tin cậy - nếu không, bạn có thể sẽ xóa toàn bộ nội dung của đĩa hoặc thứ gì đó tương tự nếu bạn bị đưa ra một chuỗi độc hại.

(Nếu nó không phải là toàn cầu, sau đó bạn sẽ cần truy cập vào bất cứ điều gì namespace nó được định nghĩa trong. Nếu bạn không có điều đó, không có cách nào bạn sẽ có thể truy cập vào nó.)

+18

'người dân địa phương() 'cho người dân địa phương. –

3
>>> x=5 
>>> print eval('x') 
5 

tada!

8
>>> string = "blah" 
>>> string 
'blah' 
>>> x = "string" 
>>> eval(x) 
'blah' 
20

Edward Loper của câu trả lời chỉ hoạt động nếu biến nằm trong mô-đun hiện tại. Để có được một giá trị trong mô-đun khác, bạn có thể sử dụng getattr:

import other 
print getattr(other, "name_of_variable") 

https://docs.python.org/2/library/functions.html#getattr

+0

Và nếu bạn muốn sử dụng phương thức này để có được một giá trị trong cùng một mô đun mà bạn đang gọi 'getattr()', sử dụng 'import sys; sys.modules [__ name __] 'để tham chiếu đến module hiện tại. – Dirk

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