Chuỗi trong Python

Nắm vững kiến ​​thức cơ bản về phân tích dữ liệu với Python chỉ trong bốn giờ. Khóa học trực tuyến này sẽ giới thiệu giao diện Python và khám phá các gói phổ biến

Xem chi tiết Mũi tên phải

bắt đầu khóa học

Python trung cấp

Người bắt đầu

4 giờ

885. 8K

Nâng cao kỹ năng khoa học dữ liệu của bạn bằng cách tạo trực quan hóa bằng Matplotlib và thao tác với DataFrames bằng gấu trúc

Hãy nhớ Zen of Python và làm thế nào nên có “một cách rõ ràng để làm điều gì đó trong Python”?

Trong hướng dẫn này, bạn sẽ tìm hiểu bốn cách tiếp cận chính để định dạng chuỗi trong Python, cũng như điểm mạnh và điểm yếu của chúng. Bạn cũng sẽ nhận được một quy tắc ngón tay cái đơn giản về cách chọn phương pháp định dạng chuỗi cho mục đích chung tốt nhất trong các chương trình của riêng bạn

Hãy bắt đầu ngay, vì chúng ta có rất nhiều thứ để trang trải. Để có một ví dụ đồ chơi đơn giản để thử nghiệm, giả sử bạn có các biến [hoặc hằng số thực sự] sau đây để làm việc với

>>>

>>> errno = 50159747054
>>> name = 'Bob'

Dựa trên các biến này, bạn muốn tạo một chuỗi đầu ra chứa một thông báo lỗi đơn giản

>>>

'Hey Bob, there is a 0xbadc0ffee error!'

Lỗi đó thực sự có thể làm hỏng buổi sáng thứ Hai của nhà phát triển… Nhưng chúng tôi ở đây để thảo luận về định dạng chuỗi. Vì vậy, hãy bắt tay vào công việc

#1 Định dạng chuỗi “Kiểu cũ” [Toán tử %]

Các chuỗi trong Python có một phép toán tích hợp duy nhất có thể được truy cập bằng toán tử

'Hey Bob, there is a 0xbadc0ffee error!'
8. Điều này cho phép bạn thực hiện định dạng vị trí đơn giản rất dễ dàng. Nếu bạn đã từng làm việc với hàm kiểu
'Hey Bob, there is a 0xbadc0ffee error!'
9 trong C, bạn sẽ nhận ra cách thức hoạt động của hàm này ngay lập tức. Đây là một ví dụ đơn giản

>>>

>>> 'Hello, %s' % name
"Hello, Bob"

Tôi đang sử dụng công cụ xác định định dạng

>>> 'Hello, %s' % name
"Hello, Bob"
0 ở đây để cho Python biết vị trí thay thế giá trị của
>>> 'Hello, %s' % name
"Hello, Bob"
1, được biểu thị dưới dạng một chuỗi

Có sẵn các công cụ xác định định dạng khác cho phép bạn kiểm soát định dạng đầu ra. Ví dụ: có thể chuyển đổi các số thành ký hiệu thập lục phân hoặc thêm phần đệm khoảng trắng để tạo các bảng và báo cáo được định dạng đẹp mắt. [Xem Tài liệu Python. "Định dạng chuỗi kiểu printf". ]

Tại đây, bạn có thể sử dụng công cụ xác định định dạng

>>> 'Hello, %s' % name
"Hello, Bob"
2 để chuyển đổi giá trị
>>> 'Hello, %s' % name
"Hello, Bob"
3 thành chuỗi và biểu thị giá trị đó dưới dạng số thập lục phân

>>>

>>> '%x' % errno
'badc0ffee'

Cú pháp định dạng chuỗi “kiểu cũ” thay đổi một chút nếu bạn muốn thực hiện nhiều thay thế trong một chuỗi. Bởi vì toán tử

'Hey Bob, there is a 0xbadc0ffee error!'
8 chỉ nhận một đối số, nên bạn cần bọc vế phải trong một bộ, như vậy

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
1

Cũng có thể tham chiếu đến các phép thay thế biến theo tên trong chuỗi định dạng của bạn, nếu bạn chuyển một ánh xạ tới toán tử

'Hey Bob, there is a 0xbadc0ffee error!'
8

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
3

