Hướng dẫn advanced python programming second edition - phiên bản thứ hai lập trình python nâng cao

Nhập các ký tự bạn thấy bên dưới

Xin lỗi, chúng tôi chỉ cần đảm bảo rằng bạn không phải là một robot. Để có kết quả tốt nhất, vui lòng đảm bảo trình duyệt của bạn đang chấp nhận cookie.

Nhập các ký tự bạn nhìn thấy trong hình ảnh này:

Hướng dẫn advanced python programming second edition - phiên bản thứ hai lập trình python nâng cao

Hãy thử hình ảnh khác nhau

Điều kiện sử dụng Chính sách bảo mật Privacy Policy

© 1996-2014, Amazon.com, Inc. hoặc các chi nhánh của nó

Sau khi đánh giá tính chính xác và thời gian của thời gian thực hiện của chương trình, chúng tôi đã sẵn sàng xác định các phần của mã cần được điều chỉnh cho hiệu suất. Chúng tôi thường nhằm mục đích xác định các phần nhỏ so với quy mô của chương trình.

Hai mô -đun hồ sơ có sẵn thông qua Thư viện tiêu chuẩn Python, như đã nêu ở đây:

  • Mô -đun hồ sơ: Mô -đun này được viết bằng Python thuần túy và thêm chi phí đáng kể cho việc thực hiện chương trình. Sự hiện diện của nó trong thư viện tiêu chuẩn là do sự hỗ trợ nền tảng rộng lớn của nó và sự dễ dàng mà nó có thể được mở rộng.: This module is written in pure Python and adds significant overhead to the program execution. Its presence in the standard library is due to its vast platform support and the ease with which it can be extended.
  • Mô -đun CPROFILE: Đây là mô -đun định hình chính, với giao diện tương đương với ____10. Nó được viết bằng C, có một chi phí nhỏ, và phù hợp như một con hồ sơ đa năng.: This is the main profiling module, with an interface equivalent to
    $ python -m cProfile -s tottime simul.py
    0. It is written in C, has a small overhead, and is suitable as a general-purpose profiler.

Mô -đun

$ python -m cProfile -s tottime simul.py
1 có thể được sử dụng theo ba cách khác nhau, như sau:

  • Từ dòng lệnh
  • Như một mô -đun Python
  • Với ipython

$ python -m cProfile -s tottime simul.py
1 không yêu cầu bất kỳ thay đổi nào trong mã nguồn và có thể được thực thi trực tiếp trên tập lệnh hoặc hàm Python hiện có. Bạn có thể sử dụng
$ python -m cProfile -s tottime simul.py
1 từ dòng lệnh theo cách này:

$ python -m cProfile simul.py

Điều này sẽ in một đầu ra dài chứa một số số liệu định hình của tất cả các chức năng được gọi trong ứng dụng. Bạn có thể sử dụng tùy chọn

$ python -m cProfile -s tottime simul.py
4 để sắp xếp đầu ra theo một số liệu cụ thể. Trong đoạn trích sau đây, đầu ra được sắp xếp theo số liệu
$ python -m cProfile -s tottime simul.py
5, sẽ được mô tả ở đây:

$ python -m cProfile -s tottime simul.py

Dữ liệu được tạo bởi

$ python -m cProfile -s tottime simul.py
1 có thể được lưu trong một tệp đầu ra bằng cách truyền tùy chọn
$ python -m cProfile -s tottime simul.py
7. Định dạng mà
$ python -m cProfile -s tottime simul.py
1 sử dụng có thể đọc được bởi mô -đun
$ python -m cProfile -s tottime simul.py
9 và các công cụ khác. Việc sử dụng tùy chọn ____17 được hiển thị ở đây:

$ python -m cProfile -o prof.out simul.py

Việc sử dụng

$ python -m cProfile -s tottime simul.py
1 như một mô -đun Python yêu cầu gọi hàm
$ python -m cProfile -o prof.out simul.py
2 theo cách sau:

    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")

Bạn cũng có thể bọc một phần mã giữa các cuộc gọi phương thức của đối tượng

$ python -m cProfile -o prof.out simul.py
3, như được hiển thị ở đây:

    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()

$ python -m cProfile -s tottime simul.py
1 cũng có thể được sử dụng tương tác với ipython. Lệnh
$ python -m cProfile -o prof.out simul.py
5 Magic cho phép bạn lập cấu hình một cuộc gọi chức năng riêng lẻ, như được minh họa trong ảnh chụp màn hình sau:

