Phá vỡ năng suất Python

Xác định giá trị trả về từ hàm tạo thông qua giao thức iterator. Nếu bị bỏ qua, thay vào đó,

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
0 được trả lại

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
1 Không bắt buộc

Truy xuất giá trị tùy chọn được truyền cho phương thức

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 của trình tạo để tiếp tục thực thi

Sự mô tả

Từ khóa

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 tạm dừng thực thi chức năng trình tạo và giá trị của biểu thức theo sau từ khóa
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 được trả về trình gọi của trình tạo. Nó có thể được coi là một phiên bản dựa trên trình tạo của từ khóa
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
1

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 chỉ có thể được gọi trực tiếp từ hàm tạo chứa nó. Nó không thể được gọi từ các hàm lồng nhau hoặc từ các cuộc gọi lại

Từ khóa

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 khiến lệnh gọi phương thức
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 của trình tạo trả về một đối tượng
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
5 có hai thuộc tính.
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
6 và
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
7. Thuộc tính
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
6 là kết quả của việc đánh giá biểu thức
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 và
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
7 là
const appleStore = countAppleSales(); // Generator { }
console.log(appleStore.next()); // { value: 3, done: false }
console.log(appleStore.next()); // { value: 7, done: false }
console.log(appleStore.next()); // { value: 5, done: false }
console.log(appleStore.next()); // { value: undefined, done: true }
1, cho biết hàm tạo chưa hoàn thành đầy đủ

Sau khi tạm dừng trên biểu thức

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3, quá trình thực thi mã của trình tạo vẫn bị tạm dừng cho đến khi phương thức
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 của trình tạo được gọi. Mỗi khi phương thức
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 của trình tạo được gọi, trình tạo sẽ tiếp tục thực thi và chạy cho đến khi đạt đến một trong những điều sau

  • Một
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    3, khiến trình tạo tạm dừng một lần nữa và trả về giá trị mới của trình tạo. Lần tiếp theo khi
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    2 được gọi, quá trình thực thi sẽ tiếp tục với câu lệnh ngay sau
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    3
  • const appleStore = countAppleSales(); // Generator { }
    console.log(appleStore.next()); // { value: 3, done: false }
    console.log(appleStore.next()); // { value: 7, done: false }
    console.log(appleStore.next()); // { value: 5, done: false }
    console.log(appleStore.next()); // { value: undefined, done: true }
    
    8 được sử dụng để ném một ngoại lệ từ trình tạo. Điều này tạm dừng hoàn toàn việc thực thi trình tạo và thực thi tiếp tục trong trình gọi (như thường xảy ra khi một ngoại lệ được ném)
  • Kết thúc chức năng của trình tạo đã đạt đến. Trong trường hợp này, việc thực thi bộ tạo kết thúc và một
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    5 được trả lại cho người gọi trong đó
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    6 là
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    0 và
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    7 là
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    13
  • Đã đạt được tuyên bố
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    1. Trong trường hợp này, việc thực thi trình tạo kết thúc và một
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    5 được trả về cho người gọi trong đó
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    6 là giá trị được chỉ định bởi câu lệnh
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    1 và
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    7 là
    function* countAppleSales() {
      const saleList = [3, 7, 5];
      for (let i = 0; i < saleList.length; i++) {
        yield saleList[i];
      }
    }
    
    13

Nếu một giá trị tùy chọn được chuyển đến phương thức

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 của trình tạo, thì giá trị đó sẽ trở thành giá trị được trả về bởi hoạt động
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 hiện tại của trình tạo

Giữa đường dẫn mã của trình tạo, các toán tử

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 của nó và khả năng chỉ định giá trị bắt đầu mới bằng cách chuyển nó tới
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
33, các trình tạo cung cấp sức mạnh và khả năng kiểm soát rất lớn

Cảnh báo. Thật không may,

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 là bất đối xứng, nhưng điều đó không thể tránh được. Nó luôn gửi một giá trị đến
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 hiện đang bị treo, nhưng trả về toán hạng của
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
3 sau

ví dụ

Sử dụng năng suất

Đoạn mã sau là phần khai báo của hàm tạo ví dụ

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}

Khi một hàm tạo được xác định, nó có thể được sử dụng bằng cách xây dựng một trình vòng lặp như được hiển thị

const appleStore = countAppleSales(); // Generator { }
console.log(appleStore.next()); // { value: 3, done: false }
console.log(appleStore.next()); // { value: 7, done: false }
console.log(appleStore.next()); // { value: 5, done: false }
console.log(appleStore.next()); // { value: undefined, done: true }

Bạn cũng có thể gửi một giá trị bằng

function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
37 vào trình tạo.
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
38 đánh giá là một giá trị trả về trong cú pháp này
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
39 — mặc dù giá trị được truyền cho phương thức
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 của trình tạo bị bỏ qua khi lần đầu tiên
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (let i = 0; i < saleList.length; i++) {
    yield saleList[i];
  }
}
2 được gọi

Năng suất có dừng cho vòng lặp Python không?

yield trong Python có thể được sử dụng giống như câu lệnh return trong một hàm. Khi làm như vậy, hàm thay vì trả về đầu ra, nó trả về một trình tạo có thể được lặp lại khi. Sau đó, bạn có thể lặp qua trình tạo để trích xuất các mục. Việc lặp lại được thực hiện bằng vòng lặp for hoặc đơn giản là sử dụng hàm next() .

Lợi nhuận Python có trả lại không?

Khi câu lệnh năng suất Python được nhấn, chương trình sẽ tạm dừng thực thi hàm và trả về giá trị năng suất cho người gọi . (Ngược lại, hàm return dừng hoàn toàn việc thực thi hàm. )

Có năng suất chấm dứt một chức năng?

Nếu một hàm có câu lệnh 'yield' thay vì câu lệnh 'return ', thì nó được gọi là hàm tạo hoặc trình tạo. 'câu lệnh lợi nhuận' sẽ không kết thúc hàm trong khi gọi hàm . Trong nhiều cuộc gọi, nó sẽ tạo đầu ra liên tiếp.

@yield dùng để làm gì?

từ khóa năng suất được sử dụng để tạo hàm tạo . Một loại chức năng hiệu quả về bộ nhớ và có thể được sử dụng như một đối tượng lặp. Theo thuật ngữ của giáo dân, từ khóa suất sẽ biến bất kỳ biểu thức nào được cung cấp cùng với nó thành một đối tượng trình tạo và trả lại cho người gọi.