Weird `inspect.getsource` behavior with generators
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Bug report
Bug description:
If you return two generators (one from a generator function and one a generator expression) from a function and use getsource on each, you get the code for the generator function for both.
def get_2_generators():
def my_generator_1():
for x in range(5):
yield x*2
my_generator_2 = (x*3 for x in range(6))
return my_generator_1(), my_generator_2
g1, g2 = get_2_generators()
getsource(g1.gi_code)
>>>' def my_generator_1():\n for x in range(5):\n yield x*2 \n'
getsource(g2.gi_code)
>>>' def my_generator_1():\n for x in range(5):\n yield x*2 \n'
Further, presumably not a bug but a current limitation, in general using getsource on generator-expression objects returns the code of the function they were created in, rather than the code of the generator expression itself, which can make things confusing when there are multiple such expressions, e.g.:
def get_2_generators():
my_generator_1 = (x*2 for x in range(5))
my_generator_2 = (x*3 for x in range(6))
return my_generator_1, my_generator_2
g1, g2 = get_2_generators()
getsource(g1.gi_code)
>>>'def get_2_generators():\n my_generator_1 = (x*2 for x in range(5)) \n my_generator_2 = (x*3 for x in range(6))\n return my_generator_1, my_generator_2\n'
getsource(g2.gi_code)
>>>'def get_2_generators():\n my_generator_1 = (x*2 for x in range(5)) \n my_generator_2 = (x*3 for x in range(6))\n return my_generator_1, my_generator_2\n'
Can we fix both of the above by making getsource return the code of the generator expression itself?
CPython versions tested on:
3.12
Operating systems tested on:
Windows
Linked PRs
- gh-121933
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với inspect.getsource và các ví dụ generator gi_code trong báo cáo, sau đó xem lại PR được liên kết gh-121933 để nắm hướng triển khai hiện tại. So sánh các trường hợp hàm generator và biểu thức generator, đồng thời xác minh rằng phần công việc đã hoàn tất phân biệt nhiều generator thay vì trả về mã nguồn bao quanh không liên quan.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- developer-experience
- Loại issue
- Lỗi
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 25/100