Hướng dẫn advanced python programming second edition - phiên bản thứ hai lập trình python nâng cao

Hình 1.5 - Sử dụng CPROFILE trong Ipython

Đầu ra

$ python -m cProfile -s tottime simul.py
1 được chia thành năm cột, như sau:

  • $ python -m cProfile -o prof.out simul.py
    7: Số lần hàm được gọi.
  • $ python -m cProfile -s tottime simul.py
    5: Tổng thời gian dành cho chức năng mà không tính đến các cuộc gọi đến các chức năng khác.
  • $ python -m cProfile -o prof.out simul.py
    9: Thời gian dành cho chức năng bao gồm các cuộc gọi chức năng khác.
  •     from simul import benchmark
        import cProfile
        cProfile.run("benchmark()")
    0: Thời gian dành cho một cuộc gọi duy nhất của chức năng.
  •     from simul import benchmark
        import cProfile
        cProfile.run("benchmark()")
    1: Tên tệp và số dòng tương ứng. Thông tin này không có sẵn khi gọi các mô -đun mở rộng C.

Số liệu quan trọng nhất là

$ python -m cProfile -s tottime simul.py
5, thời gian thực tế dành cho cơ thể chức năng không bao gồm các phân nhóm, cho chúng ta biết chính xác nơi nút cổ chai.

Không có gì đáng ngạc nhiên, phần thời gian lớn nhất được dành cho hàm

    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
3. Chúng ta có thể tưởng tượng rằng vòng lặp là phần của mã cần điều chỉnh hiệu suất.
$ python -m cProfile -s tottime simul.py
1 chỉ cung cấp thông tin ở cấp độ chức năng và không cho chúng tôi biết câu nói cụ thể nào chịu trách nhiệm cho nút cổ chai. May mắn thay, như chúng ta sẽ thấy trong phần tiếp theo, công cụ
    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
5 có khả năng cung cấp thông tin theo từng dòng về thời gian dành cho chức năng.

Phân tích đầu ra văn bản

$ python -m cProfile -s tottime simul.py
1 có thể gây khó khăn cho các chương trình lớn với rất nhiều cuộc gọi và phụ. Một số công cụ trực quan hỗ trợ nhiệm vụ bằng cách cải thiện điều hướng với giao diện đồ họa tương tác.

Phân tích đồ họa kết quả hồ sơ

Kcachegrind là giao diện người dùng đồ họa (GUI) hữu ích để phân tích đầu ra hồ sơ phát ra bởi

$ python -m cProfile -s tottime simul.py
1.graphical user interface (GUI) useful for analyzing the profiling output emitted by
$ python -m cProfile -s tottime simul.py
1.

Kcachegrind có sẵn trong các kho lưu trữ chính thức của Ubuntu 16.04. Cổng Qt, QCachegrind, có thể được tải xuống cho Windows từ http://sourceforge.net/projects/qcachegrindwin/. Người dùng Mac có thể biên dịch QCachegrind bằng MacPorts (http://www.macports.org/) bằng cách làm theo các hướng dẫn có trong bài đăng trên blog tại http://blogs.perl.org/users/rurban/2013/04/install-kachegrind -on-macosx-with-ports.html.

Kcachegrind không thể đọc trực tiếp các tệp đầu ra được tạo bởi

$ python -m cProfile -s tottime simul.py
1. May mắn thay, mô-đun Python của bên thứ ba ____39 có thể chuyển đổi tệp đầu ra
$ python -m cProfile -s tottime simul.py
1 thành định dạng có thể đọc được bởi Kcachegrind.

Bạn có thể cài đặt

    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
9 từ Chỉ mục Gói Python (PYPI) bằng lệnh
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
2.Python Package Index (PyPI) using the
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
2 command.