Điều này làm cho chuỗi định dạng của bạn dễ bảo trì hơn và dễ sửa đổi hơn trong tương lai. Bạn không phải lo lắng về việc đảm bảo thứ tự mà bạn chuyển vào các giá trị khớp với thứ tự mà các giá trị được tham chiếu trong chuỗi định dạng. Tất nhiên, nhược điểm là kỹ thuật này yêu cầu gõ nhiều hơn một chút

Tôi chắc rằng bạn đang thắc mắc tại sao định dạng kiểu

'Hey Bob, there is a 0xbadc0ffee error!'
9 này lại được gọi là định dạng chuỗi “kiểu cũ”. Về mặt kỹ thuật, nó đã được thay thế bằng định dạng “kiểu mới” trong Python 3, mà chúng ta sẽ nói về điều tiếp theo

Loại bỏ các quảng cáo

#2 Định dạng chuỗi “Kiểu mới” [______47]

Python 3 đã giới thiệu một cách mới để thực hiện định dạng chuỗi mà sau này cũng được chuyển ngược lại sang Python 2. 7. Định dạng chuỗi “kiểu mới” này loại bỏ cú pháp đặc biệt của toán tử

'Hey Bob, there is a 0xbadc0ffee error!'
8 và làm cho cú pháp định dạng chuỗi trở nên thông thường hơn. Định dạng hiện được xử lý bằng cách gọi
>>> 'Hello, %s' % name
"Hello, Bob"
9 trên một đối tượng chuỗi

Bạn có thể sử dụng

>>> '%x' % errno
'badc0ffee'
0 để thực hiện định dạng vị trí đơn giản, giống như bạn có thể làm với định dạng "kiểu cũ"

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
9

Hoặc, bạn có thể tham khảo các thay thế biến của mình theo tên và sử dụng chúng theo bất kỳ thứ tự nào bạn muốn. Đây là một tính năng khá mạnh mẽ vì nó cho phép sắp xếp lại thứ tự hiển thị mà không thay đổi các đối số được truyền cho

>>> '%x' % errno
'badc0ffee'
0

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
1

Điều này cũng cho thấy rằng cú pháp định dạng biến

>>> 'Hello, %s' % name
"Hello, Bob"
3 dưới dạng chuỗi thập lục phân đã thay đổi. Bây giờ bạn cần chuyển thông số định dạng bằng cách thêm hậu tố
>>> '%x' % errno
'badc0ffee'
3. Cú pháp chuỗi định dạng đã trở nên mạnh mẽ hơn mà không làm phức tạp các trường hợp sử dụng đơn giản hơn. Bạn nên đọc về ngôn ngữ nhỏ định dạng chuỗi này trong tài liệu Python

Trong Python 3, định dạng chuỗi “kiểu mới” này được ưu tiên hơn định dạng kiểu

'Hey Bob, there is a 0xbadc0ffee error!'
8. Mặc dù định dạng "kiểu cũ" đã không được nhấn mạnh, nhưng nó không bị phản đối. Nó vẫn được hỗ trợ trong các phiên bản Python mới nhất. Theo cuộc thảo luận này trên danh sách email của nhà phát triển Python và vấn đề này trên trình theo dõi lỗi của nhà phát triển Python, định dạng
'Hey Bob, there is a 0xbadc0ffee error!'
8 sẽ tồn tại trong một thời gian dài sắp tới

Tuy nhiên, tài liệu Python 3 chính thức không khuyến nghị chính xác định dạng “kiểu cũ” hoặc nói quá ưu ái về nó

“Các hoạt động định dạng được mô tả ở đây thể hiện nhiều điểm kỳ quặc dẫn đến một số lỗi phổ biến [chẳng hạn như không hiển thị chính xác các bộ dữ liệu và từ điển]. Sử dụng chuỗi ký tự được định dạng mới hơn hoặc str. format[] giao diện giúp tránh những lỗi này. Những lựa chọn thay thế này cũng cung cấp các cách tiếp cận mạnh mẽ, linh hoạt và có thể mở rộng hơn để định dạng văn bản. " [Nguồn]

Đây là lý do tại sao cá nhân tôi cố gắng gắn bó với

>>> 'Hello, %s' % name
"Hello, Bob"
7 để có mã mới trong tương lai. Bắt đầu với Python 3. 6, vẫn còn một cách khác để định dạng chuỗi của bạn. Tôi sẽ cho bạn biết tất cả về nó trong phần tiếp theo

