Bạn có thể ghi đè lên các hàm Python tích hợp không?

Ngôn ngữ lập trình Python cực kỳ thân thiện với người mới bắt đầu nhờ cú pháp đơn giản giống tiếng Anh và các hàm tích hợp mạnh mẽ nhưng trực quan. Rất có thể là dòng mã Python đầu tiên của bạn trông giống như thế này

print["Hello World"]

Khi bạn cảm thấy thoải mái hơn với ngôn ngữ này, bạn bắt đầu tìm hiểu về các khả năng khác nhau của hàm

Hello World
0 tích hợp. Bạn càng có nhiều kinh nghiệm với tư cách là nhà phát triển Python, bạn càng khám phá được nhiều trường hợp cạnh tranh, hack, cú pháp kỳ lạ và các tính năng nâng cao

Trong bài viết này, tôi sẽ chỉ cho bạn những chức năng của hàm

Hello World
0, bắt đầu từ các chức năng cơ bản của nó và sau đó đề cập đến các trường hợp sử dụng ngày càng nâng cao hơn và các thủ thuật thú vị

In cơ bản [] Cách sử dụng

Cách cơ bản nhất để sử dụng câu lệnh

Hello World
0 và cũng là cách phổ biến nhất là ghi một thông báo [chuỗi hoặc đối tượng khác] vào bảng điều khiển

Và không có gì đáng ngạc nhiên, đầu ra của giao diện điều khiển sẽ như sau

Hello World

Bây giờ, hãy đi vào các tính năng ít được biết đến

Ký tự kết thúc và dấu phân cách

Hàm

Hello World
0 cũng cho phép bạn chỉ định một ký tự được thêm vào cuối chuỗi với tham số
Hello World
4. Ví dụ: nếu bạn muốn in chuỗi
Hello World
5 sau đối số chính, bạn có thể thực hiện việc này

Và điều đó sẽ xuất ra văn bản sau [không có dòng mới ở cuối]

________số 8

Nếu bạn muốn loại trừ dòng mới khỏi đầu ra để in mọi thứ trên cùng một dòng, bạn có thể đặt

Hello World
6 như thế này

Dấu phân cách là một tính năng chính khác của câu lệnh Python

Hello World
0. Để bắt đầu, bạn có thể in nhiều giá trị với cùng một lệnh gọi hàm bằng cách tách chúng bằng dấu phẩy

Hello World

Hàm

Hello World
0 ngầm đặt tham số của nó là
Hello World
9 để các đối số được truyền như thế này được phân tách bằng dấu cách khi in. Tuy nhiên, bạn có thể chỉ định chuỗi của riêng mình để phân tách từng đối số

Hello World
4

Đại diện đối tượng tùy chỉnh

Khi in các đối tượng phức tạp trong Python, bạn thường chỉ định cách chúng trông giống như một chuỗi thay vì dựa vào hành vi mô tả mặc định

Hello World
5

Vì vậy, khi bạn viết một lớp, bạn có thể ghi đè lên các phương thức dunder của

Hello World***
0 và
Hello World***
1 để cho Python biết cách xử lý đối tượng được in

Hello World
8

Tôi luôn thích đặt rõ ràng cả

Hello World***
0 và
Hello World***
1, nhưng bạn không cần

Ghi vào tệp bằng print[]

Bạn đã bao giờ nghĩ làm thế nào mà

Hello World
0 biết nơi xuất ra thông báo đã cho chưa?

Đoạn mã này tạo một tệp có tên là “đầu ra. txt” và viết “Hello World” vào đó. Điều này là có thể bởi vì

Hello World
0 gọi ngầm phương thức
Hello World***
8 của luồng bạn truyền vào, vì vậy điều này sẽ tương đương với

Hello World
6

Lưu ý điều này, bạn có thể tạo một bộ ghi thô sơ bằng cách sử dụng hàm

Hello World
0

Hoặc, tốt hơn nữa, bạn có thể ghi đè hàm

Hello World
0 để mở rộng các chức năng của nó bằng cách ghi nhật ký mọi câu lệnh in vào một tệp

Với phương pháp này, bạn có thể dễ dàng thực hiện mọi cuộc gọi

Hello World
0 trong tệp của mình và tự động ghi thông báo vào một tệp. Tuy nhiên, nếu bạn thích những thứ như vậy, tốt hơn hết bạn nên sử dụng mô-đun
Hello World
2

Thực thi mã bằng cách in ra tệp

Điều gì sẽ xảy ra nếu bạn có thể hack hàm

Hello World
0 để khiến nó thực thi mã tùy ý? . Với ý nghĩ đó, bạn có thể ghi đè hoặc ghi đè phương thức này bằng mã của riêng mình

Hello World
4

Ngoài ra, bạn có thể ghi đè lên

Hello World
6 để kích hoạt chức năng tải trọng cho bất kỳ lệnh gọi
Hello World
0 mặc định nào

Hello World
7

Như bạn có thể nhận thấy, Python gọi hàm

Hello World
8 [và do đó cũng gọi phương thức
Hello World***
8] hai lần, vì vậy bạn có thể phải xử lý việc đó

Kỹ thuật chèn mã này có thể không có nhiều trường hợp sử dụng trong thế giới thực, nhưng ai biết mọi người có thể nghĩ ra điều gì?

