Python đọc đối số từ stdin
Sau đó, nội dung của 8 (được truy cập thông qua lệnh "cat") sẽ được chuyển đến tập lệnh python dưới dạng đầu vào tiêu chuẩn. Điều đó hoạt động tốt (mặc dù một cách thanh lịch hơn sẽ tốt hơn). Nhưng bây giờ tôi phải chuyển một đối số khác, đơn giản là một từ sẽ được sử dụng làm truy vấn (và sau đó là hai từ). Nhưng tôi không thể tìm ra cách để làm điều đó đúng cách, vì ống mèo sẽ gây ra lỗi. Và bạn không thể sử dụng tiêu chuẩn 9 trong Python vì nó sẽ dẫn đến lỗi EOF (bạn không thể kết hợp stdin và 9 trong Python) Show Giải pháp tốt nhấtTôi khá chắc chắn rằng điểm đánh dấu stdin thực hiện thủ thuật
Cách thanh lịch hơn có lẽ là chuyển tệp. txt làm đối số, sau đó mở và đọc nó Giải pháp liên quanPython – Cách thực thi chương trình hoặc gọi lệnh hệ thốngSử dụng mô-đun 1 trong thư viện chuẩn
Ưu điểm của over là linh hoạt hơn (bạn có thể lấy , , the , better , v.v. ) Thậm chí đề xuất sử dụng 1 thay thế
Trên Python 3. 4 trở về trước, sử dụng 0 thay vì 1
Python – Siêu dữ liệu trong Python là gìCác lớp như các đối tượng Trước khi hiểu về siêu dữ liệu, bạn cần nắm vững các lớp trong Python. Và Python có một ý tưởng rất đặc biệt về lớp là gì, mượn từ ngôn ngữ Smalltalk Trong hầu hết các ngôn ngữ, các lớp chỉ là những đoạn mã mô tả cách tạo ra một đối tượng. Điều đó cũng đúng trong Python
Nhưng các lớp còn nhiều hơn thế trong Python. Lớp cũng là đối tượng Vâng, đồ vật Ngay khi bạn sử dụng từ khóa 2, Python sẽ thực thi nó và tạo một đối tượng. Hướng dẫn
tạo trong bộ nhớ một đối tượng có tên 3Bản thân đối tượng này (lớp) có khả năng tạo đối tượng (các thể hiện) và đây là lý do tại sao nó là một lớp Tuy nhiên, nó vẫn là một đối tượng, và do đó
e. g 6Tạo lớp độngVì các lớp là các đối tượng, bạn có thể tạo chúng một cách nhanh chóng, giống như bất kỳ đối tượng nào Đầu tiên, bạn có thể tạo một lớp trong một hàm bằng cách sử dụng 2 8Nhưng nó không năng động lắm, vì bạn vẫn phải tự viết cả lớp Vì các lớp là các đối tượng, chúng phải được tạo bởi một cái gì đó Khi bạn sử dụng từ khóa 2, Python sẽ tự động tạo đối tượng này. Nhưng cũng giống như hầu hết mọi thứ trong Python, nó cung cấp cho bạn một cách để thực hiện thủ côngNhớ chức năng 6? 1Chà, có một khả năng hoàn toàn khác, nó cũng có thể tạo các lớp một cách nhanh chóng. 6 có thể lấy mô tả của một lớp làm tham số và trả về một lớp(Tôi biết, thật ngớ ngẩn khi cùng một chức năng có thể có hai cách sử dụng hoàn toàn khác nhau tùy theo các tham số bạn truyền cho nó. Đó là sự cố do khả năng tương thích ngược trong Python) 6 hoạt động theo cách này 4Ở đâu
e. g 0có thể được tạo thủ công theo cách này 1Bạn sẽ nhận thấy rằng chúng tôi sử dụng 63 làm tên của lớp và làm biến để giữ tham chiếu lớp. Chúng có thể khác nhau, nhưng không có lý do gì để phức tạp hóa mọi thứ 6 chấp nhận một từ điển để định nghĩa các thuộc tính của lớp. Cho nên 2Có thể được dịch sang 3Và được sử dụng như một lớp bình thường 4Và tất nhiên, bạn có thể kế thừa từ nó, vì vậy 5sẽ là 6Cuối cùng, bạn sẽ muốn thêm các phương thức vào lớp của mình. Chỉ cần xác định một hàm có chữ ký phù hợp và gán nó làm thuộc tính 7Và bạn có thể thêm nhiều phương thức hơn nữa sau khi bạn tự động tạo lớp, giống như thêm các phương thức vào một đối tượng lớp được tạo bình thường 8Bạn thấy chúng ta đang đi đâu. trong Python, các lớp là các đối tượng và bạn có thể tạo một lớp nhanh chóng, linh hoạt Đây là những gì Python làm khi bạn sử dụng từ khóa 2 và nó làm như vậy bằng cách sử dụng siêu dữ liệuSiêu dữ liệu là gì (cuối cùng)Siêu dữ liệu là 'công cụ' tạo ra các lớp Bạn định nghĩa các lớp để tạo các đối tượng, phải không? Nhưng chúng tôi đã học được rằng các lớp Python là các đối tượng Chà, siêu dữ liệu là thứ tạo ra các đối tượng này. Chúng là các lớp của các lớp, bạn có thể hình dung chúng theo cách này 9Bạn đã thấy rằng 6 cho phép bạn làm điều gì đó như thế này 0Đó là bởi vì hàm 6 trên thực tế là một siêu dữ liệu. 6 là siêu dữ liệu Python sử dụng để tạo tất cả các lớp đằng sau hậu trườngBây giờ bạn tự hỏi "tại sao nó lại được viết bằng chữ thường mà không phải là 69?"Chà, tôi đoán đó là vấn đề nhất quán với 80, lớp tạo đối tượng chuỗi và 81 lớp tạo đối tượng số nguyên. 6 chỉ là lớp tạo ra các đối tượng lớpBạn thấy điều đó bằng cách kiểm tra thuộc tính 83Mọi thứ, và ý tôi là mọi thứ, là một đối tượng trong Python. Điều đó bao gồm số nguyên, chuỗi, hàm và lớp. Tất cả đều là đối tượng. Và tất cả chúng đã được tạo ra từ một lớp 1Bây giờ, 83 của bất kỳ 83 nào là gì? 2Vì vậy, siêu dữ liệu chỉ là thứ tạo ra các đối tượng lớp Bạn có thể gọi nó là 'nhà máy đẳng cấp' nếu muốn 6 là siêu dữ liệu tích hợp sẵn mà Python sử dụng, nhưng tất nhiên, bạn có thể tạo siêu dữ liệu của riêng mìnhthuộc tínhTrong Python 2, bạn có thể thêm thuộc tính 87 khi viết một lớp (xem phần tiếp theo để biết cú pháp Python 3) 3Nếu bạn làm như vậy, Python sẽ sử dụng siêu dữ liệu để tạo lớp 89Cẩn thận, nó khó Bạn viết 10 trước, nhưng đối tượng lớp 89 chưa được tạo trong bộ nhớPython sẽ tìm kiếm 87 trong định nghĩa lớp. Nếu nó tìm thấy nó, nó sẽ sử dụng nó để tạo lớp đối tượng 89. Nếu không, nó sẽ sử dụng 6 để tạo lớpĐọc cái đó mấy lần khi bạn làm 4Python làm như sau Có thuộc tính 87 trong 89 không?Nếu có, hãy tạo trong bộ nhớ một đối tượng lớp (tôi đã nói là một đối tượng lớp, hãy ở lại với tôi ở đây), với tên 89 bằng cách sử dụng những gì có trong 87Nếu Python không thể tìm thấy 87, nó sẽ tìm kiếm một 87 ở cấp độ MODULE và cố gắng làm điều tương tự (nhưng chỉ đối với các lớp không kế thừa bất cứ thứ gì, về cơ bản là các lớp kiểu cũ)Sau đó, nếu nó không thể tìm thấy bất kỳ 87 nào, nó sẽ sử dụng siêu dữ liệu riêng của 42 (cha đầu tiên) (có thể là 6 mặc định) để tạo đối tượng lớpHãy cẩn thận ở đây rằng thuộc tính 87 sẽ không được kế thừa, siêu dữ liệu của cha mẹ ( 45) sẽ là. Nếu 42 sử dụng thuộc tính 87 đã tạo 42 với 49 (chứ không phải 00), các lớp con sẽ không kế thừa hành vi đóBây giờ câu hỏi lớn là, bạn có thể đặt gì vào 87?Câu trả lời là một cái gì đó có thể tạo ra một lớp học Và những gì có thể tạo ra một lớp học? Siêu dữ liệu trong Python 3Cú pháp đặt siêu dữ liệu đã được thay đổi trong Python 3 5i. e. thuộc tính 87 không còn được sử dụng, thay vào đó là đối số từ khóa trong danh sách các lớp cơ sởTuy nhiên, hành vi của siêu dữ liệu hầu như không thay đổi Một điều được thêm vào siêu dữ liệu trong Python 3 là bạn cũng có thể chuyển các thuộc tính dưới dạng đối số từ khóa vào siêu dữ liệu, như vậy 6Đọc phần bên dưới để biết cách Python xử lý việc này Siêu dữ liệu tùy chỉnhMục đích chính của siêu dữ liệu là tự động thay đổi lớp khi nó được tạo Bạn thường làm điều này cho các API, nơi bạn muốn tạo các lớp phù hợp với ngữ cảnh hiện tại Hãy tưởng tượng một ví dụ ngớ ngẩn, nơi bạn quyết định rằng tất cả các lớp trong mô-đun của bạn phải có các thuộc tính được viết hoa. Có một số cách để thực hiện việc này, nhưng một cách là đặt 87 ở cấp độ mô-đunBằng cách này, tất cả các lớp của mô-đun này sẽ được tạo bằng cách sử dụng siêu dữ liệu này và chúng ta chỉ cần yêu cầu siêu dữ liệu chuyển tất cả các thuộc tính thành chữ hoa May mắn thay, 87 thực sự có thể là bất kỳ lớp nào có thể gọi được, nó không cần phải là một lớp chính thức (tôi biết, thứ gì đó có 'lớp' trong tên của nó không cần phải là một lớp, hãy xem. nhưng nó hữu ích)Vì vậy, chúng ta sẽ bắt đầu với một ví dụ đơn giản, bằng cách sử dụng hàm 7Hãy kiểm tra 8Bây giờ, hãy làm giống hệt như vậy, nhưng sử dụng một lớp thực cho một siêu dữ liệu 9Bây giờ chúng ta hãy viết lại những điều trên, nhưng với các tên biến ngắn hơn và thực tế hơn khi chúng ta biết ý nghĩa của chúng 0Bạn có thể nhận thấy đối số bổ sung 06. Không có gì đặc biệt về nó. 07 luôn nhận lớp mà nó được định nghĩa, làm tham số đầu tiên. Giống như bạn có 08 cho các phương thức thông thường nhận thể hiện làm tham số đầu tiên hoặc lớp xác định cho các phương thức lớpNhưng điều này không đúng OOP. Chúng tôi đang gọi trực tiếp cho 6 và chúng tôi không ghi đè hoặc gọi cho phụ huynh 07. Hãy làm điều đó thay vào đó 1Chúng ta có thể làm cho nó sạch hơn nữa bằng cách sử dụng 11, điều này sẽ giúp dễ dàng thừa kế (vì có, bạn có thể có siêu dữ liệu, kế thừa từ siêu dữ liệu, kế thừa từ loại) 2Ồ, và trong Python 3 nếu bạn thực hiện cuộc gọi này với các đối số từ khóa, như thế này 3Nó chuyển thành cái này trong siêu dữ liệu để sử dụng nó 4Đó là nó. Thực sự không có gì hơn về siêu dữ liệu Lý do đằng sau sự phức tạp của mã khi sử dụng siêu dữ liệu không phải là do siêu dữ liệu, mà là vì bạn thường sử dụng siêu dữ liệu để thực hiện những thứ phức tạp dựa trên nội quan, thao tác thừa kế, các vars như 12, v.v.Thật vậy, siêu dữ liệu đặc biệt hữu ích để thực hiện ma thuật đen, và do đó, những thứ phức tạp. Nhưng bản thân chúng thì đơn giản
Vì 87 có thể chấp nhận bất kỳ cuộc gọi nào, tại sao bạn lại sử dụng một lớp vì nó rõ ràng là phức tạp hơn?Có một số lý do để làm như vậy
Bây giờ câu hỏi lớn. Tại sao bạn lại sử dụng một số tính năng dễ bị lỗi tối nghĩa? Chà, thường thì bạn không
Python Guru Tim Peters Trường hợp sử dụng chính cho siêu dữ liệu là tạo API. Một ví dụ điển hình của điều này là Django ORM. Nó cho phép bạn xác định một cái gì đó như thế này 5Nhưng nếu bạn làm điều này 6Nó sẽ không trả về một đối tượng 20. Nó sẽ trả về một 81 và thậm chí có thể lấy nó trực tiếp từ cơ sở dữ liệuĐiều này là có thể bởi vì 22 định nghĩa 87 và nó sử dụng một số phép thuật sẽ biến 24 mà bạn vừa xác định bằng các câu lệnh đơn giản thành một móc nối phức tạp với trường cơ sở dữ liệuDjango làm cho thứ gì đó phức tạp trở nên đơn giản bằng cách hiển thị một API đơn giản và sử dụng siêu dữ liệu, tạo lại mã từ API này để thực hiện công việc thực sự đằng sau hậu trường Lời cuốiĐầu tiên, bạn biết rằng các lớp là các đối tượng có thể tạo các thể hiện Chà, trên thực tế, bản thân các lớp là các thể hiện. Của siêu dữ liệu 7Mọi thứ đều là một đối tượng trong Python và tất cả chúng đều là thể hiện của lớp hoặc thể hiện của siêu dữ liệu Ngoại trừ 6 6 thực sự là siêu dữ liệu của chính nó. Đây không phải là thứ bạn có thể sao chép bằng Python thuần túy và được thực hiện bằng cách gian lận một chút ở cấp độ triển khaiThứ hai, siêu dữ liệu phức tạp. Bạn có thể không muốn sử dụng chúng để thay đổi lớp rất đơn giản. Bạn có thể thay đổi các lớp bằng cách sử dụng hai kỹ thuật khác nhau Làm cách nào để đọc dữ liệu từ stdin trong Python?Có ba cách để đọc dữ liệu từ stdin trong Python. . hệ thống. tiêu chuẩn hàm tích hợp input() tập tin đầu vào. hàm đầu vào () Làm cách nào để đọc đối số trong Python?Ba loại phổ biến nhất là. sử dụng sys. argv. Sử dụng mô-đun getopt. . Nó là một danh sách các đối số dòng lệnh len(sys. argv) cung cấp số lượng đối số dòng lệnh hệ thống. argv[0] là tên của tập lệnh Python hiện tại Làm thế nào để đọc đầu vào từ stdin?Đọc đầu vào từ stdin trong Python bằng fileinput. đầu vào()
. Để sử dụng phương pháp này, trước tiên, chúng ta cần nhập fileinput
Làm cách nào để đọc nhiều dòng từ stdin trong Python?Nhập chuỗi của bạn vào nhiều dòng. Sau khi bạn hoàn thành việc cung cấp cho người dùng thông tin nhập trong nhiều dòng, hãy nhấn ctrl+d . Nó gửi tín hiệu EOF đến hệ thống của bạn. Nếu bạn là người dùng windows, hãy sử dụng ctrl+z thay vì ctrl+d. |