Biểu diễn chuỗi đối tượng Python

00. 00 Trong bài học này, tôi sẽ nói với bạn về biểu diễn chuỗi thời gian trong Python. Đây là phần cuối của chuỗi liên tục mà tôi đã nói về biểu diễn đối tượng thời gian Python

00. 12 Chuỗi là thứ dễ đọc nhất đối với con người, nhưng chúng lại khó vận hành nhất đối với máy móc. Khi bạn tạo một biểu diễn chuỗi tốt, điều quan trọng là bạn cần bao gồm tất cả thông tin mà người dùng cần để tương tác với ứng dụng của bạn, nhưng chỉ những thông tin thực sự cần thiết

00. 29 Đó sẽ là trọng tâm của bài học này

00. 33 Có ba hàm hữu ích mà tôi muốn chỉ cho bạn để chuyển đổi chuỗi thời gian. Đầu tiên là time.asctime, chỉ đơn giản là nhận một đối tượng bộ thời gian hoặc struct_time tùy chọn và chỉ trả về dấu thời gian, đây là một loại chuỗi được định dạng cơ bản cho thời gian

00. 51 strftime[] [“thời gian định dạng chuỗi'], ngược lại với điều đó, là một cách linh hoạt hơn nhưng cũng tốn nhiều công sức hơn, để có được phiên bản chuỗi của thời gian, bởi vì bạn phải chuyển vào một chuỗi chỉ thị

01. 05 Nó trả về phiên bản chuỗi đã chỉ định dựa trên những gì bạn chuyển vào dưới dạng chỉ thị. time.strptime [“thời gian phân tích cú pháp chuỗi”] thì ngược lại, trong đó nó nhận vào một chuỗi đã được định dạng sẵn và lệnh được sử dụng để định dạng chuỗi đó, đồng thời nó trả về đối tượng struct_time dựa trên dữ liệu đó

01. 23 Nếu bạn chuyển không có chỉ thị nào, nó sẽ cho rằng chuỗi thời gian này ở định dạng dấu thời gian, vì vậy bạn có thể chuyển kết quả của time.asctime[], cho time.strptime mà không có bất kỳ chỉ thị nào, và bạn sẽ nhận được một đối tượng chính xác là struct_time từ đó

01. 37 Chúng ta hãy xem xét các chỉ thị này sâu hơn một chút. Các lệnh, còn được gọi là chuỗi định dạng, về cơ bản chỉ là ngôn ngữ của các ký tự đặc biệt cho phép bạn tạo các chuỗi định dạng, là sự kết hợp của các ký tự bình thường và các ký tự định dạng đặc biệt này, sau đó đưa ra đầu ra của một số định dạng ngày hoặc giờ

02. 00 Và vì vậy, ví dụ, nếu tôi vượt qua "%a, %B %d", tôi sẽ nhận được ngày trong tuần viết tắt cho struct_time0 nhỏ,

02. 09 Tôi nhận được tên tháng đầy đủ cho struct_time1 lớn, và sau đó tôi nhận được ngày thập phân không đệm cho struct_time2. Và tất nhiên, dấu phẩy ở đây chỉ ở nguyên một vị trí vì nó không phải là một ký tự đặc biệt, và điều tương tự cũng xảy ra với định dạng struct_time3 [“tháng/ngày/năm”] này, trong đó các dấu gạch chéo ở cùng một vị trí. Và sau đó, tất nhiên, dưới đây tất cả các từ và các chữ cái khác ở cùng một chỗ, ngoại trừ những thứ ngay sau dấu phần trăm

02. 35 Vì vậy, nó là một ngôn ngữ rất linh hoạt và nó hoạt động rất giống với cú pháp struct_time4 của C nếu bạn đã quen thuộc với nó. Nếu không, đó không phải là vấn đề lớn, chỉ cần biết rằng các ký tự định dạng này được thay thế trực tiếp bằng thứ mà chúng tương ứng với ngày mà bạn đang thực sự sử dụng, ngày hoặc giờ mà bạn đang thực sự sử dụng để tạo

02. 55 Vì vậy, bạn chuyển một chuỗi định dạng và bạn chuyển một đối tượng thời gian, sau đó các trường này được điền tự động dựa trên dữ liệu từ đối tượng thời gian bởi struct_time5 hoặc ngược lại, chúng được phân tích cú pháp bởi struct_time6, vì vậy rất thuận tiện

03. 10 Hãy chuyển sang REPL Python và xem cách nó hoạt động trong thực tế. Như thường lệ, hãy bắt đầu bằng cách nhập struct_time7

03. 18 Chức năng đầu tiên tôi muốn chỉ cho bạn là chức năng đơn giản nhất, chỉ là time.asctime. Như bạn sẽ nhớ từ các slide trước, nó cần một bộ thời gian tùy chọn, nhưng nếu bạn không chuyển bất kỳ thứ gì vào đó, nó sẽ chỉ sử dụng giờ địa phương hiện tại và chuyển đổi nó thành dấu thời gian, như bạn có thể thấy ở đây. Vì vậy, hôm nay là Thứ Hai, ngày 4 tháng 5, "Mùng 4 tháng 5 sẽ ở bên bạn" và bây giờ là 13. 40 giờ chiều với 13 giây trôi qua vào năm 2020

03. 45 Điều này mang lại cho bạn gần như tất cả thông tin bạn có thể muốn biết về ngày tháng trong một kiểu lướt qua ngày và giờ, nhưng nó thực sự không linh hoạt lắm, bởi vì nó không cho phép bạn bao gồm ít hơn hoặc nhiều hơn

04. 02 Vì vậy, ví dụ: trong một ứng dụng lịch, sẽ không có ý nghĩa gì nếu có một tháng viết tắt và bạn cũng có thể muốn bao gồm tùy chọn có thời gian 12 giờ cho người dùng ở các quốc gia không có xu hướng sử dụng 24

04. 16 Có thể bạn cũng muốn có ngày trong tuần hoặc thứ gì đó tương tự, vì vậy có rất nhiều thông tin mà bạn có thể thêm hoặc xóa khỏi điều này, điều mà struct_time9 không cho phép bạn làm

04. 25 Đó là nơi mà strftime[]0 xuất hiện, và như bạn nhớ, bạn cần chuyển vào một chuỗi định dạng. Tôi sẽ bắt đầu với một cái gì đó đơn giản, chỉ năm, tháng và ngày

04. 36 Nó cũng nhận một tham số thứ hai tùy chọn, và để cho bạn thấy rằng điều này trên thực tế là giống nhau, tôi sẽ chuyển tham số này một cách rõ ràng, mặc dù đây là điều mà nó sẽ mặc định. Và như bạn có thể thấy, tôi nhận được năm 2020, tháng là tháng thứ 5 và ngày là ngày thứ 4

04. 54 Nhưng có thể bạn muốn một biểu diễn chuỗi dài dòng hơn, phù hợp hơn cho ứng dụng dựa trên văn bản hơn, vì vậy bạn có thể nói điều gì đó như, “Trong năm,

05. 05 strftime[]1, đó là tháng mùa xuân ấm áp của strftime[]2

05. 15 vào ngày, struct_time2. ” Và tôi không cần truyền tham số này vào. Và thế là “Năm 2020, là một tháng xuân ấm áp 05 ngày 04. ” Nhưng điều này không hữu ích lắm, bởi vì rõ ràng là “tháng 05 mùa xuân ấm áp này,” điều đó không cho bạn biết nhiều, và vì vậy, điều bạn có thể muốn làm thay vào đó là thay thế điều này bằng số hoa struct_time1, sẽ cung cấp đầy đủ

05. 38 Và sau đó bạn có thể thêm bất kỳ thứ gì khác nhau vào đây. Bạn có thể nhập tất cả các loại ký tự khác nhau, nhưng tôi sẽ để bạn thử với điều đó vào thời gian của riêng bạn, đặc biệt bằng cách xem tài liệu mô-đun struct_time7, để tìm tất cả các ký tự định dạng khác nhau mà bạn có thể có để tạo thời gian của mình . Vì vậy, điều đó thật tốt và nó cho chúng tôi một cách để có tất cả, trừ những thông tin cần thiết, để truyền tải trong ứng dụng của bạn. Bây giờ, nếu bạn muốn đảo ngược điều này, bạn có thể sử dụng strftime[]6

06. 06 Và như tôi đã đề cập trong các trang trình bày một giây trước, nếu bạn không cung cấp cho nó bất kỳ đối số định dạng cụ thể nào, nó sẽ chỉ cho rằng chuỗi được truyền vào là dấu thời gian

06. 16 Và vì vậy tôi sẽ chỉ sử dụng time.asctime[] làm tham số chuỗi và sau đó tôi sẽ không chuyển vào tham số định dạng. Như bạn có thể thấy, điều này chỉ cho tôi thời gian hiện tại là một struct_time

06. 27 Vì vậy, đây là một cách siêu, siêu vòng vo để chỉ nói strftime[]9. Và như bạn có thể thấy, những thứ này hóa ra gần như giống hệt nhau và "gần như" chỉ là do tôi đã gọi chúng vào những thời điểm khác nhau

06. 37 Vì vậy, đó là cách bạn có thể phân tích dấu thời gian, và sau đó nếu bạn muốn phân tích thứ gì đó phức tạp hơn, bạn có thể làm điều gì đó như thế này, nơi bạn cung cấp cho nó một chuỗi, và giả sử như 2020, hãy thực hiện chuỗi mà tôi đã tạo . Vì vậy, strftime[]6 cực kỳ hữu ích, nhưng bạn cũng phải cẩn thận bởi vì, trong biểu diễn này, tôi không đưa ra giờ, phút, giây, ngày trong tuần, bất cứ thứ gì tương tự

07. 21 Ngày trong tuần được phân tích cú pháp, nhưng tôi không đưa ra giờ, phút, giây hay bất cứ thứ gì tương tự và tôi không chỉ định liệu thời gian có phải là tiết kiệm ánh sáng ban ngày hay không. Và vì vậy bạn thua, hoặc bạn không mất thông tin, nhưng có thông tin mà một struct_time có thể truyền tải rằng lần này việc đại diện không thực sự công bằng

07. 37 Và vì vậy bạn phải cẩn thận với điều đó khi làm việc với những thời điểm này. Tôi muốn cho bạn thấy một điều nữa ở đây, đó là cách struct_time5 và strftime[] phản ứng khác nhau với những thay đổi về thông tin ngôn ngữ. Hãy để tôi xóa màn hình thật nhanh

07. 53 Điều tôi muốn chỉ cho bạn là làm thế nào, nếu bạn thay đổi ngôn ngữ, nó có thể thay đổi đầu ra của các hàm định dạng chuỗi của bạn, nhưng không phải cho tất cả chúng. Vì vậy, điều tôi muốn làm đầu tiên, trước khi thay đổi ngôn ngữ của mình, là tôi sẽ chỉ cho bạn thấy, tất nhiên, tôi phải struct_time7, time.asctime, và sau đó là struct_time9

08. 14 Và những gì tôi sẽ làm là tôi sẽ chỉ sử dụng chỉ thị time.strptime0, chỉ thị này sẽ trả về một dấu thời gian dành riêng cho ngôn ngữ. Vì vậy, như bạn có thể thấy, cả hai đều có cùng định dạng chính xác, nhưng bây giờ nếu tôi thay đổi ngôn ngữ của mình, vì vậy tôi sẽ nói time.strptime1 và tôi phải vượt qua một danh mục, vì vậy nó sẽ là time.strptime2, vì vậy thời gian

08. 51 Và sau đó, những gì tôi có thể làm là tôi sẽ cho bạn thấy, trước tiên, ________ 19, và như bạn có thể thấy, điều này hoàn toàn không thay đổi so với ngôn ngữ khác, đó là tiếng Anh Hoa Kỳ. Đó là ngôn ngữ đầu tiên của tôi. Tôi đã không thực sự in nó ra, nhưng đó là những gì nó được. Đó là time.strptime6

09. 10 Vì vậy, điều đó không thay đổi, struct_time9, nhưng nếu tôi làm struct_time9 và tôi thông qua nó trong chỉ thị time.strptime0 này, thì điều đó thực sự thay đổi để phản ánh sự khác biệt về chính tả từ tiếng Đức. Vì vậy, "Mai" trái ngược với "May" và "Montag", trái ngược với "Thứ Hai" và chúng có các chữ viết tắt khác nhau trong các ngôn ngữ khác nhau

09. 33 Vì vậy, bạn có thể thấy rằng strftime[] thực sự nhạy cảm với dữ liệu cụ thể theo ngôn ngữ. Và bạn cũng có thể thấy điều này, nếu tôi làm điều gì đó giống như, tôi sẽ nói, hãy làm tên đầy đủ của tháng. Và như bạn có thể thấy, đó là struct_time1, vì vậy struct_time9 nhạy cảm với ngôn ngữ

09. 51 Đó là điều thực sự quan trọng cần lưu ý khi bạn sử dụng các chức năng này. bạn muốn luôn đảm bảo rằng bạn biết điều gì sẽ thay đổi dựa trên ngôn ngữ của người dùng của bạn. Với ý nghĩ đó, trong bài học tiếp theo, tôi sẽ chỉ lướt qua một vài hàm nhỏ nhanh chóng mà mô-đun thời gian cung cấp để hoạt động với hiệu suất trong Python

10. 11 Đó sẽ là đo lường hiệu suất bằng bộ đếm thời gian chính xác, sau đó cũng cho phép thực thi luồng hiện tại của bạn ở chế độ ngủ và các lợi ích khác nhau có thể có

Biểu diễn chuỗi của đối tượng Python là gì?

Python thực sự có hai biểu diễn chuỗi khác nhau cho tất cả các đối tượng. Một biểu diễn chuỗi là biểu diễn mà con người có thể đọc được và biểu diễn kia là biểu diễn mà lập trình viên có thể đọc được . Phương thức __repr__ chỉ định biểu diễn chuỗi có thể đọc được của lập trình viên. Nếu bạn chỉ muốn một biểu diễn chuỗi, thì đây là biểu diễn để chỉ định.

Biểu diễn chuỗi của một đối tượng là gì?

Chuỗi được biểu diễn dưới dạng đối tượng trong Java . Theo đó, một đối tượng chứa các giá trị được lưu trữ trong các biến thể hiện bên trong đối tượng. Một đối tượng cũng chứa các phần mã hoạt động trên đối tượng. Các phần mã này được gọi là các phương thức.

Đâu là sự khác biệt giữa __ repr __ và __ str __ ?

Bây giờ, nếu bạn xem tài liệu chính thức về python - __str__ được sử dụng để tìm biểu diễn chuỗi "không chính thức" [có thể đọc được] của một đối tượng trong khi __repr__ được sử dụng để tìm biểu diễn chuỗi "chính thức" của một đối tượng

[

Thay vào đó, Python sử dụng các số âm để dễ dàng truy cập vào các ký tự ở cuối chuỗi. s[-1] là ký tự cuối cùng 'o', s[-2] là 'l' ký tự tiếp theo cuối cùng , v.v. . Số chỉ số âm đếm ngược từ cuối chuỗi. s[-1] là 'o' -- ký tự cuối cùng [đầu tiên từ cuối]

Chủ Đề