Trong ví dụ đơn giản sau đây, các biến x và y được gán và chuyển vào một hàm, trong đó, dưới các tên mới, chúng được sửa đổi, tính tổng và trả về kết quả Show
Đương nhiên, x và y không thay đổi, nhưng đó là điều xảy ra nếu chúng là danh sách
z = [[2, -2], [3, -3]] # hoàn toàn đúng Vì vậy, việc chuyển các danh sách tới một hàm nơi chúng được sử dụng với các tên biến khác nhau khiến chúng bị thay đổi? . Tôi nghĩ các hàm Python được cho là tạo các biến chỉ cục bộ mới Ghi chú. Các danh sách ban đầu không và không thể bất biến. Sau này tôi sẽ sửa đổi chúng, nhưng tôi sẽ cần bản gốc để làm điều đó Ai đó có thể giải thích chuyện gì đang xảy ra ở đây không và làm cách nào tôi có thể ngăn danh sách của mình bị thay đổi khi được chuyển đến một chức năng? Các hàm của Python (cả hàm tích hợp và hàm tùy chỉnh do chúng tôi tự viết) là những công cụ quan trọng để làm việc với dữ liệu. Nhưng những gì họ làm với dữ liệu của chúng tôi có thể hơi khó hiểu và nếu chúng tôi không biết điều gì đang xảy ra, điều đó có thể gây ra lỗi nghiêm trọng trong quá trình phân tích của chúng tôi Trong hướng dẫn này, chúng ta sẽ xem xét kỹ cách Python xử lý các loại dữ liệu khác nhau khi chúng được thao tác bên trong các hàm và tìm hiểu cách đảm bảo rằng dữ liệu của chúng ta chỉ được thay đổi khi chúng ta muốn nó được thay đổi. Cách ly bộ nhớ trong chức năngĐể hiểu cách Python xử lý các biến toàn cục bên trong các hàm, hãy làm một thử nghiệm nhỏ. Chúng ta sẽ tạo hai biến toàn cục, number_1 và number_2, và gán chúng cho các số nguyên 5 và 10. Sau đó, chúng ta sẽ sử dụng các biến toàn cục đó làm đối số trong một hàm thực hiện một số phép toán đơn giản. Chúng tôi cũng sẽ sử dụng tên biến làm tên tham số của hàm. Sau đó, chúng ta sẽ xem liệu tất cả việc sử dụng biến bên trong hàm của chúng ta có ảnh hưởng đến giá trị toàn cầu của các biến này hay không
Như chúng ta có thể thấy ở trên, hàm hoạt động chính xác và giá trị của các biến toàn cục 0 và 1 không thay đổi, mặc dù chúng ta đã sử dụng chúng làm đối số và tên tham số trong hàm của mình. Điều này là do Python lưu trữ các biến từ một hàm ở một vị trí bộ nhớ khác với các biến toàn cục. Họ bị cô lập. Do đó, biến 0 có thể có một giá trị (5) trên toàn cục và một giá trị khác (50) bên trong hàm, nơi nó được tách biệt(Nhân tiện, nếu bạn đang nhầm lẫn về sự khác biệt giữa tham số và đối số,. ) Điều gì về danh sách và từ điển?danh sáchChúng ta đã thấy rằng những gì chúng ta làm với một biến như 0 ở trên bên trong một hàm không ảnh hưởng đến giá trị toàn cầu của nó. Nhưng 0 là một số nguyên, là một kiểu dữ liệu khá cơ bản. Điều gì xảy ra nếu chúng ta thử cùng một thử nghiệm với một loại dữ liệu khác, chẳng hạn như danh sách?
Như chúng ta có thể thấy, ở đây giá trị toàn cục của 6 đã được cập nhật, mặc dù giá trị của nó chỉ được thay đổi bên trong hàmtừ điểnBây giờ, hãy viết một hàm lấy từ điển làm đối số để xem liệu biến từ điển toàn cục có bị sửa đổi khi nó cũng được thao tác bên trong hàm không Để làm cho điều này thực tế hơn một chút, chúng tôi sẽ sử dụng dữ liệu từ bộ dữ liệu 7 được sử dụng trong khóa học Nguyên tắc cơ bản về Python của chúng tôi (dữ liệu có sẵn để tải xuống tại đây)Trong đoạn mã bên dưới, chúng tôi đang bắt đầu với một từ điển chứa số lượng ứng dụng với từng xếp hạng độ tuổi trong tập dữ liệu (do đó, có 4.433 ứng dụng được xếp hạng “4+”, 987 ứng dụng được xếp hạng “9+”, v.v. ). Hãy tưởng tượng rằng chúng ta muốn tính tỷ lệ phần trăm cho từng xếp hạng độ tuổi, vì vậy chúng ta có thể biết được xếp hạng độ tuổi nào phổ biến nhất trong số các ứng dụng trong App Store Để làm điều này, chúng ta sẽ viết một hàm có tên là 8 sẽ lấy một từ điển làm đối số và chuyển đổi số đếm thành tỷ lệ phần trăm. Chúng tôi sẽ cần bắt đầu đếm từ 0 và sau đó lặp lại từng giá trị trong từ điển, thêm chúng vào số đếm để chúng tôi nhận được tổng số xếp hạng. Sau đó, chúng tôi sẽ lặp lại từ điển một lần nữa và thực hiện một số phép toán cho từng giá trị để tính tỷ lệ phần trăm
Trước khi xem kết quả, hãy nhanh chóng xem lại những gì đang xảy ra ở trên. Sau khi gán từ điển xếp hạng độ tuổi của ứng dụng cho biến 9, chúng tôi tạo một hàm mới có tên là 8 nhận một đối số duy nhất. 1Để biết tỷ lệ phần trăm ứng dụng rơi vào từng xếp hạng độ tuổi, chúng tôi cần biết tổng số ứng dụng, vì vậy, trước tiên, chúng tôi đặt một biến mới có tên là 2 thành 3, sau đó lặp qua từng khóa trong 1, thêm nó vào 2Sau khi hoàn tất, tất cả những gì chúng ta cần làm là lặp lại 1, chia từng mục cho tổng và sau đó nhân kết quả với 100. Điều này sẽ cung cấp cho chúng tôi một từ điển với tỷ lệ phần trămNhưng điều gì sẽ xảy ra khi chúng ta sử dụng 9 toàn cục làm đối số cho hàm mới này?
Giống như chúng ta đã thấy với các danh sách, biến toàn cục 9 của chúng ta đã bị thay đổi, mặc dù nó chỉ được sửa đổi bên trong hàm 8 mà chúng ta đã tạoVì vậy, những gì đang thực sự xảy ra ở đây? Các kiểu dữ liệu có thể thay đổi và không thể thay đổiTrong Python, kiểu dữ liệu có thể là mutable (có thể thay đổi) hoặc immutable (không thể thay đổi). Và trong khi hầu hết các kiểu dữ liệu mà chúng ta đã làm việc trong phần giới thiệu Python là bất biến (bao gồm số nguyên, số float, chuỗi, Boolean và bộ dữ liệu), danh sách và từ điển có thể thay đổi. Điều đó có nghĩa là một danh sách toàn cầu hoặc từ điển có thể được thay đổi ngay cả khi nó được sử dụng bên trong một hàm, giống như chúng ta đã thấy trong các ví dụ ở trên Để hiểu sự khác biệt giữa có thể thay đổi (có thể thay đổi) và không thể thay đổi (không thể thay đổi), thật hữu ích khi xem cách Python thực sự xử lý các biến này Hãy bắt đầu bằng cách xem xét một phép gán biến đơn giản
Tên biến 0 hoạt động giống như một con trỏ hướng tới 1 và nó giúp chúng tôi truy xuất 1 bất cứ khi nào chúng tôi muốn 1 là số nguyên và số nguyên là kiểu dữ liệu không thể thay đổi. Nếu một loại dữ liệu là bất biến, điều đó có nghĩa là nó không thể được cập nhật sau khi được tạo. Nếu chúng tôi làm 4, chúng tôi không thực sự cập nhật 1 thành 6. Trong hình ảnh động dưới đây, chúng ta có thể thấy rằng
Các loại dữ liệu có thể thay đổi như danh sách và từ điển hoạt động khác nhau. Chúng có thể được cập nhật. Vì vậy, ví dụ, hãy tạo một danh sách rất đơn giản
Nếu chúng tôi nối thêm một 3 vào cuối danh sách này, thì chúng tôi không chỉ đơn giản trỏ 4 vào một danh sách khác, mà chúng tôi đang trực tiếp cập nhật danh sách hiện cóNgay cả khi chúng ta tạo nhiều biến danh sách, miễn là chúng trỏ đến cùng một danh sách, tất cả chúng sẽ được cập nhật khi danh sách đó thay đổi, như chúng ta có thể thấy trong đoạn mã bên dưới
0Đây là hình ảnh động về những gì đang thực sự xảy ra trong đoạn mã trên Điều này giải thích tại sao các biến toàn cầu của chúng tôi đã bị thay đổi khi chúng tôi thử nghiệm với các danh sách và từ điển trước đó. Vì danh sách và từ điển có thể thay đổi nên việc thay đổi chúng (thậm chí bên trong một hàm) sẽ thay đổi chính danh sách hoặc từ điển, đây không phải là trường hợp đối với các kiểu dữ liệu không thể thay đổi Giữ các kiểu dữ liệu có thể thay đổi không thay đổiNói chung, chúng ta không muốn các hàm của mình thay đổi các biến toàn cục, ngay cả khi chúng chứa các kiểu dữ liệu có thể thay đổi như danh sách hoặc từ điển. Đó là bởi vì trong các phân tích và chương trình phức tạp hơn, chúng ta có thể thường xuyên sử dụng nhiều chức năng khác nhau. Nếu tất cả họ đang thay đổi danh sách và từ điển mà họ đang làm việc, thì việc theo dõi những gì đang thay đổi những gì có thể trở nên khá khó khăn. Rất may, có một cách dễ dàng để giải quyết vấn đề này. chúng ta có thể tạo một bản sao của danh sách hoặc từ điển bằng phương thức Python tích hợp có tên là 5Nếu bạn chưa tìm hiểu về các phương pháp, đừng lo lắng. Chúng được đề cập trong khóa học Python trung cấp của chúng tôi, nhưng đối với hướng dẫn này, tất cả những gì bạn cần biết là 5 hoạt động giống như 7 1Hãy xem lại hàm mà chúng ta đã viết cho danh sách và cập nhật nó để những gì xảy ra bên trong hàm của chúng ta không thay đổi 6. Tất cả những gì chúng ta cần làm là thay đổi đối số mà chúng ta truyền vào hàm của mình từ 6 thành 0 2_______3_______3Như chúng ta có thể thấy, điều này đã khắc phục vấn đề của chúng ta. Đây là lý do tại sao. sử dụng 5 để tạo một bản sao riêng của danh sách, sao cho thay vì trỏ tới chính 6, thì 3 trỏ tới một danh sách mới bắt đầu bằng một bản sao của 6. Bất kỳ thay đổi nào được thực hiện đối với 3 sau thời điểm đó đều được thực hiện cho danh sách riêng biệt đó, chứ không phải bản thân 6, do đó, giá trị toàn cầu của 6 không thay đổiTuy nhiên, giải pháp này vẫn chưa hoàn hảo vì chúng ta sẽ phải nhớ thêm 5 mỗi khi truyền một đối số cho hàm của mình, nếu không sẽ có nguy cơ vô tình thay đổi giá trị chung của 6. Nếu chúng tôi không muốn phải lo lắng về điều đó, chúng tôi thực sự có thể tạo bản sao danh sách đó bên trong chính chức năng đó 4_______3_______3Với cách tiếp cận này, chúng ta có thể chuyển một biến toàn cục có thể thay đổi một cách an toàn như 6 cho hàm của mình và giá trị toàn cục sẽ không bị thay đổi vì chính hàm đó tạo một bản sao và sau đó thực hiện các thao tác của nó trên bản sao đóPhương pháp 5 cũng hoạt động với từ điển. Như với danh sách, chúng ta có thể chỉ cần thêm 5 vào đối số mà chúng ta chuyển hàm của mình để tạo một bản sao sẽ được sử dụng cho hàm mà không thay đổi biến ban đầu 6 7Nhưng một lần nữa, sử dụng phương pháp đó có nghĩa là chúng ta cần nhớ thêm 5 mỗi khi chúng ta chuyển một từ điển vào hàm 8 của mình. Nếu chúng tôi sẽ sử dụng chức năng này thường xuyên, có thể tốt hơn là triển khai sao chép vào chính chức năng đó để chúng tôi không phải nhớ thực hiện việc nàyBên dưới, chúng ta sẽ sử dụng 5 bên trong chính hàm đó. Điều này sẽ đảm bảo rằng chúng ta có thể sử dụng nó mà không thay đổi các biến toàn cục mà chúng ta chuyển cho nó dưới dạng đối số và chúng ta không cần nhớ thêm 5 vào mỗi đối số mà chúng ta chuyển 8 7Như chúng ta có thể thấy, việc sửa đổi chức năng của chúng ta để tạo một bản sao của từ điển và sau đó chỉ thay đổi số đếm thành phần trăm trong bản sao đó đã cho phép chúng ta thực hiện thao tác mà chúng ta muốn mà không thực sự thay đổi 9kết luậnTrong hướng dẫn này, chúng ta đã xem xét sự khác biệt giữa các loại dữ liệu có thể thay đổi, có thể thay đổi và các loại dữ liệu không thay đổi, không thể thay đổi. Chúng tôi đã học cách sử dụng phương pháp 5 để tạo bản sao của các loại dữ liệu có thể thay đổi như danh sách và từ điển để chúng tôi có thể làm việc với chúng trong các hàm mà không thay đổi giá trị chung của chúngHướng dẫn này có hữu ích không?Chọn con đường của bạn để tiếp tục học các kỹ năng dữ liệu có giá trị Hướng dẫn Python Thực hành các kỹ năng lập trình Python của bạn khi bạn làm việc với các hướng dẫn miễn phí của chúng tôi Các khóa học khoa học dữ liệu Cam kết học tập với các khóa học khoa học dữ liệu tương tác, trong trình duyệt của bạn bằng Python, R, SQL, v.v. người mới bắt đầu từ điểnchức năngkiểu dữ liệu có thể thay đổidanh sáchkiểu dữ liệu có thể thay đổipythonHướng dẫn Thông tin về các Tác giả Charlie CusterCharlie là sinh viên ngành khoa học dữ liệu và cũng là nhà tiếp thị nội dung tại Dataquest. Trong thời gian rảnh rỗi, anh ấy học đi xe đạp leo núi và làm video về nó Các phần tử danh sách có thể được truy cập và sửa đổi Python không?Danh sách là một chuỗi các mục có thể thay đổi, được sắp xếp theo thứ tự. Như vậy, nó có thể được lập chỉ mục, cắt lát và thay đổi. Mỗi phần tử có thể được truy cập bằng cách sử dụng vị trí của nó trong danh sách .
Danh sách có thể thay đổi được không?Danh sách là tập hợp được sắp xếp theo thứ tự và có thể thay đổi . Cho phép các thành viên trùng lặp. Sử dụng dấu ngoặc vuông [] cho danh sách. Tuple là một bộ sưu tập được sắp xếp và không thể thay đổi.
Việc sửa đổi một danh sách trong Python có nghĩa là gì?Modifying a list means to change a particular entry, add a new entry, or remove an existing entry. T","noIndex":0,"noFollow":0},"content":"
You can modify the content of a list as needed with Python. Chúng tôi có thể cập nhật các phần tử của danh sách không?Bạn có thể cập nhật một hoặc nhiều phần tử của danh sách bằng cách đưa lát cắt ở phía bên trái của toán tử gán và bạn có thể thêm vào các phần tử trong danh sách bằng phần nối thêm . |