- Bài viết
- Screencasts
- Bài tập
- Khóa học
- PASTEBIN
- Quà tặng
- Đăng ký
- Đăng nhập
Đọc 2 phút • Python 3.7. • Python 3.7—3.10
Xem dưới dạng video
02:31
Đăng nhập vào tài khoản Python Barsels của bạn để lưu cài đặt screencast của bạn.
Vẫn chưa có tài khoản? Đăng ký tại đây.
Nhiều ngôn ngữ lập trình có một thứ gọi là ép buộc loại; Đó là nơi ngôn ngữ sẽ ngầm chuyển đổi một đối tượng sang loại đối tượng khác trong một số trường hợp nhất định.implicitly convert one object to another type of object in certain circumstances.
Python không có sự ép buộc loại.
Các loại và ép buộc số
Nếu chúng ta thêm một số nguyên [2
] và số điểm nổi [3.5
] trong Python, chúng ta sẽ lấy lại số điểm nổi:
>>> x = 2
>>> y = 3.5
>>> x + y
5.5
Python đã không ép buộc số nguyên vào số điểm nổi; Chúng tôi không có sự ép buộc loại trong Python. Thay vào đó, Python đã ủy thác cho các số lượng số nguyên và nổi và yêu cầu những đối tượng đó tự thêm vào.did not coerce the integer into a floating-point number; we don't have type coercion in Python. Instead, Python delegated to the integer and floating point numbers and asked those objects to add themselves together.
Bất cứ khi nào Python nhìn thấy x + y
, nó sẽ gọi phương thức __add__
vào x
chuyển y
cho nó:
>>> x.__add__[y]
NotImplemented
Trong trường hợp này, Python đã trở lại
>>> x.__add__[y]
NotImplemented
0 vì các số nguyên không biết cách thêm bản thân vào các số điểm nổi. Giá trị >>> x.__add__[y]
NotImplemented
0 đặc biệt này đã được trả về bằng phương thức ____ của đối tượng số nguyên để cho Python biết rằng x
[A >>> x.__add__[y]
NotImplemented
4] không biết cách hỗ trợ toán tử >>> x.__add__[y]
NotImplemented
5 với y
[A >>> x.__add__[y]
NotImplemented
7].Khi Python nhìn thấy giá trị
>>> x.__add__[y]
NotImplemented
0 đặc biệt này, sau đó, nó cố gắng hỏi y
liệu nó có biết cách tự thêm vào x
hay không. Để thực hiện Python này, hãy gọi phương thức >>> name = "Trey"
>>> x
2
>>> name + x
Traceback [most recent call last]:
File "", line 1, in
TypeError: can only concatenate str [not "int"] to str
1 trên y
, vượt qua nó x
:Điều này thêm số điểm nổi vào số nguyên từ phía bên phải của dấu cộng [
>>> name = "Trey"
>>> x
2
>>> name + x
Traceback [most recent call last]:
File "", line 1, in
TypeError: can only concatenate str [not "int"] to str
4 là "phải" trong >>> name = "Trey"
>>> x
2
>>> name + x
Traceback [most recent call last]:
File "", line 1, in
TypeError: can only concatenate str [not "int"] to str
1] và trả về >>> name = "Trey"
>>> x
2
>>> name + x
Traceback [most recent call last]:
File "", line 1, in
TypeError: can only concatenate str [not "int"] to str
6.Vì vậy, không có sự ép buộc loại nào được thực hiện ở đây, thay vào đó, một trong những loại đối tượng này biết cách hoạt động với loại đối tượng khác khi được sử dụng với toán tử cộng.one of these types of objects knows how to operate with the other type of object when used with the plus operator.
Đối tượng Python không hỗ trợ cưỡng chế loại
Một ví dụ của điều này là chuỗi.
Điều gì xảy ra nếu chúng ta cố gắng sử dụng toán tử
>>> x.__add__[y]
NotImplemented
5 giữa một chuỗi và một số trong Python?>>> name = "Trey"
>>> x
2
>>> name + x
Traceback [most recent call last]:
File "", line 1, in
TypeError: can only concatenate str [not "int"] to str
Nhiều ngôn ngữ lập trình sẽ làm cho chuỗi
>>> name = "Trey"
>>> x
2
>>> name + x
Traceback [most recent call last]:
File "", line 1, in
TypeError: can only concatenate str [not "int"] to str
8 ở trên: chúng sẽ kết hợp chuỗi đó và số đó, bằng cách ép số vào chuỗi. Trong Python, chúng tôi nhận được một lỗi thay thế.Lý do là các chuỗi trong Python không biết cách sử dụng toán tử cộng với các số và số trong Python không biết cách sử dụng toán tử cộng với chuỗi, điều đó có nghĩa là mã của chúng tôi không hoạt động.
Vì vậy, để thực sự hoàn thành những gì chúng tôi đang tìm kiếm, chúng tôi cần chuyển đổi rõ ràng số thành một chuỗi:we need to explicitly convert the number to a string:
>>> name + str[x]
'Trey2'
Chúng tôi đã tạo một chuỗi mới trong số đó 2
và chúng tôi kết nối nó vào chuỗi
>>> name + str[x]
'Trey2'
0 của chúng tôi để có được một chuỗi khác.Bản tóm tắt
Python không có sự ép buộc loại. Python không bao giờ ngầm chuyển đổi một đối tượng sang loại đối tượng khác.
Bạn sẽ luôn dựa vào ít nhất một trong các đối tượng bạn đang làm việc với việc biết cách hoạt động với loại đối tượng khác hoặc bạn sẽ phải chuyển đổi rõ ràng một trong các đối tượng của mình sang loại đối tượng khác.
Sê -ri: Nguyên tắc cơ bản bị bỏ qua
Những chủ đề này thường bị bỏ qua bởi các lập trình viên Python mới.
Để theo dõi tiến trình của bạn trên con đường chủ đề Python Barsels này, đăng nhập hoặc đăng ký.
✕
↑
Một mẹo Python mỗi tuần
Cần lấp đầy khoảng trống trong các kỹ năng trăn của bạn? Tôi gửi email hàng tuần được thiết kế để làm điều đó.fill-in gaps in your Python skills? I send weekly emails designed to do just that.
Xem dưới dạng video
02:31
Đăng nhập vào tài khoản Python Barsels của bạn để lưu cài đặt screencast của bạn.Vẫn chưa có tài khoản? Đăng ký tại đây. 03:49
Nhiều ngôn ngữ lập trình có một thứ gọi là ép buộc loại; Đó là nơi ngôn ngữ sẽ ngầm chuyển đổi một đối tượng sang loại đối tượng khác trong một số trường hợp nhất định.