Các kiểu dữ liệu phức tạp hợp lệ trong Python là gì?

Như với hầu hết các ngôn ngữ lập trình, Larch có một số loại dữ liệu tích hợp để thể hiện các loại dữ liệu khác nhau. Chúng bao gồm các số nguyên thông thường, số dấu phẩy động và chuỗi phổ biến cho nhiều ngôn ngữ lập trình. Một tên biến có thể chứa bất kỳ loại nào trong số này [hoặc bất kỳ loại phức tạp nào khác mà chúng ta sẽ đề cập sau] và không cần phải khai báo trước hoặc thay đổi giá trị hoặc loại của nó. Vài ví dụ

larch> a = 2
larch> b = 2.50

Các phép toán '+', '-', '*' và '/' bình thường hoạt động trên các giá trị số để cộng, trừ, nhân và chia. Lũy thừa được biểu thị bằng '**' và mô đun bằng '%'. Larch sử dụng ký hiệu '/' cho phép chia hoặc 'phép chia thực', đưa ra giá trị dấu phẩy động nếu cần, ngay cả khi tử số và mẫu số là số nguyên và '//' cho phép chia số nguyên hoặc 'sàn'. Như vậy

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1

Một số toán tử khác được hỗ trợ để thao tác bit

Các chuỗi ký tự được tạo bằng dấu ngoặc đơn hoặc dấu ngoặc kép đóng phù hợp

larch> s = 'a string'
larch> s2 = "a different string"

Một chuỗi có thể bao gồm ký tự ‘\n’ [đối với dòng mới] hoặc ‘\t’ [đối với tab] và một số ký tự điều khiển khác, như trong nhiều ngôn ngữ. Ký tự gạch chéo ngược ‘' biểu thị các chuỗi thoát này, bao gồm dòng mới dưới dạng tab cũng như một số chuỗi thoát tiêu chuẩn khác. Bản thân ký tự trích dẫn và ký tự dấu gạch chéo ngược có thể là dấu gạch chéo ngược. Do đó, để có được một ký tự gạch chéo ngược thực sự trong chuỗi, bạn sẽ phải sử dụng '\' và để có được một trích dẫn, người ta có thể nói

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'

Người ta cũng có thể sử dụng cái gọi là chuỗi thô, trong đó ký tự dấu gạch chéo ngược không được sử dụng cho các chuỗi thoát

larch s5 = r'A string with backslash \n but not a newline!'

Đối với các chuỗi có thể kéo dài trên hơn 1 dòng, cú pháp "trích dẫn ba lần" đặc biệt được hỗ trợ, do đó

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party

Điều quan trọng cần lưu ý là việc trộn các loại dữ liệu trong một phép tính có thể có hoặc không có ý nghĩa đối với Larch. Ví dụ, một chuỗi không thể được thêm vào một số nguyên

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1

nhưng bạn có thể thêm một số nguyên và một số float

larch> 1 + 2.5
3.5

và bạn có thể nhân một chuỗi với một số nguyên

________số 8

Larch có các biến đặc biệt cho các hoạt động boolean hoặc logic.

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
0 và
larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
1. Chúng tương ứng bằng 1 và 0, nhưng chủ yếu được sử dụng trong các phép toán logic, bao gồm các toán tử 'và', 'hoặc' và 'không', cũng như các toán tử so sánh '>', '>=', '< . =', và 'là'. Lưu ý rằng 'là' thể hiện danh tính, đây là phép thử nghiêm ngặt hơn một chút so với '==' [bình đẳng] và hữu ích nhất cho các đối tượng phức tạp

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
1

Giá trị đặc biệt

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
2 được sử dụng làm giá trị null trong Larch và Python

Cuối cùng, Larch biết về số phức, sử dụng chữ 'j' để chỉ phần ảo của số

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
0

Để rõ ràng, tất cả các kiểu dữ liệu nguyên thủy này trong Larch đều được lấy từ các đối tượng Python tương ứng, vì vậy bạn có thể tham khảo tài liệu về python để biết thêm chi tiết và ghi chú

8. 2. 2. Đối tượng và Nhóm¶

Vì Larch được xây dựng dựa trên Python, một ngôn ngữ lập trình hướng đối tượng, nên tất cả các đại lượng hoặc biến được đặt tên trong Larch đều là các đối tượng python. Do đó, hầu hết các biến Larch đều có chức năng tích hợp bắt nguồn từ các đối tượng python của chúng. Mặc dù Larch không cung cấp cách để người dùng xác định các đối tượng mới của riêng họ, nhưng các đối tượng được tạo bằng Python có thể được Larch sử dụng, để các tiện ích mở rộng và plugin cho Larch có thể xác định các loại đối tượng mới

