Hướng dẫn how to print variable name instead of value in python - cách in tên biến thay vì giá trị trong python

Nói rằng tôi có một biến có tên

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3
2 Nó bằng 2. Làm thế nào tôi có thể truy cập tên của biến? Một cái gì đó tương đương với

In [53]: namestr[choice]
Out[53]: 'choice'

để sử dụng trong việc tạo ra một từ điển. Có một cách tốt để làm điều này và tôi chỉ thiếu nó.

EDIT:

Lý do để làm điều này là như vậy. Tôi đang chạy một số công cụ phân tích dữ liệu nơi tôi gọi chương trình với nhiều tham số mà tôi muốn điều chỉnh, hoặc không điều chỉnh, trong thời gian chạy. Tôi đã đọc trong các tham số tôi đã sử dụng trong lần chạy cuối cùng từ tệp .config được thành lập dưới dạng

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3

Khi được nhắc cho các giá trị, được sử dụng trước đó được hiển thị và đầu vào chuỗi trống sẽ sử dụng giá trị được sử dụng trước đó.

Câu hỏi của tôi xuất hiện bởi vì khi viết từ điển mà các giá trị này đã được quét vào. Nếu cần tham số, tôi sẽ chạy

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3
3 truy cập vào tệp và tìm tham số.

Tôi nghĩ rằng tôi sẽ tránh được vấn đề cùng nhau bằng cách đọc tệp .________ 14 một lần và tạo ra một từ điển từ đó. Tôi tránh điều đó ban đầu vì ... những lý do tôi không còn nhớ nữa. Tình huống hoàn hảo để cập nhật mã của tôi!

Constantin

Phim thương hiệu vàng 27K1059 Huy hiệu bạc79 Hàng đồng10 gold badges59 silver badges79 bronze badges

hỏi ngày 26 tháng 2 năm 2009 lúc 22:26Feb 26, 2009 at 22:26

Vật lýMichaelPhysmichaelphysicsmichael

4.61311 Huy hiệu vàng34 Huy hiệu bạc54 Huy hiệu đồng11 gold badges34 silver badges54 bronze badges

9

Nếu bạn nhấn mạnh, đây là một số giải pháp dựa trên kiểm tra khủng khiếp.

import inspect, re

def varname[p]:
  for line in inspect.getframeinfo[inspect.currentframe[].f_back][3]:
    m = re.search[r'\bvarname\s*\[\s*[[A-Za-z_][A-Za-z0-9_]*]\s*\]', line]
    if m:
      return m.group[1]

if __name__ == '__main__':
  spam = 42
  print varname[spam]

Tôi hy vọng nó sẽ truyền cảm hứng cho bạn để đánh giá lại vấn đề bạn có và tìm kiếm một cách tiếp cận khác.

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 23:05Feb 26, 2009 at 23:05

5

Để trả lời câu hỏi ban đầu của bạn:

def namestr[obj, namespace]:
    return [name for name in namespace if namespace[name] is obj]

Example:

>>> a = 'some var'
>>> namestr[a, globals[]]
['a']

Như @rbright đã chỉ ra bất cứ điều gì bạn làm có lẽ có những cách tốt hơn để làm điều đó.

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 23:14Feb 26, 2009 at 23:14

JFSJFSjfs

383K182 Huy hiệu vàng947 Huy hiệu bạc1618 Huy hiệu đồng182 gold badges947 silver badges1618 bronze badges

9

Nếu bạn đang cố gắng làm điều này, điều đó có nghĩa là bạn đang làm điều gì đó sai. Thay vào đó, hãy xem xét sử dụng

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3
5.

def show_val[vals, name]:
    print "Name:", name, "val:", vals[name]

vals = {'a': 1, 'b': 2}
show_val[vals, 'b']

Output:

Name: b val: 2

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 22:52Feb 26, 2009 at 22:52

đệ quyrecursive

82K32 Huy hiệu vàng147 Huy hiệu bạc236 Huy hiệu Đồng32 gold badges147 silver badges236 bronze badges

3

Bạn không thể, vì không có biến trong Python mà chỉ tên.

Ví dụ:

> a = [1,2,3]
> b = a
> a is b
True

Cái nào trong số đó bây giờ là biến chính xác? Không có sự khác biệt giữa

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3
6 và
filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3
7.

Có một câu hỏi tương tự trước đây.

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 22:31Feb 26, 2009 at 22:31

Georg Schöllygeorg SchöllyGeorg Schölly

Huy hiệu vàng 122K4848 gold badges214 silver badges264 bronze badges

7

Thay vì hỏi chi tiết về một giải pháp cụ thể, tôi khuyên bạn nên mô tả vấn đề bạn gặp phải; Tôi nghĩ rằng bạn sẽ nhận được câu trả lời tốt hơn. Tôi nói điều này vì gần như chắc chắn có một cách tốt hơn để làm bất cứ điều gì bạn đang cố gắng làm. Truy cập tên biến theo cách này là không cần thiết để giải quyết các vấn đề trong bất kỳ ngôn ngữ nào.

