Bạn có thể sử dụng lại tên biến trong python không?

Một biến có thể có tên ngắn [như x và y] hoặc tên mô tả hơn [tuổi, carname, total_volume]

Quy tắc cho các biến Python

  • Tên biến phải bắt đầu bằng một chữ cái hoặc ký tự gạch dưới
  • Tên biến không được bắt đầu bằng số
  • Tên biến chỉ có thể chứa các ký tự chữ và số và dấu gạch dưới [A-z, 0-9 và _ ]
  • Tên biến phân biệt chữ hoa chữ thường [tuổi, Tuổi và TUỔI là ba biến khác nhau]

Thí dụ

#Tên biến pháp lý.
myvar = "John"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"

#Tên biến không hợp lệ.
2myvar = "John"
my-var = "John"
my var = "John"

Tự mình thử »

Hãy nhớ rằng tên biến phân biệt chữ hoa chữ thường


DCL01-C-EX2. Biến tạm thời trong phạm vi mới bên trong macro có thể ghi đè giá trị nhận dạng trong phạm vi chứa. Tuy nhiên, ngoại lệ này không áp dụng cho các đối số của chính macro

Maximiliano Contieri

Theo dõi

Ngày 1 tháng 12 năm 2021

·

2 phút đọc

Tiết kiệm

Mã mùi 107 — Tái sử dụng biến

Việc sử dụng lại các biến làm cho phạm vi và ranh giới khó theo dõi hơn

Ảnh của Sigmund trên Bapt

TL; DR. Không đọc và viết cùng một biến cho các mục đích khác nhau

Các vấn đề
  • khả năng đọc
  • Vấn đề tiềm ẩn
Các giải pháp

1. Không sử dụng lại các biến

2. Phương pháp trích xuất để cô lập phạm vi

Định nghĩa bài văn

Khi lập trình một tập lệnh, người ta thường sử dụng lại các biến

Điều này dẫn đến sự nhầm lẫn và làm cho việc gỡ lỗi trở nên khó khăn hơn

Chúng ta nên thu hẹp phạm vi càng nhiều càng tốt

Mã mẫu

Sai

// print line total
double total = item.getPrice[] * item.getQuantity[];
System.out.println[“Line total: “ + total ];
// print amount total
total = order.getTotal[] — order.getDiscount[];
System.out.println[ “Amount due: “ + total ];
// variable is reused

Đúng

function printLineTotal[] {
double total = item.getPrice[] * item.getQuantity[];
System.out.println[“Line total: “ + total ];
}
function printAmountTotal[] {
double total = order.getTotal[] — order.getDiscount[];
System.out.println[ “Amount due: “ + total ];
}
Phát hiện

[X] Tự động

Linters có thể sử dụng cây phân tích cú pháp để tìm định nghĩa và cách sử dụng biến

thẻ
  • khả năng đọc
Sự kết luận

Tránh sử dụng lại tên biến. Sử dụng các tên cụ thể và khác biệt hơn

quan hệ

Mã mùi 03 — Các chức năng quá dài

Con người cảm thấy buồn chán ngoài dòng 10

Blog. thiên tài. io

Thêm thông tin

Tái cấu trúc 002 — Phương pháp trích xuất

Tìm một số đoạn mã có thể được nhóm lại và gọi nguyên tử

Blog. thiên tài. io

Đơn giản trước tính tổng quát, dùng trước dùng lại

Kevlin Henney

Báo giá tuyệt vời về kỹ thuật phần mềm

Đôi khi một suy nghĩ ngắn có thể mang lại những ý tưởng tuyệt vời

Blog. thiên tài. io

Bài viết này là một phần của Series CodeSmell

Cách tìm các phần hôi thối trong mã của bạn

Mã có mùi khó chịu. Hãy xem cách thay đổi mùi hương

Blog. thiên tài. io

Thêm nội dung tại blog. thiên tài. io

Một số quyền được bảo lưu

