Chuyển đổi kiểu dữ liệu trong ngôn ngữ Python

<p style="text-align: justify;">Trong b&agrave;i n&agrave;y, ch&uacute;ng ta sẽ t&igrave;m hiểu về c&aacute;ch thức chuyển đổi kiểu dữ liệu trong Python. Đ&acirc;y l&agrave; một kỹ thuật rất quan trọng cho ph&eacute;p ch&uacute;ng ta l&agrave;m việc một c&aacute;ch mềm dẻo v&agrave; hiệu quả tr&ecirc;n Python. </p> <p style="text-align: justify;">Qu&aacute; tr&igrave;nh chuyển đổi gi&aacute; trị của một kiểu dữ liệu (số nguy&ecirc;n, chuỗi k&yacute; tự,...) sang kiểu dữ liệu kh&aacute;c được gọi l&agrave; chuyển đổi kiểu dữ liệu. Python c&oacute; hai kiểu chuyển đổi.</p> <ol style="text-align: justify;"> <li>Chuyển đổi kiểu dữ liệu ngầm định.</li> <li>Chuyển đổi kiểu dữ liệu trực tiếp.</li> </ol> <h2 style="text-align: justify;">Chuyển đổi kiểu ngầm định</h2> <p style="text-align: justify;">Trong chuyển đổi kiểu ngầm định, Python sẽ tự động chuyển đổi một kiểu dữ liệu sang kiểu dữ liệu kh&aacute;c. Qu&aacute; tr&igrave;nh n&agrave;y kh&ocirc;ng cần bất kỳ sự can thiệp n&agrave;o của người lập tr&igrave;nh.</p> <p style="text-align: justify;">V&iacute; dụ 1:</p> <pre class="language-python"><code>a = 100 b = 100.5 c = a + b print(a) print(type(a)) print(b) print(type(b)) print(c) print(type(c))</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>100 &lt;class 'int'&gt; 100.5 &lt;class 'float'&gt; 200.5 &lt;class 'float'&gt;</code></pre> <p style="text-align: justify;">Trong chương tr&igrave;nh tr&ecirc;n:</p> <ul style="text-align: justify;"> <li style="text-align: justify;">Ch&uacute;ng ta đ&atilde; th&ecirc;m hai biến a (kiểu số nguy&ecirc;n) v&agrave; b (kiểu số thực), tiến h&agrave;nh cộng hai số n&agrave;y v&agrave; lưu trữ gi&aacute; trị trong biến c.</li> <li style="text-align: justify;">Trong đầu ra, ch&uacute;ng ta c&oacute; thể thấy kiểu dữ liệu của a l&agrave; số nguy&ecirc;n trong khi kiểu dữ liệu của b l&agrave; số thập ph&acirc;n.</li> <li style="text-align: justify;">Khi cộng hai gi&aacute; trị n&agrave;y, ch&uacute;ng ta c&oacute; thể thấy biến c c&oacute; kiểu dữ liệu float (số thực) v&igrave; Python lu&ocirc;n chuyển đổi kiểu dữ liệu nhỏ hơn sang kiểu dữ liệu lớn hơn để tr&aacute;nh mất m&aacute;t dữ liệu.</li> </ul> <p style="text-align: justify;">Tuy nhi&ecirc;n, điều n&agrave;y chỉ sử dụng được với kiểu dữ liệu số, c&ograve;n với kiểu dữ liệu chuỗi k&yacute; tự (str) th&igrave; điều n&agrave;y kh&ocirc;ng thực hiện được:</p> <p style="text-align: justify;">V&iacute; dụ 2:</p> <pre class="language-python"><code>a = 100 b = "200.5" print(type(a)) print(type(b)) print(a+b)</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>&lt;class 'int'&gt; &lt;class 'str'&gt; Traceback (most recent call last): File "main.py", line 5, in &lt;module&gt; print(a+b) TypeError: unsupported operand type(s) for +: 'int' and 'str'</code></pre> <p style="text-align: justify;">Trong chương tr&igrave;nh tr&ecirc;n, ch&uacute;ng ta đ&atilde; th&ecirc;m hai biến a v&agrave; b. Như ch&uacute;ng ta c&oacute; thể thấy từ đầu ra, ch&uacute;ng ta sẽ nhận một th&ocirc;ng b&aacute;o lỗi. Python kh&ocirc;ng thể sử dụng chuyển đổi ngầm định trong c&aacute;c điều kiện như vậy.</p> <p style="text-align: justify;">Tuy nhi&ecirc;n, Python c&oacute; một giải ph&aacute;p cho những loại t&igrave;nh huống như vậy được gọi l&agrave; chuyển đổi kiểu dữ liệu trực tiếp.</p> <h2 style="text-align: justify;">Chuyển đổi kiểu trực tiếp</h2> <p style="text-align: justify;">Trong chuyển đổi kiểu trực tiếp, người lập tr&igrave;nh chuyển đổi kiểu dữ liệu của một đối tượng th&agrave;nh kiểu dữ liệu bắt buộc. Ch&uacute;ng ta sử dụng c&aacute;c h&agrave;m được định nghĩa trước như <code class="EnlighterJSRAW" data-enlighter-language="generic">int(), float(), str(),complex()...</code> để thực hiện chuyển đổi kiểu trực tiếp.</p> <p style="text-align: justify;">Kiểu chuyển đổi n&agrave;y c&ograve;n được gọi l&agrave; &eacute;p kiểu v&igrave; người lập tr&igrave;nh &eacute;p chương tr&igrave;nh thay đổi kiểu dữ liệu của c&aacute;c đối tượng.</p> <p style="text-align: justify;"><strong><em>C&uacute; ph&aacute;p:</em></strong></p> <pre class="language-markup"><code>&lt;kiểu dữ liệu&gt;(biểu thức)</code></pre> <p style="text-align: justify;">Việc &eacute;p kiểu c&oacute; thể được thực hiện bằng c&aacute;ch g&aacute;n h&agrave;m kiểu dữ liệu cần thiết cho biểu thức.</p> <p style="text-align: justify;">V&iacute; dụ 3:</p> <pre class="language-python"><code>a = 100 b = float("200.5") print(type(a)) print(type(b)) print(a+b)</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>&lt;class 'int'&gt; &lt;class 'float'&gt; 300.5</code></pre> <p style="text-align: justify;">Trong chương tr&igrave;nh tr&ecirc;n ch&uacute;ng ta đ&atilde; thực hiện th&ecirc;m biến a v&agrave; b. Ch&uacute;ng ta đ&atilde; chuyển đổi biến b từ kiểu chuỗi (cao hơn) sang kiểu số thực dạng thập ph&acirc;n (thấp hơn) bằng c&aacute;ch sử dụng h&agrave;m float(). Sau khi chuyển đổi th&agrave;nh một gi&aacute; trị số thập ph&acirc;n, Python c&oacute; thể thực hiện ph&eacute;p cộng cho hai biến n&agrave;y. Kết quả ta nhận được l&agrave; một số thực dạng thập ph&acirc;n.</p> <p style="text-align: justify;">Việc chuyển đổi kiểu dữ liệu bắt buộc n&agrave;y rất cần thiết, đặc biệt khi ch&uacute;ng ta nhớ lại b&agrave;i về h&agrave;m input. Bất cứ thứ kiểu dữ liệu đầu v&agrave;o n&agrave;o, h&agrave;m input() sẽ chuyển đổi n&oacute; th&agrave;nh một chuỗi k&yacute; tự. nếu bạn nhập một gi&aacute; trị số nguy&ecirc;n, h&agrave;m input() sẽ chuyển n&oacute; th&agrave;nh một chuỗi k&yacute; tự c&oacute; chứa số nguy&ecirc;n đ&oacute;. Do đ&oacute;, để sử dụng được như số nguy&ecirc;n hoặc số thực...bạn cần thực hiện việc chuyển đổi trực tiếp n&oacute; th&agrave;nh dạng dữ liệu mong muốn bằng c&aacute;ch sử dụng t&iacute;nh năng &eacute;p kiểu.</p> <p style="text-align: justify;">V&iacute; dụ 4:</p> <pre class="language-python"><code>a = input('Nhập một số nguy&ecirc;n: ') b=15 print(a+b)</code></pre> <p style="text-align: justify;">Khi kh&ocirc;ng thực hiện &eacute;p kiểu, chương tr&igrave;nh sẽ mặc định hiểu kiểu dữ liệu đầu v&agrave;o của a l&agrave; kiểu chuỗi k&yacute; tự (str) v&agrave; chương tr&igrave;nh sẽ b&aacute;o lỗi:</p> <pre class="language-python"><code>Nhập một số nguy&ecirc;n: 30 Traceback (most recent call last): File "E:/Learning/IT/Python/ex2.py", line 3, in &lt;module&gt; print(a+b) TypeError: can only concatenate str (not "int") to str</code></pre> <p style="text-align: justify;">Để thực hiện được ph&eacute;p cộng như mong muốn, ch&uacute;ng ta cần thực hiện việc &eacute;p kiểu của a về dạng số nguy&ecirc;n (int):</p> <pre class="language-python"><code>a = int(input('Nhập một số nguy&ecirc;n: ')) b=15 print(a+b)</code></pre> <p style="text-align: justify;">Kết quả đầu ra:</p> <pre class="language-markup"><code>Nhập một số nguy&ecirc;n: 30 45</code></pre> <p style="text-align: justify;">Thao t&aacute;c tương tự c&oacute; thể được thực hiện bằng c&aacute;ch sử dụng h&agrave;m <code class="EnlighterJSRAW" data-enlighter-language="generic">eval()</code>.</p> <p>V&iacute; dụ 5:</p> <pre class="language-python"><code>print(eval('100 + 200'))</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>300</code></pre> <h2 style="text-align: justify;">Những điểm ch&iacute;nh cần nhớ về chuyển đổi kiểu dữ liệu trong Python</h2> <ul style="text-align: justify;"> <li style="text-align: justify;">Chuyển đổi kiểu l&agrave; việc chuyển đổi đối tượng từ kiểu dữ liệu n&agrave;y sang kiểu dữ liệu kh&aacute;c;</li> <li style="text-align: justify;">Chuyển đổi kiểu ngầm định được tr&igrave;nh th&ocirc;ng dịch Python thực hiện một c&aacute;ch tự động với một số kiểu dữ liệu;</li> <li style="text-align: justify;">Python sẽ đảm bảo việc tr&aacute;nh g&acirc;y ra mất m&aacute;t dữ liệu trong chuyển đổi kiểu ngầm định do đ&oacute; một số kiểu dữ liệu sẽ kh&ocirc;ng được tự động chuyển đổi m&agrave; cần thực hiện &eacute;p kiểu hoặc chuyển đổi trực tiếp;</li> <li style="text-align: justify;">Chuyển đổi kiểu dữ liệu trực tiếp c&ograve;n được gọi l&agrave; &eacute;p kiểu, kiểu dữ liệu của c&aacute;c đối tượng được chuyển đổi bằng c&aacute;ch sử dụng c&aacute;c h&agrave;m được t&iacute;ch hợp sẵn c&oacute; t&ecirc;n l&agrave; t&ecirc;n kiểu của dữ liệu v&iacute; dụ str, int, float, complex,...</li> <li style="text-align: justify;">Trong qu&aacute; tr&igrave;nh &eacute;p kiểu, việc mất m&aacute;t dữ liệu c&oacute; thể xảy ra khi người lập tr&igrave;nh &eacute;p buộc một gi&aacute; trị n&agrave;o đ&oacute; phải chuyển đổi sang một kiểu dữ liệu nhất định, khi đ&oacute; ch&uacute;ng ta cần tr&aacute;nh &eacute;p kiểu v&agrave; chỉ sử dụng khi thực sự bắt buộc v&agrave; cần thiết.</li> </ul> <p>Để th&agrave;nh thạo hơn c&aacute;c thao t&aacute;c về chuyển đổi kiểu dữ liệu, ch&uacute;ng ta h&atilde;y bắt đầu với một số b&agrave;i tập ở b&agrave;i tiếp theo.</p>