8. 2. 2. 1. Đối tượng¶

Tất cả các biến Larch đều là các đối tượng Python và do đó có một kiểu được xác định rõ ràng và một tập hợp các thuộc tính và phương thức đi kèm với nó. Để xem loại Python của bất kỳ biến nào, hãy sử dụng hàm

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
3 dựng sẵn

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
1

Các thuộc tính và phương thức khác nhau đối với từng loại đối tượng, nhưng tất cả đều được truy cập theo cùng một cách – với dấu ‘. ’ [dấu chấm] ngăn cách tên biến hoặc giá trị với tên của thuộc tính hoặc phương thức. Như trên, dữ liệu phức tạp có các thuộc tính

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
4 và
larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
5 cho phần thực và phần ảo, có thể được truy cập

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
2

Các phương thức là các thuộc tính của một đối tượng có thể gọi được như một hàm. Vì chúng thuộc về một đối tượng nên chúng biết về dữ liệu và các thuộc tính khác trong đối tượng đó. Để gọi một phương thức hoặc hàm, chỉ cần thêm dấu ngoặc đơn '[]' sau tên của nó, có thể với các đối số bên trong dấu ngoặc đơn để thay đổi hành vi của phương thức. Ví dụ, một số phức có phương thức

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
6

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
3

Lưu ý rằng chỉ sử dụng

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
7 sẽ trả về chính phương thức đó, trong khi sử dụng
larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
8 thực sự chạy phương thức. Thật công bằng khi đặt câu hỏi tại sao
larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
4 và
larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
5 là các thuộc tính đơn giản của đối tượng số phức trong khi
larch> 1 + 2.5
3.5
1 là một phương thức phải được gọi. Nói chung, ý tưởng là các thuộc tính đơn giản là dữ liệu tĩnh thuộc về đối tượng, trong khi phương thức là thứ phải được tính toán. Tuy nhiên, các quy tắc này không cố định và đôi khi vấn đề là phải biết thuộc tính nào là phương thức có thể gọi được

Nhiều kiểu dữ liệu có thuộc tính và phương thức riêng. Như chúng ta sẽ thấy bên dưới, các chuỗi có nhiều thuộc tính và phương thức, cũng như các đối tượng vùng chứa [danh sách, mảng, bộ, từ điển] mà chúng ta sẽ thấy ngay sau đây

Để có danh sách tất cả các thuộc tính và phương thức của một đối tượng, hãy sử dụng hàm dựng sẵn

larch> 1 + 2.5
3.5
2

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
4

Một lần nữa, chúng ta sẽ thấy các thuộc tính của các đối tượng bên dưới, khi chúng ta xem xét các loại dữ liệu thú vị hơn hoặc bạn có thể xem tài liệu Python

8. 2. 2. 2. Nhóm¶

Mặc dù tất cả các giá trị trong Larch đều là các đối tượng Python, nhưng Larch tổ chức dữ liệu thành các Nhóm, đây là một khái niệm chính đối với Larch. Nhóm chỉ đơn giản là một vùng chứa được đặt tên cho các biến thuộc bất kỳ loại nào, kể cả các Nhóm khác. Vì Larch không trực tiếp cung cấp cách xác định đối tượng của riêng bạn nên Nhóm là cách tổ chức dữ liệu của bạn trong Larch. Việc tổ chức dữ liệu với các Nhóm lồng nhau cung cấp cấu trúc phân cấp cho tất cả dữ liệu trong phiên Larch, giống như một thư mục tệp. Mỗi biến Larch thuộc về một Nhóm và luôn có thể được truy cập bằng tên Nhóm đầy đủ của nó. Nhóm cấp cao nhất được gọi là '_main'. Bạn sẽ hiếm khi cần sử dụng thực tế đó, nhưng nó ở đó

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
5

Bạn có thể tạo các nhóm của riêng mình và thêm dữ liệu vào nhóm bằng hàm

larch> 1 + 2.5
3.5
3 dựng sẵn

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
6

Bạn có thể thêm các biến vào Nhóm 'g' của mình bằng cách sử dụng '. ’ [dấu chấm] để tách nhóm cha khỏi đối tượng con

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
7

[

larch> 1 + 2.5
3.5
4 là một hàm dựng sẵn để tạo một mảng số]. Từ cuộc thảo luận ở trên về các đối tượng, '. ' Ký hiệu [dấu chấm] ngụ ý rằng 'x', 'nhãn' và 'dữ liệu' là các thuộc tính của 'g' – điều đó hoàn toàn chính xác

Nhóm có 1 thuộc tính dựng sẵn –

