2015-06-02 14 views
36

Tôi tự hỏi những gì ,= hoặc , = có nghĩa là trong python?Điều gì, = trung bình trong python?

Ví dụ từ matplotlib:

plot1, = ax01.plot(t,yp1,'b-') 
+0

@ArnabDatta Không ya 'không thể; đó sẽ là một 2-tuple. Bạn có thể viết '(plot1,) = ...' hoặc '[plot1] = ...', mặc dù. – Veedrac

Trả lời

43

Đó là một hình thức tuple giải nén. Với ngoặc:

(plot1,) = ax01.plot(t,yp1,'b-') 

ax01.plot() trả về một tuple chứa một phần tử, và yếu tố này được gán cho plot1. Nếu không có dấu phẩy đó (và có thể cả dấu ngoặc đơn), thì plot1 sẽ được gán toàn bộ tuple. Hãy quan sát sự khác biệt giữa ab trong ví dụ sau:

>>> def foo(): 
...  return (1,) 
... 
>>> (a,) = foo() 
>>> b = foo() 
>>> a 
1 
>>> b 
(1,) 

Bạn có thể bỏ qua các dấu ngoặc đơn ở cả (a,)(1,), tôi để lại cho họ vì lợi ích của sự rõ ràng.

+0

Điều này có vẻ là phiên bản cụ thể. Để chính xác, bạn có thể đề cập đến điều đó là không thể, ví dụ: trong Python 2.7 ("ValueError: quá nhiều giá trị để giải nén"). Ngoài ra: tại sao tôi không thể 'x ,,, = (1,2,3,4)'? –

+3

@ThomasWeller 1) ví dụ ở trên hoạt động trong Python 2.7, lỗi đó có nghĩa là bộ dữ liệu bạn đang cố gắng giải nén lớn hơn số biến được cung cấp trong các lh. 2) bạn không thể vì nó không phải là cú pháp hợp lệ. Nếu bạn chỉ muốn giữ nguyên tố đầu tiên, thì hãy làm 'x, _, _, _ = (1,2,3,4)', trong đó '_' là một tên biến thông thường, thường được sử dụng để báo hiệu một _" don 't quan tâm về giá trị này "_. Dù sao, tôi đoán 'x = foo [0]' là rõ ràng hơn trong trường hợp này. –

+1

@StefanoSanfilippo trong python 3 bạn có thể thực hiện ['x, * _ = (1,2,3,4)'] (https: //asmeurer.github.io/python3-presentation/slides.html # 8) – Pureferret

2

Thêm , sau khi biến đặt trong một bộ tuple với một phần tử duy nhất. Tuple này sau đó được gán một giá trị (với toán tử =) được trả về từ ax01.plot(t,yp1,'b-').

17

Python cho phép bạn đặt các bộ dữ liệu ở phía bên tay trái của bài tập. Mã trong câu hỏi là một ví dụ về điều này, nó có thể trông giống như nó là một trường hợp đặc biệt của một nhà điều hành nhưng nó thực sự chỉ là một nhiệm vụ tuple trường hợp xảy ra ở đây. Một số ví dụ có thể giúp:

a, b = (1, 2) 

cung cấp cho bạn a = 1b = 2.

Giờ đây, khái niệm về một yếu tố cũng là một phần.

x = (3,) 

mang đến cho bạn x = (3,) mà là một tuple với một yếu tố, cú pháp có vẻ hơi lạ nhưng Python cần phải phân biệt từ ngoặc đơn giản vì vậy nó có dấu phẩy trailing cho điều này (Ví dụ z=(4) làm z là giá trị số nguyên 4, không phải một tuple). Nếu bạn muốn đến nay trích yếu tố đó thì bạn sẽ muốn sử dụng một cái gì đó như bạn có trong câu hỏi:

y, = x 

tại y là 3. Lưu ý rằng đây là nhiệm vụ chỉ tuple đây, cú pháp chỉ xuất hiện một chút lạ bởi vì nó là một tuple chiều dài một.

Xem tập lệnh này để biết ví dụ: http://ideone.com/qroNcx

Các vấn đề liên quan