Nếu được gọi mà không có tùy chọn nào, nó sẽ thực thi tất cả các tệp được liệt kê theo trình tự và đưa bạn vào trình thông dịch trong khi vẫn thừa nhận bất kỳ tùy chọn nào bạn có thể đã đặt trong ipython_config của mình. py. Hành vi này khác với Python tiêu chuẩn, khi được gọi là python -i sẽ chỉ thực thi một tệp và bỏ qua thiết lập cấu hình của bạn
Xin lưu ý rằng một số tùy chọn cấu hình không có sẵn ở dòng lệnh, đơn giản vì chúng không thực tế ở đây. Xem các tệp cấu hình của bạn để biết chi tiết về những. Có các tệp cấu hình riêng cho từng cấu hình và các tệp trông giống như
In [8]: %cd /home/fperez5 hoặc
In [8]: %cd /home/fperez6. Thư mục hồ sơ trông giống như
In [8]: %cd /home/fperez7 và thường được cài đặt trong thư mục, mặc định là
In [8]: %cd /home/fperez9. Đối với người dùng Windows,
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop0 phân giải thành
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop1 trong hầu hết các trường hợp
Tùy chọn dòng lệnh
Để xem các tùy chọn mà IPython chấp nhận, hãy sử dụng
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop2 [và có lẽ bạn nên chạy đầu ra thông qua một máy nhắn tin chẳng hạn như
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop3 để đọc thuận tiện hơn]. Điều này hiển thị tất cả các tùy chọn có bí danh một từ để kiểm soát chúng, nhưng IPython cho phép bạn định cấu hình tất cả các đối tượng của nó từ dòng lệnh bằng cách chuyển tên lớp đầy đủ và giá trị tương ứng; . Ví dụ
ipython --matplotlib qt
tương đương với
In [8]: %cd /home/fperez0
Lưu ý rằng ở dạng thứ hai, bạn phải sử dụng dấu bằng, vì biểu thức được đánh giá là một phép gán Python thực tế. Mặc dù trong ví dụ trên, biểu mẫu ngắn thuận tiện hơn, nhưng chỉ các tùy chọn phổ biến nhất mới có biểu mẫu ngắn, trong khi bất kỳ biến cấu hình nào trong IPython đều có thể được đặt ở dòng lệnh bằng cách sử dụng biểu mẫu dài. Biểu mẫu dài này là cùng một cú pháp được sử dụng trong các tệp cấu hình, nếu bạn muốn đặt các tùy chọn này vĩnh viễn
sử dụng tương tác
IPython có nghĩa là hoạt động như một sự thay thế thả xuống cho trình thông dịch tương tác tiêu chuẩn. Như vậy, bất kỳ mã nào hợp lệ python sẽ thực thi bình thường theo IPython [trường hợp điều này không đúng sẽ được báo cáo là lỗi]. Tuy nhiên, nó cung cấp nhiều tính năng không có sẵn trong dấu nhắc python tiêu chuẩn. Những gì sau đây là một danh sách của những
Thận trọng cho người dùng Windows
Thật không may, Windows sử dụng ký tự '\' làm dấu phân cách đường dẫn. Đây là một lựa chọn tồi tệ, bởi vì '\' cũng đại diện cho ký tự thoát trong hầu hết các ngôn ngữ lập trình hiện đại, bao gồm cả Python. Vì lý do này, nên sử dụng ký tự ‘/’ nếu bạn gặp sự cố với
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop5. Tuy nhiên, trong lệnh Windows tùy chọn cờ '/' nên bạn không thể sử dụng nó cho thư mục gốc. Điều này có nghĩa là các đường dẫn bắt đầu từ thư mục gốc phải được nhập theo cách giả tạo như.
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop6
Hệ thống lệnh ma thuật
IPython sẽ coi bất kỳ dòng nào có ký tự đầu tiên là % là lệnh gọi đặc biệt đến hàm 'ma thuật'. Những thứ này cho phép bạn kiểm soát hành vi của chính IPython, cộng với rất nhiều tính năng kiểu hệ thống. Tất cả chúng đều có tiền tố là ký tự %, nhưng các tham số được cung cấp không có dấu ngoặc đơn hoặc dấu ngoặc kép
Các dòng bắt đầu bằng
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop7 báo hiệu một phép thuật tế bào. chúng lấy làm đối số không chỉ phần còn lại của dòng hiện tại, mà cả tất cả các dòng bên dưới chúng, trong khối thực thi hiện tại. Trên thực tế, các phép thuật tế bào có thể thực hiện các sửa đổi tùy ý đối với đầu vào mà chúng nhận được, thậm chí không cần phải là mã Python hợp lệ. Họ nhận toàn bộ khối dưới dạng một chuỗi
Như một ví dụ về phép thuật dòng, phép thuật hoạt động giống như lệnh OS cùng tên
In [8]: %cd /home/fperez
Phần sau đây sử dụng nội trang trong chế độ ô
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop
Trong trường hợp này,
In [8]: %cd /home/fperez60 được gọi là đối số dòng và khối có
In [8]: %cd /home/fperez61 và
In [8]: %cd /home/fperez62 được gọi là thân ô. Phép thuật nhận được cả hai
Nếu bạn đã bật 'ma thuật tự động' [theo mặc định], bạn không cần phải nhập rõ ràng
In [8]: %cd /home/fperez64 đơn lẻ cho các phép thuật dòng; . Khi bật chế độ tự động, bạn có thể chỉ cần nhập
In [8]: %cd /home/fperez65 để chuyển đến thư mục 'mydir'
In [8]: %cd /home/fperez6
Phép thuật di động luôn yêu cầu tiền tố
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop7 rõ ràng, gọi phép thuật tự động chỉ hoạt động đối với phép thuật dòng
Hệ thống ma thuật tự động có quyền ưu tiên thấp nhất có thể trong các tìm kiếm tên, vì vậy bạn có thể tự do sử dụng các biến có cùng tên với các lệnh ma thuật. Nếu một lệnh ma thuật bị 'che khuất' bởi một biến, bạn sẽ cần tiền tố
In [8]: %cd /home/fperez64 rõ ràng để sử dụng nó
In [8]: %cd /home/fperez4
Phép thuật dòng, nếu chúng trả về một giá trị, có thể được gán cho một biến bằng cú pháp
In [8]: %cd /home/fperez68 [trong trường hợp cụ thể này trả về kết quả của
In [8]: %cd /home/fperez69 dưới dạng danh sách python]. Xem để biết thêm thông tin
Nhập
In [8]: %cd /home/fperez40 để biết thêm thông tin, bao gồm danh sách tất cả các hàm ma thuật có sẵn bất kỳ lúc nào và chuỗi tài liệu của chúng. Bạn cũng có thể gõ
In [8]: %cd /home/fperez41 [xem thông tin trên hệ thống '?'] để nhận thông tin về bất kỳ chức năng ma thuật cụ thể nào mà bạn quan tâm
Tài liệu API cho mô-đun chứa chuỗi tài liệu đầy đủ của tất cả các lệnh ma thuật hiện có
Xem thêm
Các lệnh ma thuật tích hợp danh sách các phép thuật dòng và ô có sẵn trong Python theo mặc định Cách xác định và đăng ký các hàm ma thuật bổ sungTruy cập vào phần trợ giúp tiêu chuẩn của Python
Chỉ cần gõ
In [8]: %cd /home/fperez43 để truy cập hệ thống trợ giúp tiêu chuẩn của Python. Bạn cũng có thể nhập
In [8]: %cd /home/fperez44 để biết thông tin về một đối tượng nhất định hoặc
In [8]: %cd /home/fperez45 để biết thông tin về từ khóa. Bạn có thể cần định cấu hình biến môi trường PYTHONDOCS của mình để tính năng này hoạt động chính xác
Thông tin đối tượng động
Nhập
In [8]: %cd /home/fperez46 hoặc
In [8]: %cd /home/fperez47 in thông tin chi tiết về một đối tượng. Nếu một số chuỗi nhất định trong đối tượng quá dài [e. g. chữ ký chức năng] chúng được cắt ở trung tâm cho ngắn gọn. Hệ thống này cung cấp các loại và giá trị biến truy cập, chuỗi tài liệu, nguyên mẫu hàm và các thông tin hữu ích khác
Nếu thông tin không vừa với thiết bị đầu cuối, nó sẽ được hiển thị trong máy nhắn tin [
In [8]: %cd /home/fperez48 nếu có, nếu không thì máy nhắn tin nội bộ cơ bản]
Nhập
In [8]: %cd /home/fperez49 hoặc
In [8]: %cd /home/fperez60 để truy cập vào thông tin đầy đủ, bao gồm cả mã nguồn nếu có thể. Chuỗi dài không bị cắt
Các chức năng ma thuật sau đây đặc biệt hữu ích để thu thập thông tin về môi trường làm việc của bạn
- . In [hoặc chạy qua máy nhắn tin nếu quá dài] chuỗi tài liệu cho một đối tượng. Nếu đối tượng đã cho là một lớp, nó sẽ in cả tài liệu về lớp và hàm tạo
- . In chữ ký cuộc gọi cho bất kỳ đối tượng có thể gọi nào. Nếu đối tượng là một lớp, in thông tin hàm tạo
- . In [hoặc chạy qua máy nhắn tin nếu quá dài] mã nguồn của một đối tượng
- . Hiển thị toàn bộ tệp nguồn nơi một đối tượng được xác định qua máy nhắn tin, mở nó ở dòng bắt đầu định nghĩa đối tượng
- /. Các chức năng này cung cấp thông tin về số nhận dạng mà bạn đã xác định một cách tương tác [không phải những thứ bạn đã tải hoặc xác định trong tệp cấu hình của mình]. %who chỉ in danh sách các mã định danh và %whos in một bảng với một số chi tiết cơ bản về từng mã định danh
Các hàm thông tin đối tượng động [?/??, ________ 361, ________ 364, ________ 362, _______ 363] hoạt động trên các thuộc tính của đối tượng, cũng như trực tiếp trên các biến. Ví dụ: sau khi thực hiện
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop11, bạn có thể sử dụng
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop12
Các tính năng dựa trên dòng đọc
Các tính năng này yêu cầu thư viện đường đọc GNU, vì vậy chúng sẽ không hoạt động nếu cài đặt Python của bạn thiếu hỗ trợ đường đọc. Trước tiên, chúng tôi sẽ mô tả hành vi mặc định mà IPython sử dụng, sau đó là cách thay đổi hành vi đó cho phù hợp với sở thích của bạn
Hoàn thành dòng lệnh
Bất cứ lúc nào, nhấn TAB sẽ hoàn thành bất kỳ lệnh python hoặc tên biến nào có sẵn và hiển thị cho bạn danh sách các khả năng hoàn thành nếu không có lệnh nào rõ ràng. Nó cũng sẽ hoàn thành tên tệp trong thư mục hiện tại nếu không có tên python nào khớp với tên bạn đã nhập cho đến nay
Tìm kiếm lịch sử lệnh
IPython cung cấp hai cách để tìm kiếm thông qua đầu vào trước đó và do đó giảm nhu cầu nhập lặp đi lặp lại
- Bắt đầu nhập, sau đó sử dụng các phím mũi tên lên và xuống [hoặc
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop13 vàIn [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop14] để chỉ tìm kiếm trong các mục lịch sử khớp với những gì bạn đã nhập cho đến nay- Lần truy cập
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop15. để mở một lời nhắc tìm kiếm. Bắt đầu nhập và hệ thống tìm kiếm lịch sử của bạn để tìm các dòng có chứa những gì bạn đã nhập cho đến nay, hoàn thành càng nhiều càng tốt
IPython sẽ lưu lịch sử đầu vào của bạn khi nó rời đi và tải lại vào lần tới khi bạn khởi động lại nó. Theo mặc định, tệp lịch sử có tên là
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop16
tự động
IPython có thể nhận ra các dòng kết thúc bằng '. ' và thụt lề dòng tiếp theo, đồng thời tự động bỏ thụt lề sau 'raise' hoặc 'return'
Tính năng này sử dụng thư viện readline, do đó, nó sẽ tôn trọng cấu hình
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop17 của bạn [hoặc bất kỳ tệp nào mà biến môi trường
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop18 của bạn trỏ tới]. Việc thêm các dòng sau vào tệp
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop19 của bạn có thể giúp việc thụt lề/bỏ thụt lề thuận tiện hơn [M-i indents, M-u unindents]
In [8]: %cd /home/fperez6
Lưu ý rằng có 4 dấu cách giữa các dấu ngoặc kép sau “M-i” ở trên
Cảnh báo
Đặt các khoảng thụt lề ở trên sẽ gây ra sự cố với mục nhập văn bản unicode trong thiết bị đầu cuối
Cảnh báo
Autoindent được BẬT theo mặc định, nhưng nó có thể gây ra sự cố khi dán mã thụt lề nhiều dòng [mã đã dán được thụt lề lại trên mỗi dòng]. Một chức năng ma thuật %autoindent cho phép bạn bật/tắt nó khi chạy. Bạn cũng có thể tắt nó vĩnh viễn trong tệp
In [8]: %cd /home/fperez5 của mình [đặt TerminalInteractiveShell. autoindent=False]
Nếu bạn muốn dán nhiều dòng vào thiết bị đầu cuối, bạn nên sử dụng
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop21
Tùy chỉnh hành vi đường đọc
Tất cả các tính năng này đều dựa trên thư viện đường dẫn GNU, có giao diện cực kỳ tùy biến. Thông thường, readline được cấu hình thông qua tệp
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop19. IPython tôn trọng điều này và bạn cũng có thể tùy chỉnh đường đọc bằng cách đặt các tùy chọn cấu hình sau
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop23. cái này chứa một danh sách các chuỗi sẽ được thực thi thông qua một dòng đọc. lệnh parse_and_bind[]. Có thể tìm thấy cú pháp cho các lệnh hợp lệ thuộc loại này bằng cách đọc tài liệu về thư viện đường dẫn GNU, vì các lệnh này thuộc loại mà đường đọc chấp nhận trong tệp cấu hình của nó In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop24. một chuỗi ký tự sẽ bị xóa khỏi danh sách dấu phân cách từ mặc định được sử dụng bởi dòng đọc, để việc hoàn thành có thể được thực hiện trên các chuỗi chứa chúng. Không thay đổi giá trị mặc định trừ khi bạn biết mình đang làm gì
Bạn sẽ tìm thấy các giá trị mặc định trong tệp cấu hình của mình
Ghi nhật ký phiên và khôi phục
Bạn có thể ghi nhật ký tất cả đầu vào từ một phiên bằng cách khởi động IPython bằng công tắc dòng lệnh
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop25 [xem ] hoặc bằng cách kích hoạt ghi nhật ký bất kỳ lúc nào với chức năng ma thuật
Các tệp nhật ký sau đó có thể được tải lại bằng cách chạy chúng dưới dạng tập lệnh và IPython sẽ cố gắng 'phát lại' nhật ký bằng cách thực thi tất cả các dòng trong đó, do đó khôi phục trạng thái của phiên trước đó. Tính năng này không hẳn hoàn hảo nhưng vẫn có thể hữu ích trong nhiều trường hợp
Các tệp nhật ký cũng có thể được sử dụng như một cách để có bản ghi vĩnh viễn về bất kỳ mã nào bạn đã viết trong khi thử nghiệm. Các tệp nhật ký là các tệp văn bản thông thường mà sau này bạn có thể mở trong trình soạn thảo văn bản yêu thích của mình để trích xuất mã hoặc để 'xóa chúng' trước khi sử dụng chúng để phát lại một phiên
Chức năng kích hoạt đăng nhập giữa phiên được sử dụng như sau
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop1
Nếu không có tên, nó sẽ mặc định là một tệp có tên 'ipython_log. py' trong thư mục làm việc hiện tại của bạn, ở chế độ 'xoay' [xem bên dưới]
‘%logstart name’ lưu vào tệp ‘name’ trong chế độ ‘backup’. Nó lưu lịch sử của bạn cho đến thời điểm đó và sau đó tiếp tục đăng nhập
%logstart nhận tham số tùy chọn thứ hai. chế độ đăng nhập. Đây có thể là một trong [lưu ý rằng các chế độ được cung cấp không được trích dẫn]
- [trên. ] ghi đè log_name hiện có
- [sao lưu. ] đổi tên [nếu tồn tại] thành log_name~ và bắt đầu log_name
- [ nối thêm. ] tốt, điều đó nói lên điều đó
- [quay. ] tạo nhật ký luân phiên log_name. 1~, log_name. 2~, v.v.
Các chức năng và cho phép bạn tạm thời dừng và tiếp tục đăng nhập vào một tệp đã được bắt đầu trước đó với %logstart. Họ sẽ thất bại [với một lời giải thích] nếu bạn cố gắng sử dụng chúng trước khi đăng nhập đã được bắt đầu
Truy cập vỏ hệ thống
Bất kỳ dòng đầu vào nào bắt đầu bằng một. ký tự được thông qua nguyên văn [trừ. , tất nhiên] vào hệ điều hành cơ bản. Ví dụ: gõ
ipython --matplotlib qt00 sẽ chạy 'ls' trong thư mục hiện tại
Chụp thủ công đầu ra lệnh và đầu ra ma thuật
Bạn có thể gán kết quả của một lệnh hệ thống cho một biến Python bằng cú pháp
ipython --matplotlib qt01. Tương tự, kết quả của một phép thuật [miễn là nó trả về một giá trị] có thể được gán cho một biến. Ví dụ: cú pháp
ipython --matplotlib qt02 tương đương với ví dụ về lệnh hệ thống ở trên [ma thuật chạy lệnh shell và ghi lại kết quả]. Mỗi trong số này có đầu ra có thể đọc được bằng máy từ thiết bị xuất chuẩn [e. g. không có màu] và phân tách trên các dòng mới. Để có được loại đầu ra này một cách rõ ràng mà không cần gán cho một biến, hãy sử dụng hai dấu chấm than [
ipython --matplotlib qt04] hoặc lệnh ma thuật mà không cần gán. [Tuy nhiên, lệnh
ipython --matplotlib qt06 không thể được gán cho một biến. ]
Danh sách đã chụp trong ví dụ này có một số tính năng tiện lợi.
ipython --matplotlib qt07 hoặc
ipython --matplotlib qt08 lần lượt trả về một chuỗi được phân cách bằng dấu cách hoặc dòng mới.
ipython --matplotlib qt09 tạo các đối tượng đường dẫn từ các mục danh sách. Xem để biết chi tiết
IPython cũng cho phép bạn mở rộng giá trị của biến python khi gọi hệ thống. Bọc các biến hoặc biểu thức trong {dấu ngoặc nhọn}
In [10]: %%timeit x = range[10000] ...: min[x] ...: max[x] ...: 1000 loops, best of 3: 438 us per loop2
Đối với các trường hợp đơn giản, bạn có thể thêm $ vào trước tên biến
ipython --matplotlib qt0
Lưu ý rằng
ipython --matplotlib qt10 được sử dụng để đại diện cho một
ipython --matplotlib qt11 theo nghĩa đen
Bí danh lệnh hệ thống
Hàm ma thuật cho phép bạn xác định các hàm ma thuật thực tế là các lệnh trình bao hệ thống. Các bí danh này có thể có các tham số
ipython --matplotlib qt13 định nghĩa 'alias_name' là bí danh cho 'cmd'
Sau đó, gõ
ipython --matplotlib qt14 sẽ thực thi lệnh hệ thống 'cmd params' [từ hệ điều hành cơ bản của bạn]
Bạn cũng có thể xác định bí danh với tham số bằng cách sử dụng bộ xác định %s [một bí danh cho mỗi tham số]. Ví dụ sau định nghĩa hàm bộ phận là bí danh của lệnh 'echo first %s second %s' trong đó mỗi %s sẽ được thay thế bằng một tham số vị trí cho lệnh gọi %parts
ipython --matplotlib qt1
Nếu được gọi không có tham số, hãy in bảng các bí danh hiện được xác định
Điều kỳ diệu cho phép bạn tải toàn bộ $PATH của mình dưới dạng bí danh ipython. Xem chuỗi tài liệu của nó để biết thêm chi tiết
tải lại đệ quy
Mô-đun cho phép bạn tải lại mô-đun một cách đệ quy. những thay đổi được thực hiện đối với bất kỳ phần phụ thuộc nào của nó sẽ được tải lại mà không cần phải thoát. Để bắt đầu sử dụng nó, hãy làm
ipython --matplotlib qt2
Bản in theo dõi ngoại lệ dài dòng và có màu
IPython cung cấp tùy chọn để xem các dấu vết ngoại lệ rất chi tiết, điều này có thể đặc biệt hữu ích khi gỡ lỗi các chương trình lớn. Bạn có thể chạy bất kỳ tệp Python nào bằng hàm %run để hưởng lợi từ các dấu vết chi tiết này. Hơn nữa, cả dấu vết bình thường và dài dòng đều có thể được tô màu [nếu thiết bị đầu cuối của bạn hỗ trợ nó], điều này giúp chúng dễ dàng phân tích cú pháp trực quan hơn nhiều
Xem ma thuật và chức năng để biết chi tiết
Các tính năng này về cơ bản là phiên bản đầu cuối của mô-đun cgitb của Ka-Ping Yee, hiện là một phần của thư viện Python tiêu chuẩn
Hệ thống bộ đệm đầu vào
IPython cung cấp các lời nhắc được đánh số [Vào/Ra] với bộ nhớ đệm đầu vào và đầu ra [còn được gọi là 'lịch sử đầu vào']. Tất cả đầu vào được lưu và có thể được truy xuất dưới dạng các biến [ngoài việc gọi lại phím mũi tên thông thường], ngoài lệnh ma thuật
ipython --matplotlib qt20 đưa mục nhập lịch sử lên để chỉnh sửa trên dòng lệnh tiếp theo
Các biến sau luôn tồn tại
- _i, _ii, _iii. lưu trữ các đầu vào trước đó, trước đó tiếp theo và tiếp theo-tiếp theo trước đó
- Trong, _ih. một danh sách tất cả các đầu vào; . Nếu bạn ghi đè In bằng một biến của riêng mình, bạn có thể thực hiện lại việc gán cho danh sách nội bộ bằng một
ipython --matplotlib qt
21 đơn giản
Additionally, global variables named _i are dynamically created [ being the prompt counter], so
ipython --matplotlib qt22.
Ví dụ: nội dung bạn nhập tại dấu nhắc 14 có sẵn dưới dạng
ipython --matplotlib qt23,
ipython --matplotlib qt24 và
ipython --matplotlib qt25
Điều này cho phép bạn dễ dàng cắt và dán lời nhắc tương tác nhiều dòng bằng cách in chúng ra. chúng in như một chuỗi sạch, không có ký tự dấu nhắc. Bạn cũng có thể thao tác với chúng như các biến thông thường [chúng là các chuỗi], sửa đổi hoặc thực thi chúng
Bạn cũng có thể dễ dàng thực hiện lại nhiều dòng nhập liệu bằng cách sử dụng phép thuật hoặc hàm. Hệ thống macro cũng cho phép bạn thực hiện lại các dòng trước đó bao gồm các lệnh gọi hàm kỳ diệu [yêu cầu xử lý đặc biệt]. Nhập %vĩ mô?
Hàm lịch sử cho phép bạn xem bất kỳ phần nào trong lịch sử nhập của mình bằng cách in một loạt các biến _i
Bạn cũng có thể tìm kiếm [‘grep’] trong lịch sử của mình bằng cách nhập
ipython --matplotlib qt29. Điều này rất hữu ích để tìm kiếm URL, địa chỉ IP, v.v. Bạn có thể đưa các mục nhập lịch sử được liệt kê bởi ‘%hist -g’ lên để chỉnh sửa bằng lệnh %recall hoặc chạy chúng ngay lập tức với
Hệ thống bộ nhớ đệm đầu ra
Đối với đầu ra được trả về từ các hành động, tồn tại một hệ thống tương tự như bộ đệm đầu vào nhưng sử dụng _ thay vì _i. Chỉ các hành động tạo ra kết quả [ví dụ KHÔNG phải bài tập] mới được lưu vào bộ đệm. Nếu bạn đã quen thuộc với Mathematica, các biến _ của IPython hoạt động chính xác như các biến % của Mathematica
Các biến sau luôn tồn tại
- [_] [một dấu gạch dưới]. lưu trữ đầu ra trước đó, như trình thông dịch mặc định của Python
- [__] [hai dấu gạch dưới]. tiếp theo trước đó
- [___] [ba dấu gạch dưới]. kế tiếp kế trước
Additionally, global variables named _ are dynamically created [ being the prompt counter], such that the result of output is always available as _ [don’t use the angle brackets, just the number, e.g.
ipython --matplotlib qt31].
Các biến này cũng được lưu trữ trong một từ điển chung [không phải danh sách, vì nó chỉ có các mục nhập cho các dòng trả về kết quả] có sẵn dưới tên _oh và Out [tương tự như _ih và In]. Vì vậy, đầu ra từ dòng 12 có thể được lấy là
ipython --matplotlib qt32,
ipython --matplotlib qt33 hoặc
ipython --matplotlib qt34. Nếu bạn vô tình ghi đè lên biến Out, bạn có thể khôi phục nó bằng cách gõ
ipython --matplotlib qt35 tại dấu nhắc
Hệ thống này rõ ràng có khả năng đặt yêu cầu bộ nhớ lớn lên hệ thống của bạn, vì nó ngăn trình thu gom rác của Python xóa mọi kết quả được tính toán trước đó. Bạn có thể kiểm soát số lượng kết quả được lưu trong bộ nhớ bằng tùy chọn cấu hình
ipython --matplotlib qt36. Nếu bạn đặt thành 0, bộ nhớ đệm đầu ra sẽ bị tắt. Bạn cũng có thể sử dụng phép thuật và để xóa các mục lớn khỏi bộ nhớ
lịch sử thư mục
Lịch sử các thư mục đã truy cập của bạn được lưu trong danh sách chung _dh và lệnh ma thuật có thể được sử dụng để đi đến bất kỳ mục nào trong danh sách đó. Lệnh cho phép bạn xem lịch sử này. Thực hiện
ipython --matplotlib qt41 để thuận tiện xem lịch sử thư mục
Dấu ngoặc đơn và dấu ngoặc kép tự động
Các tính năng này được điều chỉnh từ LazyPython của Nathan Gray. Chúng có nghĩa là cho phép gõ ít hơn cho các tình huống phổ biến
các đối tượng có thể gọi được [i. e. hàm, phương thức, v.v.] có thể được gọi như thế này [chú ý dấu phẩy giữa các đối số]
ipython --matplotlib qt3
Ghi chú
Tính năng này được tắt theo mặc định. Để kích hoạt nó, hãy sử dụng lệnh ma thuật
ipython --matplotlib qt42. Tuy nhiên, các lệnh bên dưới với các tiền tố đặc biệt sẽ luôn hoạt động
Bạn có thể buộc các dấu ngoặc đơn tự động bằng cách sử dụng '/' làm ký tự đầu tiên của một dòng. Ví dụ
ipython --matplotlib qt4
Lưu ý rằng '/' PHẢI là ký tự đầu tiên trên dòng. Điều này sẽ không hoạt động
ipython --matplotlib qt5
Trong hầu hết các trường hợp, thuật toán tự động sẽ hoạt động, vì vậy bạn hiếm khi cần gọi /. Một ngoại lệ đáng chú ý là nếu bạn đang cố gọi một hàm có danh sách các bộ dữ liệu làm đối số [dấu ngoặc đơn sẽ gây nhầm lẫn cho IPython]
ipython --matplotlib qt6
nhưng điều này sẽ làm việc
ipython --matplotlib qt7
IPython cho bạn biết rằng nó đã thay đổi dòng lệnh của bạn bằng cách hiển thị dòng lệnh mới trước
ipython --matplotlib qt43
Bạn có thể buộc trích dẫn tự động các đối số của hàm bằng cách sử dụng
ipython --matplotlib qt44 hoặc
ipython --matplotlib qt45 làm ký tự đầu tiên của một dòng. Ví dụ
ipython --matplotlib qt8
Nếu bạn sử dụng ';', toàn bộ đối số được trích dẫn dưới dạng một chuỗi, trong khi ',' phân tách trên khoảng trắng
ipython --matplotlib qt9
Lưu ý rằng ',' hoặc ';' PHẢI là ký tự đầu tiên trên dòng. Điều này sẽ không hoạt động
In [8]: %cd /home/fperez00
IPython làm môi trường Python mặc định của bạn
Python tôn vinh biến môi trường và sẽ thực thi khi khởi động tệp được tham chiếu bởi biến này. Nếu bạn đặt đoạn mã sau vào cuối tệp đó, thì IPython sẽ là môi trường làm việc của bạn bất cứ khi nào bạn khởi động Python
In [8]: %cd /home/fperez01
Cần có
ipython --matplotlib qt47 để thoát khỏi Python khi nó kết thúc, nếu không, bạn sẽ quay lại dấu nhắc Python
ipython --matplotlib qt48 bình thường
Điều này có thể hữu ích cho các nhà phát triển quản lý nhiều phiên bản Python và không muốn có nhiều phiên bản IPython tương ứng. Lưu ý rằng trong chế độ này, không có cách nào để vượt qua bất kỳ tùy chọn dòng lệnh nào của IPython, vì chúng bị mắc kẹt trước bởi chính Python
Nhúng IPython
Bạn có thể bắt đầu phiên IPython thông thường với
In [8]: %cd /home/fperez02
tại bất kỳ điểm nào trong chương trình của bạn. Điều này sẽ tải cấu hình IPython, tệp khởi động và mọi thứ, giống như đó là phiên IPython bình thường
Cũng có thể nhúng trình bao IPython vào một không gian tên trong mã Python của bạn. Điều này cho phép bạn đánh giá động trạng thái mã của mình, vận hành với các biến của bạn, phân tích chúng, v.v. Tuy nhiên, xin lưu ý rằng bất kỳ thay đổi nào bạn thực hiện đối với các giá trị khi ở trong trình bao sẽ không lan truyền trở lại mã đang chạy, do đó, việc sửa đổi các giá trị của bạn là an toàn vì bạn sẽ không phá vỡ mã của mình theo những cách kỳ lạ khi làm như vậy
Ghi chú
Hiện tại, việc nhúng IPython không thể được thực hiện từ bên trong IPython. Chạy các mẫu mã bên dưới bên ngoài IPython
Tính năng này cho phép bạn dễ dàng có một môi trường python đầy đủ chức năng để thực hiện nội quan đối tượng ở bất kỳ đâu trong mã của bạn bằng một lệnh gọi hàm đơn giản. Trong một số trường hợp, một câu lệnh in đơn giản là đủ, nhưng nếu bạn cần phân tích chi tiết hơn về một đoạn mã thì tính năng này có thể rất có giá trị
Nó cũng có thể hữu ích trong các tình huống tính toán khoa học, nơi thông thường cần thực hiện một số phần tự động, tính toán chuyên sâu và sau đó dừng lại để xem dữ liệu, sơ đồ, v.v. Mở một phiên bản IPython sẽ cung cấp cho bạn toàn quyền truy cập vào dữ liệu và chức năng của mình, đồng thời bạn có thể tiếp tục thực thi chương trình sau khi hoàn thành phần tương tác [có thể dừng lại sau, nhiều lần nếu cần]
Đoạn mã sau đây là mức tối thiểu bạn cần đưa vào chương trình Python của mình để mã này hoạt động [các ví dụ chi tiết sẽ có sau]
In [8]: %cd /home/fperez03
Bạn cũng có thể nhúng hạt nhân IPython, để sử dụng với qtconsole, v.v. thông qua
ipython --matplotlib qt49. Chức năng này sẽ hoạt động theo cùng một cách, nhưng bạn có thể kết nối một giao diện người dùng bên ngoài [
ipython --matplotlib qt50 hoặc
ipython --matplotlib qt51], thay vì tương tác với nó trong thiết bị đầu cuối
You can run embedded instances even in code which is itself being run at the IPython interactive prompt with ‘%run ’. Since it’s easy to get lost as to where you are [in your top-level IPython or in your embedded one], it’s a good idea in such cases to set the in/out prompts to something different for the embedded instances. The code examples below illustrate this.
Bạn cũng có thể có nhiều phiên bản IPython trong chương trình của mình và mở chúng một cách riêng biệt, chẳng hạn như với các tùy chọn khác nhau để trình bày dữ liệu. Nếu bạn đóng và mở cùng một phiên bản nhiều lần, bộ đếm dấu nhắc của nó chỉ đơn giản là tiếp tục từ mỗi lần thực hiện này sang lần thực hiện tiếp theo
Vui lòng xem các tài liệu trong mô-đun
ipython --matplotlib qt52 để biết thêm chi tiết về việc sử dụng hệ thống này
Tệp mẫu sau đây minh họa cách sử dụng chức năng nhúng được cung cấp trong thư mục ví dụ dưới dạng embed_class_long. py. Nó nên được khá tự giải thích
In [8]: %cd /home/fperez04
Khi bạn hiểu cách thức hoạt động của hệ thống, bạn có thể sử dụng các đoạn mã sau trong chương trình của mình, sẵn sàng để cắt và dán
In [8]: %cd /home/fperez05
Sử dụng trình gỡ lỗi Python [pdb]
Chạy toàn bộ chương trình qua pdb
pdb, trình gỡ lỗi Python, là một trình gỡ lỗi tương tác mạnh mẽ cho phép bạn lướt qua mã, đặt điểm dừng, xem các biến, v.v. IPython giúp dễ dàng bắt đầu bất kỳ tập lệnh nào dưới sự kiểm soát của pdb, bất kể bạn có gói nó vào hàm 'main[]' hay không. Đối với điều này, chỉ cần gõ
ipython --matplotlib qt53 tại dấu nhắc IPython. Xem tài liệu của lệnh để biết thêm chi tiết, bao gồm cách kiểm soát nơi pdb sẽ dừng thực thi trước
Để biết thêm thông tin về việc sử dụng trình gỡ lỗi pdb, hãy xem trong tài liệu Python
Gỡ lỗi sau khi chết
Truy cập trình gỡ lỗi khi xảy ra ngoại lệ có thể cực kỳ hữu ích để tìm ra nguồn gốc của các lỗi tinh vi, bởi vì pdb mở ra tại điểm trong mã của bạn đã kích hoạt ngoại lệ và trong khi chương trình của bạn ở điểm 'chết', tất cả
Bạn có thể sử dụng phép thuật sau khi một ngoại lệ xảy ra để bắt đầu gỡ lỗi sau khi chết. IPython cũng có thể gọi trình gỡ lỗi mỗi khi mã của bạn kích hoạt một ngoại lệ chưa được phát hiện. Tính năng này có thể được bật bằng lệnh ma thuật hoặc bạn có thể khởi động IPython bằng tùy chọn
ipython --matplotlib qt57
Đối với trình gỡ lỗi hậu kỳ trong các chương trình của bạn bên ngoài IPython, hãy đặt các dòng sau vào đầu quy trình 'chính' của bạn
In [8]: %cd /home/fperez06
Từ khóa chế độ có thể là 'Verbose' hoặc 'Plain', tương ứng cung cấp các truy vết rất chi tiết hoặc bình thường. Từ khóa color_scheme có thể là một trong số ‘NoColor’, ‘Linux’ [mặc định] hoặc ‘LightBG’. Đây là những tùy chọn tương tự có thể được đặt trong IPython với
ipython --matplotlib qt58 và
ipython --matplotlib qt59
Điều này sẽ cung cấp cho bất kỳ chương trình nào của bạn các dấu vết chi tiết, có màu với lệnh gọi pdb tự động
Dán mã bắt đầu bằng lời nhắc Python hoặc IPython
IPython đủ thông minh để lọc ra các lời nhắc đầu vào, có thể là lời nhắc Python đơn giản [
ipython --matplotlib qt48 và
ipython --matplotlib qt61] hoặc lời nhắc IPython [
ipython --matplotlib qt62 và
ipython --matplotlib qt63]. Do đó, bạn có thể sao chép và dán từ các phiên tương tác hiện có mà không phải lo lắng
Sau đây là 'ảnh chụp màn hình' về cách mọi thứ hoạt động, sao chép một ví dụ từ hướng dẫn Python tiêu chuẩn
In [8]: %cd /home/fperez07
Và dán từ các phiên IPython hoạt động tốt như nhau
In [8]: %cd /home/fperez08
Hỗ trợ vòng lặp sự kiện GUI
Mới trong phiên bản 0. 11. Phép thuật
ipython --matplotlib qt64 và.
IPython hỗ trợ tuyệt vời để làm việc tương tác với bộ công cụ Giao diện người dùng đồ họa [GUI], chẳng hạn như wxPython, PyQt4/PySide, PyGTK và Tk. Điều này được triển khai bằng cách sử dụng hook ________ 966 tích hợp sẵn của Python. Việc triển khai này cực kỳ mạnh mẽ so với phiên bản dựa trên luồng trước đây của chúng tôi. Ưu điểm của việc này là
- GUI có thể được bật và tắt động khi chạy
- GUI hoạt động có thể được chuyển động khi chạy
- Trong một số trường hợp, nhiều GUI có thể chạy đồng thời mà không gặp vấn đề gì
- Có một API dành cho nhà phát triển để tùy chỉnh tất cả những thứ này
Đối với người dùng, kích hoạt tích hợp vòng lặp sự kiện GUI rất đơn giản. Bạn đơn giản sử dụng phép thuật như sau
In [8]: %cd /home/fperez09
Không có đối số,
ipython --matplotlib qt64 xóa tất cả hỗ trợ GUI. Các đối số
ipython --matplotlib qt70 hợp lệ là
ipython --matplotlib qt71,
ipython --matplotlib qt72,
ipython --matplotlib qt73 và
ipython --matplotlib qt74
Vì vậy, để sử dụng wxPython một cách tương tác và tạo một đối tượng
ipython --matplotlib qt75 đang chạy, hãy làm
In [8]: %cd /home/fperez0
Bạn cũng có thể bắt đầu IPython bằng một vòng lặp sự kiện được thiết lập bằng cờ
ipython --matplotlib qt76
In [8]: %cd /home/fperez1
Để biết thông tin về tích hợp matplotlib của IPython [và chế độ
ipython --matplotlib qt77], hãy xem
Đối với các nhà phát triển muốn sử dụng tích hợp vòng lặp sự kiện GUI của IPython ở dạng thư viện, các khả năng này được hiển thị ở dạng thư viện trong và các mô-đun. Các nhà phát triển quan tâm nên xem các tài liệu mô-đun để biết thêm thông tin, nhưng có một số điểm cần được đề cập ở đây
Đầu tiên, cách tiếp cận
ipython --matplotlib qt66 chỉ hoạt động trong cài đặt dòng lệnh khi đường đọc được kích hoạt. Việc tích hợp với các vòng lặp sự kiện khác nhau được xử lý hơi khác [và đơn giản hơn] khi sử dụng kernel độc lập, như trong qtconsole và notebook
Thứ hai, khi sử dụng phương pháp
ipython --matplotlib qt66, ứng dụng GUI sẽ không bắt đầu vòng lặp sự kiện của nó. Thay vào đó, tất cả những điều này được xử lý bởi
ipython --matplotlib qt66. Điều này có nghĩa là các ứng dụng được sử dụng cả trong IPython và dưới dạng các ứng dụng độc lập cần phải có mã đặc biệt để phát hiện cách ứng dụng đang chạy. Chúng tôi thực sự khuyên bạn nên sử dụng hỗ trợ của IPython cho việc này. Vì các chi tiết khác nhau một chút giữa các bộ công cụ, chúng tôi chỉ cho bạn các ví dụ khác nhau trong thư mục nguồn của chúng tôi
ipython --matplotlib qt83 thể hiện các khả năng này
Thứ ba, không giống như các phiên bản trước của IPython, chúng tôi không còn “chiếm quyền điều khiển” [thay thế chúng bằng no-op] các vòng lặp sự kiện. Điều này được thực hiện để cho phép các ứng dụng thực sự cần chạy các vòng lặp sự kiện thực để làm như vậy. Điều này thường cần thiết để xử lý các sự kiện đang chờ xử lý tại các điểm quan trọng
Cuối cùng, chúng tôi cũng có một số ví dụ trong thư mục nguồn của chúng tôi
ipython --matplotlib qt83 thể hiện những khả năng này
PyQt và PySide
Khi bạn sử dụng
ipython --matplotlib qt85 hoặc
ipython --matplotlib qt86, IPython có thể hoạt động với PyQt4 hoặc PySide. Có ba tùy chọn để cấu hình ở đây, vì PyQt4 có hai API cho QString và QVariant. v1, là mặc định trên Python 2 và v2 tự nhiên hơn, là API duy nhất được PySide hỗ trợ. v2 cũng là mặc định cho PyQt4 trên Python 3. Mã của IPython cho QtConsole sử dụng v2, nhưng bạn vẫn có thể sử dụng bất kỳ giao diện nào trong mã của mình vì giao diện người dùng Qt đang ở một quy trình khác
Mặc định sẽ là nhập PyQt4 mà không cần cấu hình API, do đó phù hợp với những gì mà hầu hết các ứng dụng mong đợi. Nó sẽ quay trở lại PySide nếu PyQt4 không khả dụng
Nếu được chỉ định, IPython sẽ tôn trọng biến môi trường
ipython --matplotlib qt87 được sử dụng bởi ETS. ETS 4. 0 cũng hoạt động với cả PyQt4 và PySide, nhưng nó yêu cầu PyQt4 sử dụng API v2 của nó. Vì vậy, nếu
ipython --matplotlib qt88 PySide sẽ được sử dụng và nếu
ipython --matplotlib qt89 thì PyQt4 sẽ được sử dụng với API v2 cho QString và QVariant, vì vậy các mã ETS như MayaVi cũng sẽ hoạt động với IPython
Nếu bạn khởi chạy IPython ở chế độ matplotlib với
ipython --matplotlib qt90, thì IPython sẽ hỏi matplotlib thư viện Qt nào sẽ sử dụng [chỉ khi QT_API không được đặt], thông qua phần phụ trợ. qt4’ rcParam. Nếu matplotlib là phiên bản 1. 0. 1 trở lên, thì IPython sẽ luôn sử dụng PyQt4 mà không cần đặt API v2, vì cả PyQt và PySide v2 đều không hoạt động
Cảnh báo
Lưu ý rằng điều này có nghĩa là để ETS 4 hoạt động với PyQt4,
ipython --matplotlib qt87 phải được đặt để hoạt động với tích hợp qt của IPython, vì nếu không thì PyQt4 sẽ được tải ở chế độ không tương thích
Điều đó cũng có nghĩa là bạn không được đặt
ipython --matplotlib qt87 nếu muốn sử dụng
ipython --matplotlib qt85 với mã yêu cầu API PyQt4 v1
Vẽ đồ thị với matplotlib
matplotlib cung cấp đồ thị 2D và 3D chất lượng cao cho Python. matplotlib có thể tạo các ô trên màn hình bằng nhiều bộ công cụ GUI, bao gồm Tk, PyGTK, PyQt4 và wxPython. Nó cũng cung cấp một số lệnh hữu ích cho tính toán khoa học, tất cả đều có cú pháp tương thích với cú pháp của chương trình Matlab phổ biến
Để bắt đầu IPython với hỗ trợ matplotlib, hãy sử dụng khóa chuyển đổi
ipython --matplotlib qt94. Nếu IPython đã chạy, bạn có thể chạy phép thuật. Nếu không có đối số nào được đưa ra, IPython sẽ tự động phát hiện lựa chọn phụ trợ matplotlib của bạn. Bạn cũng có thể yêu cầu một chương trình phụ trợ cụ thể với
ipython --matplotlib qt96, trong đó
ipython --matplotlib qt97 phải là một trong. 'tk', 'qt', 'wx', 'gtk', 'osx'. Trong sổ ghi chép web và bảng điều khiển Qt, 'inline' cũng là một giá trị phụ trợ hợp lệ, tạo ra các số liệu tĩnh được đặt bên trong cửa sổ ứng dụng thay vì các số liệu tương tác của matplotlib nằm trong các cửa sổ riêng biệt
Trình diễn tương tác với IPython
IPython cung cấp một hệ thống cơ bản để chạy các tập lệnh tương tác theo từng phần, hữu ích khi trình bày mã cho khán giả. Một vài thẻ được nhúng trong các nhận xét [để tập lệnh duy trì mã Python hợp lệ] chia tệp thành các khối riêng biệt và bản trình diễn có thể chạy từng khối một, với in IPython [có đánh dấu cú pháp] khối trước khi thực thi khối đó và . Không gian tên tương tác được cập nhật sau mỗi khối được chạy với nội dung của không gian tên demo
Điều này cho phép bạn hiển thị một đoạn mã, chạy nó và sau đó thực thi các lệnh tương tác dựa trên các biến vừa tạo. Khi bạn muốn tiếp tục, bạn chỉ cần thực hiện khối tiếp theo của bản demo. Danh sách sau đây hiển thị đánh dấu cần thiết để chia tập lệnh thành các phần để thực thi dưới dạng bản trình diễn
In [8]: %cd /home/fperez2
Để chạy một tệp dưới dạng bản demo, trước tiên bạn phải tạo một đối tượng Demo từ nó. Nếu tệp được đặt tên là myscript. py, đoạn mã sau sẽ tạo một bản demo
In [8]: %cd /home/fperez3
Thao tác này tạo đối tượng mydemo, có các khối mà bạn chạy từng khối một bằng cách gọi đối tượng mà không có đối số. Rồi gọi nó chạy từng bước demo
In [8]: %cd /home/fperez4
Các đối tượng demo có thể được khởi động lại, bạn có thể tiến hoặc lùi khi bỏ qua các khối, thực hiện lại khối cuối cùng, v.v. Xem mô-đun và lớp để biết chi tiết
Hạn chế. Những bản trình diễn này được giới hạn ở những mục đích sử dụng khá đơn giản. Đặc biệt, bạn không thể chia nhỏ các phần trong mã thụt lề [vòng lặp, câu lệnh if, định nghĩa hàm, v.v. ] Hỗ trợ một cái gì đó như thế này về cơ bản sẽ yêu cầu theo dõi trạng thái thực thi bên trong của trình thông dịch Python, do đó, chỉ các phân chia cấp cao nhất mới được phép. Nếu bạn muốn có thể mở một phiên bản IPython tại một điểm tùy ý trong chương trình, bạn có thể sử dụng IPython's