larch> 1 + 2.5
3.5
5 giữ tên cho Nhóm. Nếu không được chỉ định, nó sẽ được đặt thành giá trị thập lục phân. Các nhóm không có thuộc tính hoặc phương thức dựng sẵn nào khác. Vì chúng là đối tượng nên bạn có thể sử dụng hàm
larch> 1 + 2.5
3.5
2 như trên

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
8

[Lưu ý rằng thứ tự hiển thị có thể thay đổi]. Bạn cũng có thể sử dụng hàm dựng sẵn

larch> 1 + 2.5
3.5
7 để có cái nhìn đầy đủ hơn về nội dung của nhóm

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
9

[‘0x1b8cbfb0’ là tên mặc định, được thảo luận chi tiết hơn bên dưới trong Nhận dạng đối tượng, sao chép và bình đẳng so với. danh tính ]. Hàm

larch> 1 + 2.5
3.5
3 có thể nhận các đối số của tên và giá trị thuộc tính, do đó nhóm này có thể được tạo bằng một lệnh gọi.

larch> s = 'a string'
larch> s2 = "a different string"
0

Nhiều hàm Larch hoạt động trên các nhóm, trả về các nhóm, mong đợi các nhóm làm đối số nhất định hoặc lấy đối số 'nhóm' để ghi dữ liệu vào. Ví dụ: các hàm tích hợp đọc dữ liệu từ tệp bên ngoài có thể sẽ sắp xếp dữ liệu đó thành một nhóm và nhóm đó có thể giống như

larch> s = 'a string'
larch> s2 = "a different string"
1

8. 2. 2. 3. Nhóm đường tùng tích hợp¶

Larch bắt đầu với một số nhóm, tổ chức chức năng dựng sẵn thành các nhóm khác nhau. Nhóm '_main' cấp cao nhất bắt đầu với 3 nhóm con nguyên tắc, '_builtin', '_sys' và '_math' cho chức năng cơ bản. Đối với hầu hết tất cả các ứng dụng của Larch, một số nhóm bổ sung được tạo cho chức năng cụ thể hơn được tạo khi khởi động bởi các plugin của Larch. Các nhóm bắt đầu nguyên tắc được mô tả trong Bảng các nhóm đường tùng cơ bản

Bảng nhóm đường tùng cơ bản. Các nhóm này được liệt kê theo thứ tự cách chúng sẽ được tìm kiếm các chức năng và dữ liệu

Tên nhóm

sự miêu tả

_được xây dựng trong

các hàm dựng sẵn cơ bản

_môn Toán

hàm toán học và mảng

_sys

biến toàn hệ thống đường tùng

_io

chức năng nhập/xuất tập tin

_máy vẽ

chức năng vẽ đồ thị và hiển thị hình ảnh

_xafs

Các chức năng dành riêng cho XAFS

Các chức năng trong '_builtin' hầu hết được kế thừa từ các chức năng tích hợp sẵn của Python. Các hàm trong ‘_math’ hầu hết được kế thừa từ Numpy và chứa các phép toán và xử lý mảng cơ bản

8. 2. 2. 4. Cách Larch tìm tên biến¶

Với một số nhóm dựng sẵn và thậm chí nhiều nhóm hơn được tạo để lưu trữ dữ liệu của riêng bạn sẽ được xử lý, Larch kết thúc bằng một hệ thống phân cấp dữ liệu phức tạp. Điều này đưa ra một cách tốt để tổ chức dữ liệu, nhưng nó cũng dẫn đến một câu hỏi về cách tìm tên biến. Tất nhiên, bạn luôn có thể truy cập một hàm hoặc đối tượng dữ liệu bằng tên đầy đủ của nó

larch> s = 'a string'
larch> s2 = "a different string"
2

nhưng điều đó quá khó để sử dụng, và tất nhiên, người ta cần phải có khả năng làm

larch> s = 'a string'
larch> s2 = "a different string"
3

và yêu cầu Larch biết rằng khi bạn nói

larch> 1 + 2.5
3.5
9, ý bạn là
larch> 'string' * 2
'stringstring'
0. Cách hoạt động của việc tra cứu tên này là Larch giữ một danh sách các nhóm mà nó sẽ tìm kiếm tên. Danh sách này được giữ trong biến
larch> 'string' * 2
'stringstring'
1 và có thể được xem và sửa đổi trong phiên Lach. Khi khởi động, danh sách này có các nhóm được liệt kê trong Bảng các nhóm đường tùng cơ bản , theo thứ tự được hiển thị. Để rõ ràng, nếu có một biến tên là
larch> 'string' * 2
'stringstring'
2 và một
larch> 'string' * 2
'stringstring'
3, gõ 'something' sẽ giải quyết thành
larch> 'string' * 2
'stringstring'
2 và để truy cập
larch> 'string' * 2
'stringstring'
3, bạn sẽ phải cung cấp tên đầy đủ. Đối với các hàm và biến dựng sẵn, các xung đột như vậy không có nhiều khả năng xảy ra, nhưng chúng có thể xảy ra nếu bạn đọc trong nhiều tập dữ liệu dưới dạng nhóm và muốn truy cập nội dung của các nhóm khác nhau.