#3 Nội suy chuỗi / Chuỗi f [Python 3. 6+]

Trăn 3. 6 đã thêm một cách tiếp cận định dạng chuỗi mới được gọi là chuỗi ký tự được định dạng hoặc “chuỗi f”. Cách định dạng chuỗi mới này cho phép bạn sử dụng các biểu thức Python được nhúng bên trong các hằng chuỗi. Đây là một ví dụ đơn giản để giúp bạn cảm nhận về tính năng này

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
7

Như bạn có thể thấy, điều này đặt trước hằng chuỗi bằng chữ cái “

>>> '%x' % errno
'badc0ffee'
7“—do đó có tên “f-strings. ” Cú pháp định dạng mới này rất mạnh. Bởi vì bạn có thể nhúng các biểu thức Python tùy ý, thậm chí bạn có thể thực hiện phép tính nội tuyến với nó. Kiểm tra ví dụ này

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
9

Các chuỗi ký tự được định dạng là một tính năng của trình phân tích cú pháp Python chuyển đổi các chuỗi f thành một chuỗi các hằng số và biểu thức chuỗi. Sau đó, họ tham gia để xây dựng chuỗi cuối cùng

Hãy tưởng tượng bạn có hàm

>>> '%x' % errno
'badc0ffee'
8 sau chứa chuỗi f

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
0

Khi bạn tháo rời hàm và kiểm tra những gì đang diễn ra đằng sau hậu trường, bạn sẽ thấy chuỗi f trong hàm được chuyển đổi thành một thứ tương tự như sau

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
1

Việc triển khai thực tế nhanh hơn một chút vì nó sử dụng opcode

>>> '%x' % errno
'badc0ffee'
9 để tối ưu hóa. Nhưng về mặt chức năng chúng giống nhau

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
2

Chuỗi ký tự cũng hỗ trợ cú pháp chuỗi định dạng hiện có của phương thức

'Hey Bob, there is a 0xbadc0ffee error!'
10. Điều đó cho phép bạn giải quyết các vấn đề về định dạng giống như chúng ta đã thảo luận trong hai phần trước

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
3

Chuỗi ký tự được định dạng mới của Python tương tự như Văn bản mẫu của JavaScript được thêm vào ES2015. Tôi nghĩ rằng chúng là một phần bổ sung khá hay cho Python và tôi đã bắt đầu sử dụng chúng trong công việc hàng ngày [Python 3] của mình. Bạn có thể tìm hiểu thêm về các chuỗi ký tự được định dạng trong hướng dẫn chuyên sâu về chuỗi f Python của chúng tôi

Loại bỏ các quảng cáo

#4 Chuỗi mẫu [Thư viện tiêu chuẩn]

Đây là một công cụ nữa để định dạng chuỗi trong Python. chuỗi mẫu. Đó là một cơ chế đơn giản hơn và kém mạnh mẽ hơn, nhưng trong một số trường hợp, đây có thể chính xác là thứ bạn đang tìm kiếm

Hãy cùng xem một ví dụ chào hỏi đơn giản

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
4

Bạn thấy ở đây rằng chúng ta cần nhập lớp

'Hey Bob, there is a 0xbadc0ffee error!'
11 từ mô-đun
'Hey Bob, there is a 0xbadc0ffee error!'
12 tích hợp sẵn của Python. Chuỗi mẫu không phải là một tính năng ngôn ngữ cốt lõi nhưng chúng được cung cấp bởi mô-đun
'Hey Bob, there is a 0xbadc0ffee error!'
12 trong thư viện tiêu chuẩn

Một điểm khác biệt nữa là các chuỗi mẫu không cho phép định dạng định dạng. Vì vậy, để ví dụ về chuỗi lỗi trước đó hoạt động, bạn cần chuyển đổi số lỗi

>>> 'Hello, %s' % name
"Hello, Bob"
3 thành chuỗi hex theo cách thủ công

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
5

Điều đó làm việc tuyệt vời

Vậy khi nào bạn nên sử dụng chuỗi mẫu trong chương trình Python của mình? . Do độ phức tạp giảm, chuỗi mẫu là lựa chọn an toàn hơn

Các ngôn ngữ nhỏ định dạng phức tạp hơn của các kỹ thuật định dạng chuỗi khác có thể tạo ra các lỗ hổng bảo mật cho chương trình của bạn. Ví dụ: các chuỗi định dạng có thể truy cập các biến tùy ý trong chương trình của bạn

