lập trình mới đôi khi viết mã như thế này:
my_calculator.button_0 = tkinter.Button(root, text=0)
my_calculator.button_1 = tkinter.Button(root, text=1)
my_calculator.button_2 = tkinter.Button(root, text=2)
...
Các coder sau đó trái với một đống biến được đặt tên, với một nỗ lực mã hóa của O (m * n), trong đó m là số biến được đặt tên và n là số lần Đó là nhóm các biến cần được truy cập (bao gồm cả việc tạo). Người mới bắt đầu quan sát hơn rằng sự khác biệt duy nhất trong mỗi dòng là một số thay đổi dựa trên quy tắc và quyết định sử dụng vòng lặp. Tuy nhiên, họ gặp khó khăn về cách tự động tạo các tên biến đó và có thể thử một cái gì đó như thế này:
for i in range(10):
my_calculator.('button_%d' % i) = tkinter.Button(root, text=i)
Họ sớm nhận thấy điều này không hiệu quả.
Nếu chương trình yêu cầu biến tùy ý "tên", từ điển là lựa chọn tốt nhất, như được giải thích trong các câu trả lời khác. Tuy nhiên, nếu bạn chỉ đơn giản là cố gắng để tạo ra nhiều biến và bạn không nhớ đề cập đến chúng với một chuỗi các số nguyên, có thể bạn đang tìm kiếm một list
. Điều này đặc biệt đúng nếu dữ liệu của bạn đồng nhất, chẳng hạn như chỉ số nhiệt độ hàng ngày, điểm số bài kiểm tra hàng tuần hoặc một mạng lưới các tiện ích đồ họa.
Điều này có thể được lắp ráp như sau:
my_calculator.buttons = []
for i in range(10):
my_calculator.buttons.append(tkinter.Button(root, text=i))
list
này cũng có thể được tạo ra trong một dòng với một sự hiểu biết:
my_calculator.buttons = [tkinter.Button(root, text=i) for i in range(10)]
Kết quả trong cả hai trường hợp là một dân list
, với phần tử đầu tiên được truy cập với my_calculator.buttons[0]
, tiếp theo với my_calculator.buttons[1]
, v.v. Tên biến "cơ sở" trở thành tên của list
và số nhận dạng khác nhau được sử dụng để truy cập nó.
Cuối cùng, đừng quên các cấu trúc dữ liệu khác, chẳng hạn như set
- điều này tương tự như từ điển, ngoại trừ mỗi "tên" không có giá trị gắn liền với nó. Nếu bạn chỉ cần một "túi" của các đối tượng, điều này có thể là một lựa chọn tuyệt vời. Thay vì một cái gì đó như thế này:
keyword_1 = 'apple'
keyword_2 = 'banana'
if query == keyword_1 or query == keyword_2:
print('Match.')
Bạn sẽ có điều này:
keywords = {'apple', 'banana'}
if query in keywords:
print('Match.')
Sử dụng một list
cho một chuỗi các đối tượng tương tự, một set
cho một túi tùy tiện theo lệnh của các đối tượng, hoặc một dict
cho một túi tên có giá trị liên quan.
đó là khía cạnh bảo dưỡng và sửa lỗi gây ra sự khủng khiếp. Hãy tưởng tượng cố gắng tìm ra nơi biến 'foo' thay đổi khi không có chỗ nào trong mã của bạn, nơi bạn thực sự thay đổi 'foo'. Hãy tưởng tượng thêm rằng đó là mã của người khác mà bạn phải duy trì ... OK, bạn có thể đi đến nơi hạnh phúc của bạn ngay bây giờ. –
Sự cần thiết vẫn còn phát sinh, mặc dù. Tôi từng nghĩ rằng tôi cần phải làm điều này mọi lúc trước khi tôi gặp những ngôn ngữ lập trình thực sự. Những gợi ý tuyệt vời ở đây để chuyển sang tư duy lành mạnh hơn. –
Bạn có thể thực hiện việc này trong trường hợp macro chậm. Đôi khi bạn phải, bởi vì kiểu dữ liệu duy nhất trong các macro SAS là chuỗi: -/ –