8. 2. 3. Cấu trúc dữ liệu phức tạp hơn. Danh sách, Mảng, Từ điển¶

Larch có nhiều kiểu dữ liệu hơn được xây dựng dựa trên các kiểu nguyên thủy ở trên. Chúng thường hữu ích để lưu trữ các bộ sưu tập dữ liệu và có thể được xây dựng để xây dựng các cấu trúc rất phức tạp. Tất cả đều được mô tả chi tiết tại đây. Nhưng vì tất cả những thứ này đều có liên quan chặt chẽ với các đối tượng Python, nên bạn có thể tìm thêm thông tin chi tiết trong tài liệu Python tiêu chuẩn

8. 2. 3. 1. Danh sách¶

Một danh sách là một chuỗi có thứ tự của các loại dữ liệu khác. Chúng không đồng nhất – chúng có thể được tạo thành từ dữ liệu với các loại khác nhau. Một danh sách được xây dựng bằng cách sử dụng dấu ngoặc, với dấu phẩy để phân tách cá nhân

larch> s = 'a string'
larch> s2 = "a different string"
4

Một danh sách có thể chứa một danh sách là một trong các phần tử của nó

larch> s = 'a string'
larch> s2 = "a different string"
5

Bạn có thể truy cập các phần tử của danh sách bằng dấu ngoặc và chỉ số nguyên [bắt đầu từ 0]

larch> s = 'a string'
larch> s2 = "a different string"
6

Danh sách có thể thay đổi – chúng có thể được thay đổi, tại chỗ. Để làm điều này, bạn có thể thay thế một phần tử trong danh sách

larch> s = 'a string'
larch> s2 = "a different string"
7

Như trên, danh sách là các đối tượng python và do đó đi kèm với các phương thức để tương tác với chúng. Ví dụ: bạn cũng có thể thay đổi danh sách bằng cách thêm vào danh sách đó bằng phương thức 'chắp thêm'

larch> s = 'a string'
larch> s2 = "a different string"
8

Tất cả các danh sách sẽ có phương thức 'chắp thêm', cũng như một số danh sách khác

  • append – thêm phần tử vào cuối danh sách

  • đếm – để trả về số lần một phần tử cụ thể xuất hiện trong danh sách

  • mở rộng – để mở rộng một danh sách với một danh sách khác

  • chỉ mục - để tìm sự xuất hiện đầu tiên của một phần tử

  • chèn – để chèn một phần tử vào một vị trí cụ thể

  • pop – để xóa và trả về phần tử cuối cùng [hoặc chỉ mục được chỉ định khác]

  • xóa - xóa một phần tử cụ thể

  • đảo ngược – đảo ngược thứ tự của các phần tử

  • sort – sắp xếp các phần tử

Lưu ý rằng các phương thức thay đổi danh sách thực hiện ngay TẠI NƠI và trả về

larch> '1' + 1
Runtime Error:
cannot concatenate 'str' and 'int' objects

     '1' + 1
2. Nghĩa là, để sắp xếp một danh sách [theo mặc định theo bảng chữ cái hoặc với chức năng so sánh tùy chỉnh tùy chọn được truyền vào], hãy làm điều này

larch> s = 'a string'
larch> s2 = "a different string"
9

nhưng không phải cái này

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
0

vì điều đó sẽ sắp xếp danh sách, sau đó vui vẻ đặt 'my_list' thành Không có

Bạn có thể lấy độ dài của danh sách bằng hàm

larch> 'string' * 2
'stringstring'
7 tích hợp và kiểm tra xem một phần tử cụ thể có trong danh sách hay không bằng toán tử in

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
1

Bạn có thể truy cập vào phần lựa chọn phụ của các thành phần bằng một lát cắt, đưa ra các chỉ số bắt đầu và kết thúc giữa các dấu ngoặc, được phân tách bằng dấu hai chấm. Tất nhiên, việc đếm cho một lát bắt đầu từ 0. Nó cũng loại trừ chỉ số cuối cùng

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
2

Bạn có thể đếm ngược và sử dụng '-1' là một cách thuận tiện để lấy phần tử cuối cùng của danh sách. Bạn cũng có thể thêm một giá trị thứ ba tùy chọn vào lát cho một bước

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
3