Chèn mã thư viện của bên thứ ba

Mặc dù việc chèn mã được hiển thị trước đó sẽ không gây ra bất kỳ tác hại nào, nhưng ví dụ tiếp theo có thể. Nếu bạn đã lập trình được một thời gian, bạn đã nghe nói việc sử dụng thư viện của bên thứ ba có thể đưa một số mối đe dọa bảo mật vào mã nguồn của bạn như thế nào.

Trong ví dụ này, tôi sẽ chỉ cho bạn cách nhà cung cấp có thể bao gồm mã độc được kích hoạt bởi hàm

Hello World
0

Và sau đó, bạn sẽ sử dụng lớp này trong các chương trình của mình

Ngoài ra, bạn có thể ghi đè toàn cầu

Hello World
6 trong mô-đun độc hại của mình để mọi lệnh gọi
Hello World
0 đều thực thi tải trọng của bạn

Bây giờ, bạn có thể lập luận rằng ai đó nhìn vào mã nguồn sẽ ngay lập tức nhận thấy những dòng mã độc hại này. Đôi khi tôi kiểm tra các thư viện tôi sử dụng bản thân mình. Thay vào đó, làm cách nào để ẩn mã độc bên trong tiện ích mở rộng C?

Các nhà phát triển Python ít có khả năng kiểm tra tệp nguồn C từ gói Python hơn là tệp Python. Ngoài ra, nếu bạn biên dịch tiện ích mở rộng cục bộ khi cài đặt, phần mềm chống vi-rút [nếu bạn sử dụng bất kỳ phần mềm nào] sẽ tin tưởng vào tệp nhị phân kết quả đến từ người dùng. Hoặc làm thế nào về mã obfuscation?

Thật buồn cười khi nhận ra các nhà phát triển phần mềm dễ bị tổn thương như thế nào. Và sau đó, bạn nhận được một trình bao đảo ngược, chạy keylogger với sự cho phép của người dùng để thu thập mật khẩu quản trị viên/root và cuối cùng chiếm lấy hệ thống

Mặc dù tôi sẽ không chỉ ra cách đạt được điều này một cách cụ thể, nhưng bạn có thể xem hướng dẫn này về cách viết phần mở rộng C cho Python

Tăng tốc cơ sở mã Python của bạn với tiện ích mở rộng C

Mang tốc độ của C vào các chương trình Python của bạn

lập trình tốt hơn. quán rượu

Phần kết luận

Tóm lại, hàm

Hello World
0 có nhiều khả năng hơn những gì mà các nhà phát triển Python thường biết, từ việc chỉ cần in ra bảng điều khiển đến ghi vào tệp để thực thi mã tùy ý. Xét cho cùng, hàm
Hello World
0 chỉ là một công cụ và như vậy, bạn có thể hack nó để đạt được các mục tiêu khác nhau

Cọ vẽ chỉ là một cây gậy có gắn lông. Tùy thuộc vào nghệ sĩ để sử dụng nó một cách sáng tạo

Và chúng ta có thể khẳng định rằng một nghệ sĩ với một cây cọ vẽ chỉ là một hacker với một cây gậy?

Tôi hy vọng bạn thích bài viết này. Nếu bạn biết về bất kỳ trường hợp sử dụng thực tế hoặc lý thuyết nào khác cho hàm

Hello World
0, hãy cho chúng tôi biết trong phần nhận xét

Cảm ơn vì đã đọc

Nếu bạn quan tâm đến việc làm cho mã Python của mình chuyên nghiệp hơn và dễ bảo trì hơn, hãy xem câu chuyện này

Bạn có thể ghi đè lên một đối tượng trong Python không?

Trong python, cái mà chúng ta gọi là biến thực sự là các nhãn đề cập đến các đối tượng. Vì vậy, nếu bạn muốn thay đổi một đối tượng không phải là bất biến [như danh sách], thì đối tượng đó sẽ hoạt động vượt trội trong Python. Tuy nhiên, nói chung, bạn không thể ghi đè lên các đối tượng trong Python . Tạo một đối tượng mới sẽ sử dụng bộ nhớ miễn phí.

Bạn có thể ghi đè lên các biến trong Python không?

Trong Python, chuỗi là bất biến. Bạn không thể ghi đè lên giá trị của các đối tượng không thể thay đổi . Tuy nhiên, bạn có thể gán lại biến. Nó không sửa đổi đối tượng chuỗi; .

Làm thế nào bạn có thể biết nếu một chức năng được xây dựng

Kiểm tra bằng chức năng tích hợp sẵn dir[] . của đối tượng được chỉ định trong đối số. Bạn có thể lấy danh sách tên của các đối tượng dựng sẵn, chẳng hạn như các hàm và hằng số dựng sẵn, bằng cách chuyển mô-đun nội trang hoặc __builtins__ tới dir[].

2 được xây dựng là gì

Các hàm tích hợp sẵn của Python .
chức năng in [ ]
loại [ ] chức năng
hàm đầu vào [ ]
hàm abs[ ]
hàm pow[]
hàm dir[ ]
hàm sắp xếp [ ]
hàm tối đa [ ]

Chủ Đề