Để hiển thị tốt nhất các tính năng của Kcachegrind, chúng tôi sẽ sử dụng một ví dụ khác với cấu trúc đa dạng hơn. Chúng tôi xác định hàm đệ quy,

    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 và hai hàm khác sử dụng
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3, được đặt tên là
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 và
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
6. Chúng đại diện cho các hệ số đa thức của các xấp xỉ Taylor là
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
7 và
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
8 và được minh họa trong đoạn mã sau:

    def factorial(n): 
        if n == 0: 
            return 1.0 
        else: 
            return n * factorial(n-1) 
    def taylor_exp(n): 
        return [1.0/factorial(i) for i in range(n)] 
    def taylor_sin(n): 
        res = [] 
        for i in range(n): 
            if i % 2 == 1: 
               res.append((-1)**((i-1)/2)/
                   float(factorial(i))) 
            else: 
               res.append(0.0) 
        return res 
    def benchmark(): 
        taylor_exp(500) 
        taylor_sin(500) 
    if __name__ == '__main__': 
        benchmark()

Để truy cập thông tin hồ sơ, trước tiên chúng ta cần tạo tệp đầu ra

$ python -m cProfile -s tottime simul.py
1, như sau:

$ python -m cProfile -o prof.out taylor.py

Sau đó, chúng ta có thể chuyển đổi tệp đầu ra bằng

    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
9 và khởi chạy KCachegrind bằng cách chạy mã sau:

$ pyprof2calltree -i prof.out -o prof.calltree
$ kcachegrind prof.calltree # or qcachegrind prof.calltree

Đầu ra được hiển thị trong ảnh chụp màn hình sau:

Hướng dẫn advanced python programming second edition - phiên bản thứ hai lập trình python nâng cao

Hình 1.6 - Đầu ra hồ sơ được tạo bởi PYPROF2CALLTREE và được Kcachegrind hiển thị

Ảnh chụp màn hình cho thấy giao diện người dùng kcachegrind. Ở bên trái, chúng tôi có đầu ra khá giống với

$ python -m cProfile -s tottime simul.py
1. Các tên cột thực tế hơi khác nhau: bao gồm. Dịch sang giá trị
$ python -m cProfile -o prof.out simul.py
9 của mô -đun
$ python -m cProfile -s tottime simul.py
1 và tự chuyển thành
$ python -m cProfile -s tottime simul.py
5. Các giá trị được đưa ra theo tỷ lệ phần trăm bằng cách nhấp vào nút tương đối trên thanh menu. Bằng cách nhấp vào các tiêu đề cột, bạn có thể sắp xếp chúng theo thuộc tính tương ứng.Incl. translates to the
$ python -m cProfile -s tottime simul.py
1 module's
$ python -m cProfile -o prof.out simul.py
9 value and Self translates to
$ python -m cProfile -s tottime simul.py
5. The values are given in percentages by clicking on the Relative button on the menu bar. By clicking on the column headers, you can sort them by the corresponding property.

Ở phía trên bên phải, một cú nhấp chuột trên tab Bản đồ Callee sẽ hiển thị sơ đồ chi phí chức năng. Trong sơ đồ được hiển thị trong Hình 1.6, tỷ lệ phần trăm thời gian dành cho hàm tỷ lệ thuận với diện tích của hình chữ nhật. Hình chữ nhật có thể chứa các solca phụ đại diện cho các phụ cho các chức năng khác. Trong trường hợp này, chúng ta có thể dễ dàng thấy rằng có hai hình chữ nhật cho hàm

    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3. Cái bên trái tương ứng với các cuộc gọi được thực hiện bởi
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 và cái bên phải các cuộc gọi được thực hiện bởi
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
6.Callee Map tab will display a diagram of the function costs. In the diagram shown in Figure 1.6, the time percentage spent by the function is proportional to the area of the rectangle. Rectangles can contain sub-rectangles that represent subcalls to other functions. In this case, we can easily see that there are two rectangles for the
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 function. The one on the left corresponds to the calls made by
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 and the one on the right to the calls made by
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
6.

Ở phía dưới bên phải, bạn có thể hiển thị một sơ đồ khác, biểu đồ cuộc gọi, bằng cách nhấp vào tab biểu đồ cuộc gọi. Biểu đồ cuộc gọi là một biểu diễn đồ họa của mối quan hệ cuộc gọi giữa các hàm; Mỗi hình vuông đại diện cho một hàm và các mũi tên ngụ ý mối quan hệ gọi. Ví dụ:

    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 gọi
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 500 lần và
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
6 gọi
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 250 lần. Kcachegrind cũng phát hiện các cuộc gọi đệ quy:
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 cuộc gọi 187250 lần.call graph, by clicking on the Call Graph tab. A call graph is a graphical representation of the calling relationship between the functions; each square represents a function and the arrows imply a calling relationship. For example,
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 calls
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 500 times, and
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
6 calls
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 250 times. KCachegrind also detects recursive calls:
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
3 calls itself 187250 times.