Thuộc tính quan trọng cuối cùng của danh sách và của việc tạo biến cơ bản trong Larch [và Python] có liên quan đến cuộc thảo luận ở trên về việc tạo và gán biến. Ở đó chúng tôi đã nói rằng 'tạo một biến'

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
4

cách tốt nhất là tạo ra một giá trị [ở đây, danh sách chữ “['a', 'b', …, 'j']”] và sau đó gán tên 'my_list' để trỏ đến giá trị đó. Đây là lý do tại sao chúng tôi tạo ra sự khác biệt đó. Nếu bây giờ bạn nói

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
5

biến 'your_list' hiện trỏ đến cùng một giá trị – cùng một danh sách. Đó là, nó không tạo một bản sao của danh sách. Vì danh sách có thể thay đổi nên việc thay đổi 'your_list' cũng sẽ thay đổi 'my_list'

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
6

Bạn có thể tạo một bản sao của danh sách bằng cách chọn một lát cắt đầy đủ

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
7

Lưu ý rằng hành vi này không xảy ra đối với các loại dữ liệu bất biến, bao gồm các loại dữ liệu nguyên thủy hơn như số nguyên, số float và chuỗi. Điều này thực chất là do bạn không thể gán cho từng phần của các kiểu dữ liệu đó mà chỉ được đặt toàn bộ giá trị của nó

Như mọi khi, hãy tham khảo tài liệu Python để biết thêm chi tiết

8. 2. 3. 2. Tuple¶

Giống như danh sách, bộ dữ liệu là chuỗi các đối tượng không đồng nhất. Sự khác biệt về nguyên tắc là các bộ dữ liệu là bất biến - chúng không thể thay đổi được sau khi chúng được tạo. Thay vào đó, các bộ dữ liệu là một vùng chứa dữ liệu được sắp xếp đơn giản. Cú pháp cho các bộ dữ liệu sử dụng các giá trị được phân tách bằng dấu phẩy bên trong [tùy chọn. ] dấu ngoặc thay cho dấu ngoặc

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
8

Giống như danh sách, bộ dữ liệu có thể được lập chỉ mục và cắt lát

larch> s3 = 'A string with a backslash-> \\ '
larch> s4 = 'Bob\'s string'
9

Do tính bất biến của chúng, các bộ dữ liệu chỉ có một số phương thức ['count' và 'index' với chức năng tương tự như đối với danh sách]

Mặc dù bộ dữ liệu có vẻ kém mạnh mẽ hơn so với danh sách và chúng thực sự được sử dụng rộng rãi với Larch và Python. Ngoài ví dụ trên sử dụng một bộ giá trị cho một cấu trúc dữ liệu ngắn, cố định, nhiều hàm sẽ trả về một bộ giá trị. Đối với trường hợp này, tính đơn giản và tính bất biến của các bộ dữ liệu là một điểm mạnh bởi vì, một khi được tạo, một bộ dữ liệu có kích thước và thứ tự có thể dự đoán được đối với các phần tử của nó, điều này không đúng với danh sách. Nghĩa là, nếu một thủ tục thông thường [mà chúng ta sẽ thấy nhiều hơn ở bên dưới] trả về hai giá trị dưới dạng một bộ

larch s5 = r'A string with backslash \n but not a newline!'
0

Vì bộ trả về có cấu trúc cố định, bạn cũng có thể gán nó trực tiếp cho một tập hợp [số lượng chính xác] biến

larch s5 = r'A string with backslash \n but not a newline!'
1

8. 2. 3. 3. Cái nhìn thứ hai về Chuỗi¶

Mặc dù đã được thảo luận trước đó trong các kiểu dữ liệu cơ bản, nhưng các chuỗi cũng có liên quan chặt chẽ với các danh sách – tốt nhất chúng được coi là một chuỗi các ký tự. Giống như các bộ dữ liệu, các chuỗi thực sự là bất biến, trong đó bạn không thể thay đổi một phần của chuỗi, thay vào đó bạn phải tạo một chuỗi mới. Chuỗi có thể được lập chỉ mục và cắt lát như với danh sách và bộ dữ liệu

larch s5 = r'A string with backslash \n but not a newline!'
2

Các chuỗi có nhiều phương thức - thực tế là hơn 30 phương thức trong số đó. Để chuyển đổi một chuỗi thành chữ thường, hãy sử dụng phương thức

larch> 'string' * 2
'stringstring'
8 của nó, v.v.

larch s5 = r'A string with backslash \n but not a newline!'
3

Điều này cũng cho thấy rằng các phương thức được liên kết với chính các chuỗi - ngay cả các chuỗi ký tự và chỉ đơn giản là với các tên biến

Các chuỗi có thể được chia thành các từ bằng phương thức