Điều đó có nghĩa là, nếu một người dùng độc hại có thể cung cấp một chuỗi định dạng, họ có khả năng làm rò rỉ các khóa bí mật và thông tin nhạy cảm khác. Đây là một bằng chứng đơn giản về khái niệm về cách cuộc tấn công này có thể được sử dụng để chống lại mã của bạn

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
6

Xem cách kẻ tấn công giả định có thể trích xuất chuỗi bí mật của chúng tôi bằng cách truy cập từ điển

'Hey Bob, there is a 0xbadc0ffee error!'
15 từ một chuỗi định dạng độc hại? . Điều này làm cho chúng trở thành lựa chọn an toàn hơn nếu bạn đang xử lý các chuỗi định dạng được tạo từ đầu vào của người dùng

>>>

'Hey Bob, there is a 0xbadc0ffee error!'
7

Bạn nên sử dụng phương pháp định dạng chuỗi nào?

Tôi hoàn toàn hiểu rằng có quá nhiều sự lựa chọn về cách định dạng chuỗi của bạn trong Python có thể khiến bạn cảm thấy rất khó hiểu. Đây là một gợi ý tuyệt vời để tìm ra đồ họa thông tin sơ đồ tiện dụng này mà tôi đã tập hợp lại cho bạn

Quy tắc định dạng chuỗi Python [Hình ảnh. Nhấp để Tweet]

Lưu đồ này dựa trên quy tắc ngón tay cái mà tôi áp dụng khi viết Python

Quy tắc định dạng chuỗi Python của ngón tay cái. Nếu chuỗi định dạng của bạn do người dùng cung cấp, hãy sử dụng Chuỗi mẫu [#4] để tránh các sự cố bảo mật. Nếu không, hãy sử dụng Nội suy chuỗi ký tự/chuỗi f [#3] nếu bạn đang sử dụng Python 3. 6+ và “Phong cách mới”. định dạng [#2] nếu bạn không

Chìa khóa rút ra

  • Có lẽ đáng ngạc nhiên là có nhiều cách để xử lý định dạng chuỗi trong Python
  • Mỗi phương pháp đều có ưu nhược điểm riêng. Trường hợp sử dụng của bạn sẽ ảnh hưởng đến phương pháp bạn nên sử dụng
  • Nếu bạn gặp khó khăn khi quyết định sử dụng phương pháp định dạng chuỗi nào, hãy thử Quy tắc định dạng chuỗi Python của chúng tôi

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Mẹo định dạng chuỗi Python & các phương pháp hay nhất

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Dan Bader

Dan Bader là chủ sở hữu và tổng biên tập của Real Python và là nhà phát triển chính của realpython. nền tảng học tập com. Dan đã viết mã hơn 20 năm và có bằng thạc sĩ về khoa học máy tính

» Thông tin thêm về Đan

Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Aldren

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Chuỗi trong Python là gì?

Chuỗi Python là "bất biến", có nghĩa là chúng không thể thay đổi sau khi chúng được tạo [Chuỗi Java cũng sử dụng kiểu bất biến này]. Vì các chuỗi không thể thay đổi, nên chúng tôi xây dựng các chuỗi *new* khi chúng tôi biểu diễn các giá trị được tính toán.

Chuỗi trong Python với ví dụ là gì?

Chuỗi là Mảng . Tuy nhiên, Python không có kiểu dữ liệu ký tự, một ký tự đơn giản chỉ là một chuỗi có độ dài là 1. Dấu ngoặc vuông có thể được sử dụng để truy cập các phần tử của chuỗi. arrays of bytes representing unicode characters. However, Python does not have a character data type, a single character is simply a string with a length of 1. Square brackets can be used to access elements of the string.

Chuỗi là gì và ví dụ?

Chuỗi được dùng để lưu trữ văn bản/ký tự . Ví dụ: "Xin chào thế giới" là một chuỗi ký tự.

Làm cách nào để mã một chuỗi trong Python?

Để tạo một chuỗi, đặt chuỗi ký tự bên trong dấu nháy đơn, nháy kép hoặc nháy ba rồi gán chuỗi ký tự đó cho một biến. You can look into how variables work in Python in the Python variables tutorial. For example, you can assign a character 'a' to a variable single_quote_character .

Chủ Đề