Hướng dẫn what is r and f in python? - r và f trong python là gì?
Tôi đã bắt đầu học Python lần đầu tiên trong một khóa học tăng tốc về khoa học dữ liệu vài tuần trước và chúng tôi đã được giới thiệu sớm với F-String. Show
Mã đơn giản:
đầu ra chuỗi "Có một số người gọi tôi là Tim ..." Thông qua việc duyệt các gói khác nhau vì tò mò, tôi đã tìm thấy các trang như thế này chi tiết một hàm mà bạn có thể gọi trong matplotlib để hiển thị các biểu thức giống như $ \ latex $ trong các hình ảnh được tạo. Trong mã ví dụ, họ sử dụng một cái gì đó tương tự như F-String nhưng với R thay vì F.
Biểu đồ kết quả (trống rỗng) có một tiêu đề sử dụng văn bản đã được định dạng tương tự như cách người ta mong đợi bằng cách sử dụng Mathjax hoặc $ \ latex $ với ký tự Hy Lạp Alpha và Beta nhân vật Hy Lạp. Câu hỏi của tôi là như sau: Điều gì chính xác là một chuỗi R và làm thế nào nó so sánh với một chuỗi F? Các chuỗi R có được sử dụng đặc biệt cho MathText và Usetex của Matplotlib không? Ngoài các chuỗi F và dây R, có bất kỳ biến thể chuỗi tương tự đáng chú ý nào khác mà tôi nên làm quen với hoặc được biết đến không?
trừu tượngCơ sở lý luận Không sử dụng Globals () hoặc người dân địa phương () Sự chỉ rõ >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'." Trình tự thoát Cơ sở lý luậnKhông sử dụng Globals () hoặc người dân địa phương () Sự chỉ rõ >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure' Trình tự thoát >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File " Mã tương đương >>> 'error: %s' % (msg,) "error: ('disk failure', 32)" Đánh giá biểu hiện Định dạng xác định >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.' Dây nối >>> 'The value is {}.'.format(value) 'The value is 80.' Xử lý lỗi Dẫn đầu và dấu vết trắng trong biểu cảm bị bỏ qua Thứ tự đánh giá biểu thức Thảo luận >>> value = 1234 >>> f'input={value:#06x}' 'input=0x04d2' Thảo luận Python-Ideas 0Không sử dụng Globals () hoặc người dân địa phương ()Sự chỉ rõ 1Điều này trả về một lỗi vì trình biên dịch đã không thêm tham chiếu đến X bên trong đóng. Bạn cần thêm một tham chiếu theo cách thủ công cho X để hoạt động này: 2Ngoài ra, sử dụng locals () hoặc globals () giới thiệu rò rỉ thông tin. Một thói quen được gọi là quyền truy cập vào người gọi locals () hoặc globals () có quyền truy cập vào nhiều thông tin hơn cần thiết để thực hiện nội suy chuỗi. Guido đã tuyên bố [5] rằng bất kỳ giải pháp nào cho phép nội suy chuỗi tốt hơn sẽ không sử dụng locals () hoặc globals () trong việc thực hiện nó. . Sự chỉ rõTrong mã nguồn, các chuỗi F là các chữ cái được đặt trước bằng chữ ’f, hoặc f f. Ở mọi nơi mà PEP này sử dụng ‘F,’ F, cũng có thể được sử dụng. ‘F, có thể được kết hợp với‘ R, hoặc ‘R, theo một trong hai thứ tự, để tạo ra các chữ F-String thô. ‘F, có thể không được kết hợp với‘ B,: PEP này không đề xuất thêm các chuỗi F nhị phân. ‘F, có thể không được kết hợp với‘ U. Khi mã hóa các tệp nguồn, F-Strings sử dụng các quy tắc giống như các chuỗi bình thường, chuỗi thô, chuỗi nhị phân và chuỗi được trích dẫn ba. Nghĩa là, chuỗi phải kết thúc với cùng một ký tự mà nó đã bắt đầu: nếu nó bắt đầu bằng một trích dẫn, nó phải kết thúc bằng một trích dẫn duy nhất, v.v. Điều này ngụ ý rằng bất kỳ mã nào hiện đang quét mã Python tìm kiếm Để nhận ra chuỗi F (tất nhiên là phân tích cú pháp trong một chuỗi F là một vấn đề khác). Sau khi mã hóa, các chuỗi F được phân tích cú pháp vào các chuỗi và biểu thức theo nghĩa đen. Biểu thức xuất hiện trong niềng răng xoăn >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.'3 và >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.'4. Trong khi quét chuỗi cho các biểu thức, bất kỳ niềng răng gấp đôi >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.'5 hoặc >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.'6 bên trong các phần theo nghĩa đen của chuỗi F đều được thay thế bằng nẹp đơn tương ứng. Niềng răng mở theo nghĩa đen nhân đôi không biểu thị sự khởi đầu của một biểu thức. Một nẹp xoăn đóng một lần >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.'4 trong phần theo nghĩa đen của chuỗi là một lỗi: niềng răng xoăn đóng theo nghĩa đen phải được nhân đôi >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.'6 để thể hiện một nẹp đóng. Các phần của chuỗi F bên ngoài niềng răng là chuỗi theo nghĩa đen. Những phần theo nghĩa đen sau đó được giải mã. Đối với các chuỗi F không phải raw, điều này bao gồm việc chuyển đổi các đường thoát hiểm, chẳng hạn như >>> value = 4 * 20 >>> 'The value is {value}.'.format(value=value) 'The value is 80.'9, >>> 'The value is {}.'.format(value) 'The value is 80.'0, >>> 'The value is {}.'.format(value) 'The value is 80.'1, >>> 'The value is {}.'.format(value) 'The value is 80.'2, >>> 'The value is {}.'.format(value) 'The value is 80.'3, >>> 'The value is {}.'.format(value) 'The value is 80.'4 và được đặt tên là các ký tự Unicode >>> 'The value is {}.'.format(value) 'The value is 80.'5 vào các ký tự Unicode liên quan của chúng [6]. Backslashes có thể không xuất hiện ở bất cứ đâu trong các biểu thức. Nhận xét, sử dụng ký tự >>> 'The value is {}.'.format(value) 'The value is 80.'6, không được phép bên trong một biểu thức. Theo mỗi biểu thức, một chuyển đổi loại tùy chọn có thể được chỉ định. Các chuyển đổi được phép là >>> 'The value is {}.'.format(value) 'The value is 80.'7, >>> 'The value is {}.'.format(value) 'The value is 80.'8 hoặc >>> 'The value is {}.'.format(value) 'The value is 80.'9. Chúng được đối xử giống như trong >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8: >>> 'The value is {}.'.format(value) 'The value is 80.'7 gọi >>> f'The value is {value}.' 'The value is 80.'2 trên biểu thức, >>> 'The value is {}.'.format(value) 'The value is 80.'8 gọi >>> f'The value is {value}.' 'The value is 80.'4 trên biểu thức và >>> 'The value is {}.'.format(value) 'The value is 80.'9 gọi >>> f'The value is {value}.' 'The value is 80.'6 trên biểu thức. Các chuyển đổi này được áp dụng trước cuộc gọi đến >>> f'The value is {value}.' 'The value is 80.'7. Lý do duy nhất để sử dụng >>> 'The value is {}.'.format(value) 'The value is 80.'7 là nếu bạn muốn chỉ định một định dạng định dạng áp dụng cho >>> f'The value is {value}.' 'The value is 80.'9, chứ không phải loại biểu thức. Các chuỗi F sử dụng cùng một ngôn ngữ nhỏ định dạng định dạng là >>> value = 1234 >>> f'input={value:#06x}' 'input=0x04d2'0. Tương tự như >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8, các nhà xác định định dạng tùy chọn có thể được bao gồm bên trong chuỗi F, được tách ra khỏi biểu thức (hoặc chuyển đổi loại, nếu được chỉ định) bởi một đại tràng. Nếu một định dạng định dạng không được cung cấp, một chuỗi trống được sử dụng. Vì vậy, một chuỗi F trông giống như: 3Biểu thức sau đó được định dạng bằng giao thức >>> 'error: %s' % (msg,) "error: ('disk failure', 32)"8, sử dụng trình xác định định dạng làm đối số. Giá trị kết quả được sử dụng khi xây dựng giá trị của chuỗi F. Lưu ý rằng >>> 'error: %s' % (msg,) "error: ('disk failure', 32)"0 không được gọi trực tiếp trên mỗi giá trị. Mã thực tế sử dụng tương đương với >>> value = 1234 >>> f'input={value:#06x}' 'input=0x04d2'4 hoặc >>> value = 1234 >>> f'input={value:#06x}' 'input=0x04d2'5. Xem tài liệu của chức năng >>> f'The value is {value}.' 'The value is 80.'7 tích hợp để biết thêm chi tiết. Biểu thức không thể chứa >>> value = 1234 >>> f'input={value:#06x}' 'input=0x04d2'7 hoặc >>> value = 1234 >>> f'input={value:#06x}' 'input=0x04d2'8 bên ngoài chuỗi hoặc dấu ngoặc đơn, ngoặc hoặc niềng răng. Ngoại lệ là toán tử >>> value = 1234 >>> f'input={value:#06x}' 'input=0x04d2'9 được phép là một trường hợp đặc biệt. Trình tự thoátBackslashes có thể không xuất hiện bên trong các phần biểu thức của chuỗi F, vì vậy bạn không thể sử dụng chúng, ví dụ, để thoát khỏi các trích dẫn bên trong chuỗi F: 4Bạn có thể sử dụng một loại báo giá khác bên trong biểu thức: 5Backslash thoát có thể xuất hiện bên trong các phần chuỗi của chuỗi F. Lưu ý rằng cách chính xác để có một nẹp theo nghĩa đen xuất hiện trong giá trị chuỗi kết quả là tăng gấp đôi nẹp: 6Giống như tất cả các chuỗi thô trong Python, không có quá trình xử lý thoát nào được thực hiện cho các dây F thô: 7Do các quy tắc mã thông báo chuỗi Python sườn, chuỗi F 00 không hợp lệ. Tokenizer phân tích cú pháp này là 3 mã thông báo: 01, 02 và 03. Cũng giống như các chuỗi thông thường, điều này không thể được sửa bằng cách sử dụng các chuỗi thô. Có một số cách chính xác để viết chuỗi F này: với một ký tự trích dẫn khác:Hoặc với ba trích dẫn: Mã tương đươngMã chính xác được sử dụng để thực hiện các chuỗi F không được chỉ định. Tuy nhiên, người ta đảm bảo rằng bất kỳ giá trị nhúng nào được chuyển đổi thành một chuỗi sẽ sử dụng phương thức giá trị đó ____ ____58. Đây là cơ chế tương tự mà >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8 sử dụng để chuyển đổi các giá trị thành chuỗi. Ví dụ: mã này: 8Có thể được đánh giá là: 9Đánh giá biểu hiệnCác biểu thức được trích xuất từ chuỗi được đánh giá trong bối cảnh xuất hiện chuỗi F. Điều này có nghĩa là biểu thức có quyền truy cập đầy đủ vào các biến cục bộ và toàn cầu. Bất kỳ biểu thức Python hợp lệ nào cũng có thể được sử dụng, bao gồm các cuộc gọi chức năng và phương thức. Bởi vì các chuỗi F được đánh giá trong đó chuỗi xuất hiện trong mã nguồn, không có biểu thức bổ sung có sẵn với các chuỗi F. Cũng không có mối quan tâm bảo mật bổ sung nào: Bạn cũng có thể vừa viết cùng một biểu thức, không phải bên trong chuỗi F: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."0 Tương đương với: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."1 Các biểu thức được phân tích cú pháp tương đương với 06 [7].Lưu ý rằng vì biểu thức được bao quanh bởi dấu ngoặc đơn trước khi đánh giá, các biểu thức có thể chứa các dòng mới. Ví dụ: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."2 Định dạng xác địnhĐịnh dạng định dạng cũng có thể chứa các biểu thức được đánh giá. Điều này cho phép mã như: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."3 Khi các biểu thức trong một định dạng định dạng được đánh giá (nếu cần), các định dạng định dạng không được giải thích bởi trình đánh giá chuỗi F. Giống như trong >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8, chúng chỉ được truyền vào phương pháp >>> 'error: %s' % (msg,) "error: ('disk failure', 32)"0 của đối tượng được định dạng. Dây nốiCác chuỗi F liền kề và chuỗi thông thường được nối. Các chuỗi thông thường được nối tại thời điểm biên dịch, và các chuỗi F được nối với nhau trong thời gian chạy. Ví dụ: biểu thức: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."4 mang lại giá trị: Mặc dù phương pháp chính xác của thời gian chạy này không được xác định, mã trên có thể đánh giá thành: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."5 Mỗi chuỗi F được đánh giá hoàn toàn trước khi được nối với các chuỗi F liền kề. Điều đó có nghĩa là điều này: Là lỗi cú pháp, vì chuỗi F đầu tiên không chứa nẹp đóng. Xử lý lỗiLỗi thời gian biên dịch hoặc thời gian chạy có thể xảy ra khi xử lý chuỗi F. Lỗi thời gian biên dịch được giới hạn trong các lỗi có thể được phát hiện khi quét chuỗi F. Những lỗi này đều tăng 09.Niềng răng chưa từng có: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."6 Biểu thức không hợp lệ: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."7 Lỗi thời gian chạy xảy ra khi đánh giá các biểu thức bên trong chuỗi F. Lưu ý rằng một chuỗi F có thể được đánh giá nhiều lần và đôi khi hoạt động và gây ra lỗi vào những thời điểm khác: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."8 or: >>> import datetime >>> name = 'Fred' >>> age = 50 >>> anniversary = datetime.date(1991, 10, 12) >>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.' 'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.' >>> f'He said his name is {name!r}.' "He said his name is 'Fred'."9 Dẫn đầu và dấu vết trắng trong biểu cảm bị bỏ quaĐể dễ dàng đọc, dẫn đầu và dấu vết trắng trong biểu thức bị bỏ qua. Đây là sản phẩm phụ của việc bao quanh biểu thức trong ngoặc đơn trước khi đánh giá. Thứ tự đánh giá biểu thứcCác biểu thức trong một chuỗi F được đánh giá theo thứ tự từ trái sang phải. Điều này chỉ có thể phát hiện được nếu các biểu thức có tác dụng phụ: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'0 Thảo luậnThảo luận Python-IdeasHầu hết các cuộc thảo luận về Python-Ideas [8] tập trung vào ba vấn đề:
Cách biểu thị các chuỗi FBởi vì trình biên dịch phải được tham gia vào việc đánh giá các biểu thức có trong các chuỗi được nội suy, phải có một số cách để biểu thị cho trình biên dịch mà các chuỗi nên được đánh giá. PEP này đã chọn một ký tự 10 hàng đầu trước chuỗi theo nghĩa đen. Điều này tương tự như cách các tiền tố 11 và 12 thay đổi ý nghĩa của chính chuỗi, tại thời điểm biên dịch. Các tiền tố khác đã được đề xuất, chẳng hạn như 13. Không có tùy chọn nào có vẻ tốt hơn lựa chọn khác, vì vậy 10 đã được chọn.Một tùy chọn khác là hỗ trợ các chức năng đặc biệt, được biết đến với trình biên dịch, chẳng hạn như 15. Điều này có vẻ như là quá nhiều phép thuật cho Python: không chỉ có cơ hội va chạm với các định danh hiện có, tác giả PEP cảm thấy rằng nó tốt hơn là biểu thị phép thuật với ký tự tiền tố chuỗi.Cách chỉ định vị trí của các biểu thức trong chuỗi FPEP này hỗ trợ cùng một cú pháp với >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8 để phân biệt văn bản thay thế bên trong các chuỗi: các biểu thức được chứa bên trong niềng răng. Có những tùy chọn khác được đề xuất, chẳng hạn như ________ 49, 18 hoặc 19.Mặc dù 18 không nghi ngờ gì đã quen thuộc hơn với các kịch bản shell và người dùng của một số ngôn ngữ khác, nhưng trong Python >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8 được sử dụng rất nhiều. Một tìm kiếm nhanh các thư viện tiêu chuẩn Python, chỉ hiển thị một số ít sử dụng >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "9, nhưng hàng trăm cách sử dụng của >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8. Một giải pháp thay thế được đề xuất khác là có văn bản thay thế giữa 24 và 25 hoặc giữa 24 và 27. Mặc dù cú pháp này có thể sẽ được mong muốn nếu tất cả các chữ viết để hỗ trợ nội suy, nhưng PEP này chỉ hỗ trợ các chuỗi đã được đánh dấu bằng 10 hàng đầu. Do đó, PEP đang sử dụng niềng răng không được trang bị để biểu thị văn bản được thay thế, để tận dụng sự quen thuộc của người dùng cuối với >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8. Hỗ trợ các biểu thức Python đầy đủNhiều người trong cuộc thảo luận Python-Ideas muốn hỗ trợ cho chỉ số nhận dạng duy nhất hoặc một tập hợp con giới hạn của các biểu thức python (chẳng hạn như tập hợp con được hỗ trợ bởi >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8). PEP này hỗ trợ các biểu thức python đầy đủ bên trong niềng răng. Nếu không có biểu thức đầy đủ, một số cách sử dụng mong muốn sẽ là cồng kềnh. Ví dụ: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'1 sẽ trở thành: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'2 Mặc dù điều đó đúng là các biểu thức rất xấu xí có thể được đưa vào các chuỗi F, nhưng PEP này đảm nhận vị trí mà việc sử dụng đó nên được giải quyết trong một đánh giá linter hoặc mã: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'3 Hỗ trợ tương tự trong các ngôn ngữ khácWikipedia có một cuộc thảo luận tốt về nội suy chuỗi trong các ngôn ngữ lập trình khác [9]. Tính năng này được triển khai bằng nhiều ngôn ngữ, với nhiều cú pháp và hạn chế khác nhau. Sự khác biệt giữa các biểu thức F-String và Str.FormatCó một sự khác biệt nhỏ giữa các biểu thức giới hạn được phép trong >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8 và các biểu thức đầy đủ cho phép bên trong các chuỗi F. Sự khác biệt là cách tra cứu chỉ mục được thực hiện. Trong >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8, các giá trị chỉ mục không giống như số được chuyển đổi thành chuỗi: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'4 Lưu ý rằng giá trị chỉ mục được chuyển đổi thành chuỗi 33 khi nó được tra cứu trong Dict.Tuy nhiên, trong các chuỗi F, bạn sẽ cần sử dụng một nghĩa đen cho giá trị 33:Sự khác biệt này là bắt buộc vì nếu không, bạn sẽ không thể sử dụng các biến làm giá trị chỉ mục: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'5 Xem [10] để thảo luận thêm. Chính quan sát này đã dẫn đến các biểu thức Python đầy đủ được hỗ trợ trong các chuỗi F. Hơn nữa, các biểu thức hạn chế mà >>> msg = ('disk failure', 32) >>> 'error: %s' % msg Traceback (most recent call last): File "8 hiểu không cần phải là biểu thức python hợp lệ. Ví dụ: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'6 Vì lý do này, trình phân tích cú pháp biểu thức str.format () không phù hợp để sử dụng khi thực hiện các chuỗi F. Triple-Roted-StringTriple Trích dẫn dây F được cho phép. Những chuỗi này được phân tích cú pháp giống như chuỗi ba lần bình thường. Sau khi phân tích cú pháp và giải mã, logic chuỗi F thông thường được áp dụng và >>> 'error: %s' % (msg,) "error: ('disk failure', 32)"0 được gọi trên mỗi giá trị. Law F-StringRAW và FS FRING có thể được kết hợp. Ví dụ, chúng có thể được sử dụng để xây dựng các biểu thức thông thường: >>> msg = 'disk failure' >>> 'error: %s' % msg 'error: disk failure'7 Ngoài ra, dây F thô có thể được kết hợp với các chuỗi được trích xuất ba. Không có dây F nhị phânVì lý do tương tự mà chúng tôi không hỗ trợ 37, bạn không thể kết hợp 10 với các chữ 11 theo nghĩa đen. Vấn đề chính là phương thức đối tượng >>> 'error: %s' % (msg,) "error: ('disk failure', 32)"0 có thể trả về dữ liệu Unicode không tương thích với chuỗi byte. Các chuỗi F nhị phân trước tiên sẽ yêu cầu một giải pháp cho 37. Ý tưởng này đã được đề xuất trong quá khứ, gần đây nhất là trong PEP 461. Các cuộc thảo luận về một tính năng như vậy thường gợi ý
Cả hai đều vẫn là tùy chọn trong tương lai, nếu chức năng đó là mong muốn. >>> msg = ('disk failure', 32)
>>> 'error: %s' % msg
Traceback (most recent call last):
File " |