Hoàn toàn có thể (đối với ví dụ bạn đã cung cấp).
Tuples là công dân hạng nhất trong Python
Có một chức năng nội trang divmod()
thực hiện chính xác điều đó.
q, r = divmod(x, y)
Có nhiều ví dụ khác: zip
, enumerate
, dict.items
.
for i, e in enumerate([1, 3, 3]):
print "index=%d, element=%s" % (i, e)
d = dict((v, k) for k, v in adict.items())
d = dict(zip(adict.values(), adict.keys()))
BTW, dấu ngoặc đơn không cần thiết trong hầu hết thời gian. Trích dẫn từ Tham khảo Thư viện Python :
Tuples có thể được xây dựng theo một số cách:
- Sử dụng một cặp dấu ngoặc đơn để biểu thị bộ giá trị trống: ()
- Sử dụng dấu phẩy ở cuối cho một tuple đơn lẻ: a, hoặc (a,)
- Ngăn cách các mục bằng dấu phẩy: a, b, c hoặc (a, b, c)
- Sử dụng tuple () tích hợp sẵn: tuple () hoặc tuple (có thể lặp lại)
Các chức năng phải phục vụ một mục đích duy nhất
Do đó, họ sẽ trả về một đối tượng duy nhất. Trong trường hợp của bạn, đối tượng này là một bộ giá trị. Coi tuple là một cấu trúc dữ liệu phức hợp đặc biệt. Có những ngôn ngữ mà hầu hết mọi hàm đều trả về nhiều giá trị (danh sách trong Lisp).
Đôi khi nó là đủ để trả lại (x, y)
thay vì Point(x, y)
.
Các bộ giá trị được đặt tên
Với sự ra đời của các bộ giá trị được đặt tên trong Python 2.6, trong nhiều trường hợp, việc trả về các bộ giá trị được đặt tên thay vì các bộ giá trị đơn giản là tốt hơn.
>>> import collections
>>> Point = collections.namedtuple('Point', 'x y')
>>> x, y = Point(0, 1)
>>> p = Point(x, y)
>>> x, y, p
(0, 1, Point(x=0, y=1))
>>> p.x, p.y, p[0], p[1]
(0, 1, 0, 1)
>>> for i in p:
... print(i)
...
0
1