Điều đó nói rằng, tất cả các tên biến của bạn đã có trong các từ điển có thể truy cập thông qua các chức năng tích hợp của người dân địa phương và toàn cầu. Sử dụng chính xác cho phạm vi bạn đang kiểm tra.

Một trong số ít các thành ngữ phổ biến để kiểm tra các từ điển này là để nội suy chuỗi dễ dàng:

>>> first = 'John'
>>> last = 'Doe'
>>> print '%[first]s %[last]s' % globals[]
John Doe

Loại điều này có xu hướng dễ đọc hơn một chút so với các lựa chọn thay thế mặc dù nó yêu cầu kiểm tra các biến theo tên.

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 22:49Feb 26, 2009 at 22:49

Ryan Brightryan BrightRyan Bright

3,45721 Huy hiệu bạc19 Huy hiệu đồng21 silver badges19 bronze badges

2

Với sự đánh giá háo hức, các biến về cơ bản biến thành giá trị của chúng bất cứ khi nào bạn nhìn vào chúng [để diễn giải]. Điều đó nói rằng, Python có không gian tên tích hợp. Ví dụ: locals [] sẽ trả về bản đồ từ điển của một tên của các biến của hàm cho các giá trị của chúng và Globals [] thực hiện tương tự cho một mô -đun. Do đó:

for name, value in globals[].items[]:
    if value is unknown_variable:
        ... do something with name

Lưu ý rằng bạn không cần nhập bất cứ thứ gì để có thể truy cập người dân địa phương [] và Globals [].

Ngoài ra, nếu có nhiều bí danh cho một giá trị, việc lặp lại thông qua một không gian tên chỉ tìm thấy cái đầu tiên.

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 22:45Feb 26, 2009 at 22:45

NikhilnikhilNikhil

5.6451 Huy hiệu vàng31 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge31 silver badges30 bronze badges

2

Một cái gì đó như thế này sẽ làm việc cho bạn?

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3
0

Và trong ví dụ của bạn:

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3
1

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 23:01Feb 26, 2009 at 23:01

myroslavmyroslavmyroslav

3.64322 Huy hiệu bạc28 Huy hiệu đồng22 silver badges28 bronze badges

Đối với câu hỏi sửa đổi về cách đọc trong các tham số cấu hình, tôi thực sự khuyên bạn nên tiết kiệm cho mình một chút thời gian và công sức và sử dụng ConfigParser hoặc [công cụ ưa thích của tôi] configObj.

Họ có thể làm mọi thứ bạn cần, chúng dễ sử dụng và người khác đã lo lắng về cách làm cho họ hoạt động bình thường!

Đã trả lời ngày 26 tháng 2 năm 2009 lúc 23:39Feb 26, 2009 at 23:39

James Bradyjames BradyJames Brady

26.3K7 Huy hiệu vàng 50 Huy hiệu bạc57 Huy hiệu Đồng7 gold badges50 silver badges57 bronze badges

Làm thế nào để bạn in một tên biến trong Python?

Sử dụng các chuỗi F trong Python để in các biến là phương pháp được sử dụng phổ biến nhất và cá nhân tôi khuyên bạn nên sử dụng phương pháp này. Trong phương pháp này, 'F' được đặt trước dấu ngoặc kép mở của chuỗi. Niềng răng {} được đặt xung quanh tên của các biến mà bạn đang tìm kiếm để in.an 'f' is placed before the opening quotation mark of a string. Braces {} are placed around the names of variables that you are looking to print.

Làm thế nào để bạn viết tên biến trong Python?

Tên biến Python..
Một tên biến phải bắt đầu bằng một chữ cái hoặc ký tự dấu gạch dưới ..
Một tên biến không thể bắt đầu với một số ..
Một tên biến chỉ có thể chứa các ký tự alpha-numeric và nhấn mạnh [A-Z, 0-9 và _].
Tên biến là nhạy cảm trường hợp [tuổi, tuổi và tuổi là ba biến khác nhau].

Bạn có thể đặt tên cho một bản in biến?

In là một từ khóa dành riêng, nó sẽ không hoạt động như một tên biến.it won't work as a variable name.

Làm thế nào để bạn đặt một biến một tên?

Các quy tắc cho các biến đặt tên:..
Tất cả các tên biến phải bắt đầu bằng một chữ cái của bảng chữ cái hoặc một.gạch dưới [_].....
Sau chữ cái đầu tiên, tên biến cũng có thể chứa các chữ cái và số.....
Các ký tự chữ hoa khác biệt với các ký tự thường.....
Bạn không thể sử dụng từ khóa C ++ [từ dành riêng] làm tên biến ..

Bài Viết Liên Quan

Chủ Đề