Hướng dẫn how do i find the variable name in python? - làm cách nào để tìm tên biến trong python?


Tên biến

Một biến có thể có một tên ngắn (như X và Y) hoặc một tên mô tả hơn (Age, Carname, Total_Volume).

Quy tắc cho các 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)

Thí dụ

#Tên biến tên: myvar = "john" my_var = "john" _my_var = "john" myvar = "john" myvar = "john" myvar2 = "john"
myvar = "John"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"

#ILLEGAL Tên biến: 2Myvar = "John" My-Var = "John" My Var = "John"
2myvar = "John"
my-var = "John"
my var = "John"

Hãy tự mình thử »

Hãy nhớ rằng các tên biến nhạy cảm trường hợp





Tên biến

Một biến có thể có một tên ngắn (như X và Y) hoặc một tên mô tả hơn (Age, Carname, Total_Volume). Quy tắc cho các 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)

Thí dụ

Tên biến hợp pháp:

myvar = "john" my_var = "john" _my_var = "john" myvar = "john" myvar = "john" myvar2 = "john"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"

Hãy tự mình thử »

Thí dụ

Tên biến hợp pháp:

myvar = "john" my_var = "john" _my_var = "john" myvar = "john" myvar = "john" myvar2 = "john"
my-var = "John"
my var = "John"

Hãy tự mình thử »

Tên biến bất hợp pháp:



2Myvar = "John" My-Var = "John" My Var = "John"

Hãy nhớ rằng các tên biến nhạy cảm trường hợp

Tên biến đa từ

Tên biến với nhiều hơn một từ có thể khó đọc.

Có một số kỹ thuật bạn có thể sử dụng để làm cho chúng dễ đọc hơn:

Trường hợp lạc đà


Mỗi từ, ngoại trừ từ đầu tiên, bắt đầu bằng một chữ cái viết hoa:

myvariablename = "John"

Trường hợp Pascal


Mỗi từ bắt đầu bằng một chữ cái viết hoa:

Myvariablename = "John"

Vỏ rắn



TL;DR

Sử dụng Trình trợ giúp Wrapper từ python-varname:

from varname.helpers import Wrapper

foo = Wrapper(dict())

# foo.name == 'foo'
# foo.value == {}
foo.value['bar'] = 2

Đối với phần hiểu danh sách, bạn có thể làm:

n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value

Tôi là tác giả của gói python-varname. Vui lòng cho tôi biết nếu bạn có bất kỳ câu hỏi hoặc bạn có thể gửi vấn đề trên GitHub.

Câu trả lời dài

Nó thậm chí có thể?

Có và không.

Chúng tôi đang truy xuất các tên biến trong thời gian chạy, vì vậy chúng tôi cần một chức năng được gọi để cho phép chúng tôi truy cập các khung trước để truy xuất các tên biến. Đó là lý do tại sao chúng ta cần một Wrapper ở đó. Trong chức năng đó, vào thời gian chạy, chúng tôi đang phân tích mã nguồn/nút AST trong các khung trước để có được tên biến chính xác.

Tuy nhiên, mã nguồn/các nút AST trong các khung trước không phải lúc nào cũng có sẵn hoặc chúng có thể được sửa đổi bởi các môi trường khác (ví dụ: câu lệnh assert của ____ 8). Một ví dụ đơn giản là các mã chạy qua

n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
0. Mặc dù chúng tôi vẫn có thể lấy một số thông tin từ mã byte, nhưng nó cần quá nhiều nỗ lực và nó cũng dễ bị lỗi.

Làm thế nào để làm nó?

Trước hết, chúng ta cần xác định khung nào được đưa ra. Nó không phải lúc nào cũng chỉ đơn giản là khung trực tiếp trước đó. Ví dụ: chúng ta có thể có một trình bao bọc khác cho chức năng:

from varname import varname

def func():
  return varname()

def wrapped():
  return func()

x = wrapped()

Trong ví dụ trên, chúng ta phải bỏ qua khung bên trong

n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
1 để đến đúng khung
n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
2 để chúng ta có thể định vị
n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
3. Các đối số
n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
4 và
n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
5 của
n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
6 cho phép chúng tôi bỏ qua một số khung trung gian này. Xem thêm chi tiết trong tệp readme và tài liệu API của gói.

Sau đó, chúng ta cần phân tích nút AST để định vị nơi biến được gán giá trị (gọi chức năng) đến. Nó không phải lúc nào cũng chỉ là một nhiệm vụ đơn giản. Đôi khi có thể có các nút AST phức tạp, ví dụ,

n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
7. Chúng ta cần xác định sự gán chính xác bằng cách đi qua cây AST.

Nó đáng tin cậy như thế nào?

Khi chúng tôi xác định nút gán, nó là đáng tin cậy.

n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
6 là tất cả tùy thuộc vào gói
n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
9 để tìm nút. Các phát hiện thực thi nút được đảm bảo là chính xác (xem thêm điều này).

Nó hoạt động một phần với các môi trường áp dụng các phép thuật AST khác, bao gồm pytest, ipython, macropy, Birdseye, reticulation với R, v.v.

Chúng ta có cần một gói để làm điều đó không?

Vâng, có và không, một lần nữa.