Bạn có thể điều hướng đến biểu đồ cuộc gọi hoặc tab Bản đồ Callee bằng cách nhấp đúp vào các hình chữ nhật; Giao diện sẽ cập nhật phù hợp, cho thấy các thuộc tính thời gian có liên quan đến hàm đã chọn. Ví dụ, nhấp đúp vào trên

    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 sẽ khiến biểu đồ thay đổi, chỉ hiển thị sự đóng góp của
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 vào tổng chi phí.Call Graph or the Callee Map tab by double-clicking on the rectangles; the interface will update accordingly, showing that the timing properties are relative to the selected function. For example, double-clicking on
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 will cause the graph to change, showing only the contribution of
    from simul import benchmark
    import cProfile
    pr = cProfile.Profile()
    pr.enable()
    benchmark()
    pr.disable()
    pr.print_stats()
5 to the total cost.

GPROF2DOT (https://github.com/jrfonseca/gprof2dot) là một công cụ phổ biến khác được sử dụng để tạo ra biểu đồ cuộc gọi. Bắt đầu từ các tệp đầu ra được tạo bởi một trong các trình biên dịch được hỗ trợ, nó sẽ tạo sơ đồ

$ python -m cProfile -o prof.out taylor.py
5 đại diện cho biểu đồ cuộc gọi. (https://github.com/jrfonseca/gprof2dot) is another popular tool used to produce call graphs. Starting from output files produced by one of the supported profilers, it will generate a
$ python -m cProfile -o prof.out taylor.py
5 diagram representing a call graph.

Dòng hồ sơ theo dòng với line_profiler

Bây giờ chúng ta đã biết chúng ta phải tối ưu hóa chức năng nào, chúng ta có thể sử dụng mô-đun

    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
5 cung cấp thông tin về cách dành thời gian theo từng loại từng dòng. Điều này rất hữu ích trong các tình huống khó xác định câu nói nào tốn kém. Mô-đun
    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
5 là mô-đun của bên thứ ba có sẵn trên PYPI và có thể được cài đặt bằng cách làm theo các hướng dẫn tại https://github.com/rkern/line_profiler.

Để sử dụng

    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
5, chúng ta cần áp dụng một bộ trang trí
$ python -m cProfile -o prof.out taylor.py
9 cho các chức năng mà chúng ta dự định theo dõi. Lưu ý rằng bạn không phải nhập chức năng
$ python -m cProfile -s tottime simul.py
0 từ một mô -đun khác khi nó được đưa vào không gian tên toàn cầu khi chạy tập lệnh định hình
$ pyprof2calltree -i prof.out -o prof.calltree
$ kcachegrind prof.calltree # or qcachegrind prof.calltree
1. Để tạo ra đầu ra hồ sơ cho chương trình của chúng tôi, chúng tôi cần thêm trình trang trí
$ python -m cProfile -o prof.out taylor.py
9 vào hàm
    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
3, như sau:

    @profile 
    def evolve(self, dt): 
        # code

Tập lệnh

$ pyprof2calltree -i prof.out -o prof.calltree
$ kcachegrind prof.calltree # or qcachegrind prof.calltree
1 sẽ tạo ra một tệp đầu ra và in kết quả của hồ sơ trên đầu ra tiêu chuẩn. Chúng ta nên chạy tập lệnh với hai tùy chọn, như sau:

  • $ pyprof2calltree -i prof.out -o prof.calltree
    $ kcachegrind prof.calltree # or qcachegrind prof.calltree
    5 để sử dụng chức năng
        from simul import benchmark
        import cProfile
        cProfile.run("benchmark()")
    5
  • $ pyprof2calltree -i prof.out -o prof.calltree
    $ kcachegrind prof.calltree # or qcachegrind prof.calltree
    7 để in ngay kết quả trên màn hình

Việc sử dụng

$ pyprof2calltree -i prof.out -o prof.calltree
$ kcachegrind prof.calltree # or qcachegrind prof.calltree
1 được minh họa trong dòng mã sau:

$ kernprof.py -l -v simul.py

Cũng có thể chạy trình hồ sơ trong vỏ ipython để chỉnh sửa tương tác. Trước tiên, bạn nên tải tiện ích mở rộng

    from simul import benchmark
    import cProfile
    cProfile.run("benchmark()")
5 sẽ cung cấp lệnh ma thuật
    @profile 
    def evolve(self, dt): 
        # code
0. Sử dụng lệnh đó, bạn có thể tránh thêm trình trang trí
$ python -m cProfile -o prof.out taylor.py
9, như được minh họa trong ảnh chụp màn hình sau:

Hướng dẫn advanced python programming second edition - phiên bản thứ hai lập trình python nâng cao

Hình 1.7 - Sử dụng line_profiler trong ipython

Đầu ra khá trực quan và được chia thành sáu cột, như sau:

  •     @profile 
        def evolve(self, dt): 
            # code
    2: Số lượng dòng được chạy
  •     @profile 
        def evolve(self, dt): 
            # code
    3: Số lần dòng đó được chạy
  •     @profile 
        def evolve(self, dt): 
            # code
    4: Thời gian thực hiện của dòng tính bằng micro giây (
        @profile 
        def evolve(self, dt): 
            # code
    4)
  •     @profile 
        def evolve(self, dt): 
            # code
    6: Thời gian/lượt truy cập
  •     @profile 
        def evolve(self, dt): 
            # code
    7: Tỷ lệ tổng thời gian thực hiện dòng đó
  •     @profile 
        def evolve(self, dt): 
            # code
    8: Nội dung của dòng

Bằng cách nhìn vào cột % thời gian, chúng ta có thể có một ý tưởng khá tốt về thời gian dành thời gian. Trong trường hợp này, có một vài tuyên bố trong thân vòng

    @profile 
    def evolve(self, dt): 
        # code
9 với chi phí khoảng 10-20 phần trăm mỗi cái.% Time column, we can get a pretty good idea of where the time is spent. In this case, there are a few statements in the
    @profile 
    def evolve(self, dt): 
        # code
9 loop body with a cost of around 10-20 percent each.

Cuốn sách nào là tốt nhất cho Python Advanced?

Những cuốn sách Python tốt nhất..
Khóa học về sự cố Python ..
Python đầu tiên, Phiên bản thứ 2 ..
Phát minh ra các trò chơi máy tính của riêng bạn với Python, phiên bản thứ 4 ..
Nghĩ Python: Làm thế nào để nghĩ như một nhà khoa học máy tính, Phiên bản thứ 2 ..
Tính toán hiệu quả trong vật lý: Hướng dẫn thực địa để nghiên cứu với Python ..
Tìm hiểu Python 3 một cách khó khăn ..
Khóa học Python thực sự, Phần 1 ..

Python nâng cao có dễ dàng không?

Học Python rất dễ so với các ngôn ngữ lập trình cấp cao, hướng đối tượng khác như Java hoặc C ++ nhưng nó có một vài khái niệm nâng cao có ích khi phát triển mã mạnh mẽ, sắc nét, tối ưu hóa cao, hiệu quả và hiệu quả vàbình thường hóa.but it has a few advanced concepts that come in handy when developing code that is robust, crisp, highly optimized, efficient, and normalized.

Có đủ 2 tháng cho Python không?

Nhìn chung, phải mất khoảng hai đến sáu tháng để tìm hiểu các nguyên tắc cơ bản của Python.Nhưng bạn có thể học đủ để viết chương trình ngắn đầu tiên của mình trong vài phút.Phát triển việc làm chủ các thư viện khổng lồ của Python có thể mất nhiều tháng hoặc nhiều năm.it takes around two to six months to learn the fundamentals of Python. But you can learn enough to write your first short program in a matter of minutes. Developing mastery of Python's vast array of libraries can take months or years.

2 năm có đủ để học Python không?

Nếu bạn chỉ muốn tìm hiểu những điều cơ bản của Python, nó chỉ có thể mất vài tuần.Tuy nhiên, nếu bạn đang theo đuổi sự nghiệp khoa học dữ liệu ngay từ đầu, bạn có thể hy vọng sẽ mất bốn đến mười hai tháng để tìm hiểu đủ Python tiên tiến để sẵn sàng cho công việc.if you're pursuing a data science career from the beginning, you can expect it to take four to twelve months to learn enough advanced Python to be job-ready.