larch> 'string' * 2
'stringstring'
9, theo mặc định sẽ chia một chuỗi trên khoảng trắng, nhưng có thể lấy một đối số để thay đổi ký tự [hoặc chuỗi con] sẽ sử dụng để tách chuỗi

larch s5 = r'A string with backslash \n but not a newline!'
4

Như trên, điều này thực sự chỉ chạm vào phần nổi của tảng băng chức năng chuỗi và nên tham khảo tài liệu Python tiêu chuẩn để biết thêm thông tin

8. 2. 3. 4. Mảng¶

Trong khi danh sách là chuỗi các đối tượng không đồng nhất có thể phát triển và thu nhỏ, đồng thời bao gồm các cấu trúc được lồng sâu, chúng không phù hợp để chứa dữ liệu số. Mảng là các chuỗi có cùng kiểu dữ liệu nguyên thủy và do đó gần giống với mảng trong C hoặc Fortran hơn nhiều. Điều này làm cho chúng phù hợp hơn nhiều cho các phép tính số và do đó cực kỳ quan trọng trong Larch. Có nhiều cách để tạo mảng, bao gồm hàm

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
10 dựng sẵn sẽ cố gắng chuyển đổi danh sách hoặc bộ số thành Mảng. Bạn cũng có thể sử dụng hàm dựng sẵn
larch> 1 + 2.5
3.5
4 để tạo một chuỗi các chỉ số được sắp xếp theo thứ tự [[1, 2, 3, …]] hoặc một trong số các phương thức khác để tạo mảng

Mảng rất quan trọng để xử lý dữ liệu số nên phần tiếp theo sẽ dành cho chúng

8. 2. 3. 5. Từ điển¶

Cấu trúc dữ liệu cơ bản cuối cùng của chúng tôi là từ điển, là vùng chứa ánh xạ các giá trị tới các khóa. Điều này đôi khi được gọi là mảng băm hoặc mảng kết hợp. Giống như một danh sách, một từ điển chứa nhiều giá trị không đồng nhất và có thể được thay đổi tại chỗ. Không giống như danh sách, các phần tử của từ điển không có thứ tự được đảm bảo và không được chọn theo chỉ mục số nguyên và không thể chọn nhiều giá trị bằng một lát cắt. Thay vào đó, các phần tử của từ điển được truy cập bằng khóa, thường là một chuỗi, nhưng cũng có thể là một số nguyên hoặc số dấu phẩy động, hoặc thậm chí là một bộ hoặc một số đối tượng khác – bất kỳ đối tượng bất biến nào cũng có thể được sử dụng. Từ điển được phân cách bằng dấu ngoặc nhọn, với dấu hai chấm [‘. ’] phân tách khóa và giá trị và dấu phẩy phân tách các phần tử khác nhau

larch s5 = r'A string with backslash \n but not a newline!'
5

Bạn cũng có thể thêm nhiều phần tử vào từ điển bằng cách gán cho một khóa mới

larch s5 = r'A string with backslash \n but not a newline!'
6

Từ điển có một số phương pháp. Bao gồm các

  • xóa - xóa tất cả các phần tử khỏi từ điển

  • sao chép – tạo một bản sao của từ điển

  • get - lấy một phần tử theo tên

  • has_key – trả về việc từ điển có khóa hay không

  • items – trả về danh sách các bộ [key, value]

  • keys – trả về danh sách key

  • giá trị – trả về một danh sách các giá trị

  • pop – loại bỏ một phần tử bằng phím, trả về giá trị

  • popitem – xóa mục “tiếp theo”, trả về [khóa, giá trị]

  • cập nhật – thêm hoặc ghi đè lên các mục từ một từ điển khác

Ví dụ

đường tùng> nguyên tử_weight. keys[] [‘Be’, ‘C’, ‘B’, ‘H’, ‘Li’, ‘He’] larch> Atomic_weight. giá trị [] [9. 0120000000000005, 12. 01, 10. 811, 1. 008, 6. 9000000000000004, 4. 0026000000000002]

Lưu ý rằng các khóa và giá trị không theo thứ tự chúng được nhập. Nếu bạn thêm nhiều phần tử vào từ điển, thứ tự mới có thể không liên quan đến thứ tự cũ. Điều được đảm bảo là thứ tự của danh sách khóa sẽ luôn khớp với thứ tự của danh sách giá trị

Cũng giống như danh sách, từ điển có thể thay đổi và các giá trị trong từ điển có thể là bất kỳ đối tượng nào, bao gồm các danh sách và từ điển khác, do đó từ điển có thể có cấu trúc rất phức tạp. Từ điển khá hữu ích và trên thực tế được sử dụng trong python