\[ \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \] \[ \newcommand{\vecd}[1]{\overset{-\. -\. \rightharpoonup}{\vphantom{a}\smash {#1}}} \]\[\newcommand{\id}{\mathrm{id}}\] \[ \newcommand{\Span}{\mathrm{span} . #1 \. }\] \[ \newcommand{\inner}[2]{\langle #1, #2 \rangle}\] \[ \newcommand{\Span}{\mathrm{span}}\] \[\newcommand{\ . #1 \. }\] \[ \newcommand{\inner}[2]{\langle #1, #2 \rangle}\] \[ \newcommand{\Span}{\mathrm{span}}\]\[\newcommand{\ . 8,0]{x212B}}\]

không có tiêu đề

Hãy xem lại một vài dòng mã từ hàm drawWorm[]

    wormSegmentRect = pygame.Rect[x, y, CELLSIZE, CELLSIZE]
    pygame.draw.rect[DISPLAYSURF, DARKGREEN, wormSegmentRect]
    wormInnerSegmentRect = pygame.Rect[x + 4, y + 4, CELLSIZE - 8, CELLSIZE - 8]
    pygame.draw.rect[DISPLAYSURF, GREEN, wormInnerSegmentRect]

Lưu ý rằng hai đối tượng Rect khác nhau được tạo trên dòng 1 [199] và 3 [201]. Đối tượng Rect được tạo ở dòng 1 [199] được lưu trữ trong biến cục bộ wormSegmentRect và được truyền cho hàm pygame.draw.rect[] ở dòng 200. Đối tượng Rect được tạo ở dòng 3 [201] được lưu trữ trong biến cục bộ wormInnerSegmentRect và được truyền cho hàm pygame.draw.rect[] ở dòng 4 [202]

Mỗi khi bạn tạo một biến, nó sẽ chiếm một lượng nhỏ bộ nhớ của máy tính. Bạn có thể nghĩ rằng sẽ rất thông minh nếu sử dụng lại biến wormSegmentRect cho cả hai đối tượng Rect, như thế này

    wormSegmentRect = pygame.Rect[x, y, CELLSIZE, CELLSIZE]
    pygame.draw.rect[DISPLAYSURF, DARKGREEN, wormSegmentRect]
    wormSegmentRect = pygame.Rect[x + 4, y + 4, CELLSIZE - 8, CELLSIZE - 8]
    pygame.draw.rect[DISPLAYSURF, GREEN, wormInnerSegmentRect]

Vì đối tượng Rect được trả về bởi

function printLineTotal[] {
double total = item.getPrice[] * item.getQuantity[];
System.out.println[“Line total: “ + total ];
}
function printAmountTotal[] {
double total = order.getTotal[] — order.getDiscount[];
System.out.println[ “Amount due: “ + total ];
}
0 trên dòng 1 [199] sẽ không cần thiết sau 2 [200], chúng ta có thể ghi đè giá trị này và sử dụng lại biến để lưu trữ đối tượng Rect được trả về bởi
function printLineTotal[] {
double total = item.getPrice[] * item.getQuantity[];
System.out.println[“Line total: “ + total ];
}
function printAmountTotal[] {
double total = order.getTotal[] — order.getDiscount[];
System.out.println[ “Amount due: “ + total ];
}
0 trên dòng 3 [201]. Vì chúng ta hiện đang sử dụng ít biến hơn nên chúng ta đang tiết kiệm bộ nhớ, phải không?

Mặc dù điều này đúng về mặt kỹ thuật, nhưng bạn thực sự chỉ tiết kiệm được một vài byte. Máy tính hiện đại có bộ nhớ vài tỷ byte. Vì vậy, khoản tiết kiệm không phải là lớn. Trong khi đó, việc sử dụng lại các biến làm giảm khả năng đọc mã. Nếu một lập trình viên đang đọc qua đoạn mã này sau khi nó được viết, họ sẽ thấy rằng wormSegmentRect được chuyển đến lệnh gọi pygame.draw.rect[] trên dòng 2 [200] và 4 [202]. Nếu họ cố gắng tìm lần đầu tiên biến wormSegmentRect được gán giá trị, họ sẽ thấy lệnh gọi

function printLineTotal[] {
double total = item.getPrice[] * item.getQuantity[];
System.out.println[“Line total: “ + total ];
}
function printAmountTotal[] {
double total = order.getTotal[] — order.getDiscount[];
System.out.println[ “Amount due: “ + total ];
}
0 trên dòng 1 [199]. Họ có thể không nhận ra rằng đối tượng Rect được trả về bởi lệnh gọi
function printLineTotal[] {
double total = item.getPrice[] * item.getQuantity[];
System.out.println[“Line total: “ + total ];
}
function printAmountTotal[] {
double total = order.getTotal[] — order.getDiscount[];
System.out.println[ “Amount due: “ + total ];
}
0 của dòng 1 [199] không giống với đối tượng được chuyển đến lệnh gọi pygame.draw.rect[] trên dòng 4 [202]

Những điều nhỏ nhặt như thế này khiến bạn khó hiểu chính xác chương trình của bạn hoạt động như thế nào. Sẽ không chỉ có những lập trình viên khác nhìn vào mã của bạn, những người sẽ bối rối. Khi bạn xem lại đoạn mã của chính mình vài tuần sau khi viết nó, bạn có thể gặp khó khăn trong việc nhớ chính xác nó hoạt động như thế nào. Khả năng đọc mã quan trọng hơn nhiều so với việc tiết kiệm một vài byte bộ nhớ ở đây và ở đó

Để thực hành lập trình bổ sung, bạn có thể tải xuống các phiên bản lỗi của Wormy từ http. //invpy. com/buggy/wormy và cố gắng tìm ra cách sửa lỗi

7. 21. Không sử dụng lại tên biến được chia sẻ theo CC BY-NC-SA 3. 0 và do LibreTexts soạn thảo, phối lại và/hoặc quản lý

Chúng ta có thể sử dụng cùng một tên biến trong Python không?

Tóm lại. bạn không thể có hai thứ đồng thời có cùng tên , có thể là một hàm, một số nguyên hoặc bất kỳ đối tượng nào khác trong Python. Chỉ cần sử dụng một tên khác.

Các biến có thể được sử dụng lại không?

Tốt hơn là sử dụng lại các biến về mặt bộ nhớ . Nhưng hãy cẩn thận, bạn không cần giá trị trong một biến trước khi sử dụng lại nó. Ngoài ra, bạn không nên sử dụng luôn biến. Điều quan trọng là giữ cho mã sạch và dễ đọc.

Bạn có thể sử dụng lại tên biến trong các chức năng khác nhau không?

Do đó, trong trường hợp của bạn, các biến sẽ được chuyển từ trình điều khiển chính đến các chức năng riêng lẻ theo tham chiếu. Vì vậy, có, bạn có thể có các biến cùng tên trong các phạm vi khác nhau . Lưu câu trả lời này.

Tên biến nào là bất hợp pháp trong Python?

Quy tắc cho biến Python. Tên biến phải bắt đầu bằng một chữ cái hoặc ký tự gạch dưới. Tên biến không được bắt đầu bằng số . Tên biến chỉ có thể chứa các ký tự chữ và số và dấu gạch dưới [A-z, 0-9 và _ ]

Chủ Đề