Nếu kịch bản của bạn đơn giản, mã được cung cấp bởi @Juan Isaza hoặc @scohe001 có thể là đủ để bạn làm việc với trường hợp một biến được xác định ở khung trực tiếp trước đó và nút AST là một bài tập đơn giản. Bạn chỉ cần quay lại một khung và lấy thông tin ở đó.

Tuy nhiên, nếu kịch bản trở nên phức tạp hoặc chúng ta cần áp dụng các kịch bản ứng dụng khác nhau, có lẽ bạn cần một gói như python-varname, để xử lý chúng. Những kịch bản này có thể bao gồm:

  1. Trình bày các tin nhắn thân thiện hơn khi mã nguồn không khả dụng hoặc không thể truy cập các nút AST
  2. Bỏ qua các khung trung gian (cho phép chức năng được bọc hoặc gọi trong các khung trung gian khác)
  3. Tự động bỏ qua các cuộc gọi từ các chức năng hoặc thư viện tích hợp. Ví dụ:
    from varname import varname
    
    def func():
      return varname()
    
    def wrapped():
      return func()
    
    x = wrapped()
    
    1
  4. Truy xuất nhiều tên biến ở phía bên trái của nhiệm vụ
  5. etc.

Làm thế nào về

from varname import varname

def func():
  return varname()

def wrapped():
  return func()

x = wrapped()
2?

Giống như câu trả lời được cung cấp bởi @aivar Paalberg. Nó chắc chắn nhanh chóng và đáng tin cậy. Tuy nhiên, nó không phải là thời gian chạy, có nghĩa là bạn phải biết đó là

from varname import varname

def func():
  return varname()

def wrapped():
  return func()

x = wrapped()
3 trước khi bạn in tên ra. Nhưng với
n_jobs = Wrapper() 
users = Wrapper() 
queues = Wrapper() 
priorities = Wrapper() 

list_of_dicts = [n_jobs, users, queues, priorities]
columns = [d.name for d in list_of_dicts]
# ['n_jobs', 'users', 'queues', 'priorities']
# REMEMBER that you have to access the  by d.value
6, bạn không cần phải biết rằng biến đó đang đến:

from varname import varname

def func():
  return varname()

# In external uses
x = func() # 'x'
y = func() # 'y'

Cuối cùng

python-varname không chỉ có thể phát hiện tên biến từ một bài tập mà còn:

  • Truy cập tên biến trực tiếp, sử dụng
    from varname import varname
    
    def func():
      return varname()
    
    def wrapped():
      return func()
    
    x = wrapped()
    
    6
  • Phát hiện tên thuộc tính ngay lập tức tiếp theo, sử dụng
    from varname import varname
    
    def func():
      return varname()
    
    def wrapped():
      return func()
    
    x = wrapped()
    
    7
  • Tìm nạp các tên/nguồn đối số được truyền cho một hàm bằng cách sử dụng
    from varname import varname
    
    def func():
      return varname()
    
    def wrapped():
      return func()
    
    x = wrapped()
    
    8

Đọc thêm từ tài liệu của nó.

Tuy nhiên, từ cuối cùng tôi muốn nói là, hãy cố gắng tránh sử dụng nó bất cứ khi nào bạn có thể.try to avoid using it whenever you can.

Bởi vì bạn không thể đảm bảo rằng mã máy khách sẽ chạy trong một môi trường có sẵn nút nguồn hoặc nút AST có thể truy cập được. Và tất nhiên, chi phí tài nguyên để phân tích mã nguồn, xác định môi trường, truy xuất các nút AST và đánh giá chúng khi cần thiết.

Làm thế nào để bạn tìm thấy 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).

Làm thế nào để bạn tìm thấy tên biến?

Tên biến phải mô tả thông tin được biểu thị bởi biến. Một tên biến sẽ cho bạn biết chính xác bằng các từ mà biến đại diện cho những gì. Mã của bạn sẽ được đọc nhiều lần hơn nó được viết. Ưu tiên cách đọc mã của bạn dễ dàng hơn là cách viết nhanh.. A variable name should tell you concisely in words what the variable stands for. Your code will be read more times than it is written. Prioritize how easy your code is to read over than how quick it is to write.

Làm thế nào để bạn tìm thấy biến của một hàm trong Python?

Sử dụng cú pháp thuộc tính đối tượng để truy cập một biến bên ngoài hàm.Trong một chức năng có tên Func, sử dụng Func cú pháp.Biến = giá trị để lưu trữ giá trị trong biến như một thuộc tính của func.Để truy cập giá trị bên ngoài func, sử dụng func () để chạy func, sau đó sử dụng chức năng cú pháp_name. to access a variable outside of a function. In a function named func , use the syntax func. variable = value to store value in variable as an attribute of func . To access value outside of func , use func() to run func , then use the syntax function_name.

Biến tên __ tên __ trong Python là gì?

__name__ là một biến tích hợp để đánh giá theo tên của mô-đun hiện tại.Do đó, nó có thể được sử dụng để kiểm tra xem tập lệnh hiện tại đang được tự mình chạy hay được nhập ở một nơi khác bằng cách kết hợp nó với câu lệnh IF, như được hiển thị bên dưới.Xem xét hai tệp riêng biệt File1 và File2.a built-in variable which evaluates to the name of the current module. Thus it can be used to check whether the current script is being run on its own or being imported somewhere else by combining it with if statement, as shown below. Consider two separate files File1 and File2.