8. 2. 4. Nhận dạng đối tượng, sao chép và bình đẳng so với. danh tính¶

OK, phần này có thể hơi nâng cao đối với một phần trong hướng dẫn, nhưng có một vài chủ đề quan trọng mà chúng ta cần thực hiện về các đối tượng, nhóm và ý tưởng về khả năng thay đổi đã thảo luận ở trên. Mặc dù thoạt nghe có vẻ đáng ngạc nhiên, nhưng những điểm này đều liên quan đến nhau và sẽ xuất hiện nhiều lần trong tài liệu này cũng như trong quá trình bạn sử dụng Larch. Những người quen thuộc với lập trình Fortran, C hoặc Java có thể cần đọc phần này cẩn thận hơn, vì Larch và Python thực sự hoạt động hoàn toàn khác so với các ngôn ngữ đó. Những gì chúng tôi đang hướng tới bao gồm ở đây bao gồm

  • phép gán biến thực sự có nghĩa là gì

  • đối tượng có thể thay đổi và bất biến

  • nhận dạng đối tượng

  • sự khác biệt giữa bình đẳng và bản sắc

Như đã đề cập ở trên, mỗi đại lượng được đặt tên trong Larch chỉ đơn giản là một đối tượng Python [đối với các lập trình viên C, C++ và Java, mọi biến đều là tham chiếu hoặc con trỏ]. Gán cho một biến Larch như với

larch s5 = r'A string with backslash \n but not a newline!'
7

đầu tiên xác định giá trị từ phía bên tay phải của biểu thức [1+2, 'một chuỗi', một danh sách và giá trị trả về của some_function[]] sau đó gán tên biến [w, x, y, z] . Larch không gán trước tên biến để 'w' chỉ có thể chứa một số nguyên – bạn không chỉ có thể thay đổi giá trị của nó mà cả loại dữ liệu mà nó trỏ tới

larch s5 = r'A string with backslash \n but not a newline!'
8

Vì lý do này, tốt nhất nên coi tên biến là một cái gì đó rất khác với giá trị mà nó trỏ tới. Tất nhiên, khi 2 tên biến khác nhau thì tên biến khác nhau là điều hiển nhiên, vì cách đặt tên khác nhau. Không rõ liệu giá trị mà các biến nắm giữ có khác nhau hay không

Giá trị của các kiểu đơn giản [số nguyên, số float, chuỗi, tuple và một số kiểu nội trang khác] được cho là không thay đổi - bản thân giá trị không thể thay đổi. Bạn có thể gán lại tên cho một giá trị khác, nhưng

larch s5 = r'A string with backslash \n but not a newline!'
9

không thay đổi giá trị của 3. 25. Khi đó, việc gán cho các loại đơn giản có thể được coi là về cơ bản tạo ra một giá trị mới cho tên để trỏ mỗi khi thực hiện một phép gán. Điều này không chính xác vì Python đặt các số nguyên nhỏ được phân bổ trước để nó không tạo một đối tượng số nguyên mới mỗi khi bạn gán một số cho 1, nhưng hiện tại đó là một phép tính gần đúng hợp lý

Một số loại đối tượng như danh sách, từ điển, mảng và nhóm, tất cả đều có thể thay đổi sau khi chúng được tạo. chúng có thể thay đổi. Nghĩa là, ngay cả sau khi tạo một danh sách, bạn có thể thêm một phần tử vào danh sách đó hoặc bạn có thể xóa một mục khỏi danh sách đó, v.v. Những hành động này thay đổi giá trị mà đối tượng trỏ đến. Đối tượng chỉ trỏ đến một vị trí trong bộ nhớ – điều này không phải thay đổi chỉ vì giá trị thay đổi

Điều này hơi khác so với mô hình cho biến trong các ngôn ngữ như C hoặc Fortran nơi các biến có vị trí bộ nhớ cố định và các loại dữ liệu cụ thể mà chúng có thể chứa. Trong Python và Larch, tất cả các đối tượng trỏ đến một số giá trị. Đối với các loại dữ liệu có thể thay đổi, giá trị được phép thay đổi. Ngoài ra, những gì đối tượng trỏ đến cũng có thể thay đổi

Mỗi giá trị đối tượng có một vị trí bộ nhớ duy nhất - danh tính của nó. Hàm dựng sẵn

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
12 trả về danh tính này. Hai biến được cho là giống nhau nếu giá trị của chúng có cùng bản sắc – các biến chỉ đến cùng một đại lượng. Hai biến bằng nhau nếu giá trị của chúng giống nhau, ngay cả khi các giá trị này được giữ ở các vị trí bộ nhớ khác nhau. Và, tất nhiên, hai biến khác nhau có thể trỏ đến cùng một đối tượng

Bạn có thể kiểm tra cả đẳng thức [hai biến có giữ giá trị bằng nhau không] và đồng nhất [hai biến có trỏ đến cùng một giá trị hay không]. Đầu tiên, hàm dựng sẵn

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
12 sẽ cung cấp danh tính [về cơ bản là vị trí bộ nhớ] của một biến

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
0

[giá trị hiển thị sẽ khác nhau mỗi khi bạn chạy Larch]. Bây giờ nếu chúng ta gán một biến khác cho

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
14, chúng ta có thể sử dụng
larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
12 để xem tại sao việc thay đổi giá trị của một biến lại thay đổi giá trị của biến kia

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
1

Ở đây,

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
14 đã thay đổi vì nó giống hệt với
larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
17 và có thể thay đổi. Tuy nhiên, nếu chúng ta tạo một biến khác có cùng giá trị

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
2

Bây giờ thay đổi một phần tử của

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
18 sẽ không thay đổi
larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
14 hoặc
larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
17. Bạn có thể kiểm tra xem hai biến có giá trị bằng nhau hay không bằng toán tử boolean ==. Tương tự, bạn có thể kiểm tra xem hai biến có giống nhau hay không bằng toán tử boolean là. Cho nên

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
3

Nếu bạn muốn tạo một bản sao của một đối tượng có thể thay đổi, bạn có thể sử dụng hàm dựng sẵn

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
01

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
4

Một cách khác và rất phổ biến để tạo các bản sao của danh sách và mảng là tạo một giá trị mới có cùng giá trị. Đối với một danh sách, một cách tiếp cận rất phổ biến là tạo một lát cắt đầy đủ

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
5

và đối với mảng, bạn có thể nhân với 1 hoặc thêm 0

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
6

Lưu ý rằng thực hiện

larch> 3 + a
5
larch> b*2
5.0
larch> 3/2
1.5
larch> 3//2
1
larch> 7 % 3
1
02 trên các mảng ở đây sẽ cho một mảng các giá trị, kiểm tra các giá trị theo từng phần tử. Điều này sẽ được thảo luận trong phần tiếp theo

Các nhóm Larch cũng là các đối tượng có thể thay đổi và do đó, việc gán cho một nhóm không tạo ra một bản sao mới của nhóm mà là một tham chiếu khác đến cùng một nhóm

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
7

Nếu yêu cầu in nhóm hoặc chạy hàm

larch> 1 + 2.5
3.5
7 trên một nhóm

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
8

chúng ta thấy biểu diễn thập lục phân của địa chỉ bộ nhớ của nó

larch> long_string = """Now is the time for all good men
.....> to come to the aid of their party"""
larch> print[long_string]
Now is the time for all good men
to come to the aid of their party
9

Trên thực tế, vấn đề này không khó hiểu như người ta tưởng và mô hình cho dữ liệu, biến và giá trị nói chung rất dễ xử lý. Điều quan trọng nhất cần lưu ý - điều có khả năng gây rắc rối nhất - là việc gán một biến là một đối tượng có thể thay đổi như danh sách, từ điển hoặc mảng không tạo bản sao của đối tượng mà chỉ tạo một biến khác mà

Các kiểu dữ liệu phức tạp trong Python là gì?

Kiểu dữ liệu phức trong python gồm hai giá trị, giá trị thứ nhất là phần thực của số phức và giá trị thứ hai là phần ảo của số phức< . Chúng ta thường ký hiệu phần thực bằng i và phần ảo bằng j. Ví dụ: [3 + 7j] hoặc [3i + 7j]. . We usually denote the real part using i and the imaginary part with j. For example, [3 + 7j] or [3i + 7j].

Đâu là kiểu dữ liệu phức tạp?

Một loại dữ liệu phức tạp thường là tổng hợp của các loại dữ liệu hiện có khác . Ví dụ: bạn có thể tạo một kiểu dữ liệu phức hợp có các thành phần bao gồm các kiểu dựng sẵn, kiểu mờ, kiểu khác biệt hoặc các kiểu phức hợp khác.

Các kiểu dữ liệu hợp lệ trong Python là gì?

Sau đây là kiểu dữ liệu chuẩn hoặc tích hợp sẵn của Python. Số . Loại trình tự . Boolean .

4 kiểu dữ liệu chính trong Python là gì?

Python có 4 cấu trúc dữ liệu tích hợp có thể được sử dụng để chứa một tập hợp các đối tượng, đó là danh sách, bộ dữ liệu, bộ và từ điển. Chúng có thể được phân biệt thành loại có thể thay đổi, không thay đổi, loại thiết lập và ánh xạ tương ứng

Chủ Đề