programming python Procedure trong Python **kwargs trong python Trong Python
Class trong Python Function trong Python
Hướng dẫn dùng server abbreviation trong PHP
Hướng dẫn dùng charset utf8 trong PHPHướng dẫn dùng hmac_sha256 trong PHPHướng dẫn dùng negative lookbehind trong PHPHướng dẫn dùng free space trong PHPDân số usa 2023Hướng dẫn dùng subclass python pythonHướng dẫn dùng javascript array.filter trong PHPHướng dẫn php define constantToplist mới#1 Top 9 cửa hàng bán đồ an vặt trung quốc tphcm 20226 ngày trước #2 Top 10 ý kiến nào dưới đây đúng khi bàn về dân chủ và kỉ luật 20221 ngày trước #3 Top 9 công thức chỉnh màu lightroom tone xám 20223 ngày trước #4 Top 9 khẩu trang y tế 4 lớp kf94 20221 ngày trước #5 Top 10 kính công giáo đọc hằng ngày mp3 20224 ngày trước #6 Top 9 thời gian nghỉ thai sản tính từ ngày nào 20221 ngày trước #7 Top 9 bài 6 trang 37 sbt toán 7 tập 2 20221 tuần trước #8 Top 9 bình đun nước fatz quick 6 20225 ngày trước #9 Top 9 cập nhật thông tin thuê bao vinaphone 2022 20221 ngày trước Bài mới nhấtTop 20 cửa hàng đt cũ Huyện Tu Mơ Rông Kon Tum 2022What are the four common triggers of conflict spoken about in Chapter 6 choose the 4 that apply?meedy là gì - Nghĩa của từ meedyWhich one of the following statements provides the most credible explanation for the fact that human beings seem to surpass all other animal species?fkna là gì - Nghĩa của từ fknaViết đoạn văn 7 10 câu nêu suy nghĩ của em về tình cảm trong sáng của tuổi học tròBài tập ôn cuối năm Toán 7 Phần Hình họcKhông khí là một chất hay hỗn hợpSử dụng sáp vuốt tóc có hại khôngTop 20 cửa hàng 0907877877 Huyện Phước Sơn Quảng Nam 2022Chủ ĐềToplist Hỏi Đáp Địa Điểm Hay Là gì Mẹo Hay Nghĩa của từ Học Tốt Cách Công Nghệ Học Review Khỏe Đẹp Cryto Máy Sản phẩm tốt Giá Bao nhiêu Ngôn ngữ Ở đâu Xây Đựng Top List Dịch Tại sao Nhà Hướng dẫn Tiếng anh Vì sao Là ai Bao lâu Bài tập So Sánh Máy tính Top Đại học Khoa Học So sánh programming Thế nào Sách Món Ngon Phương trình Thuốc Nghĩa là gì Hà Nội php Giới Tính Thanh Hóa Đánh giá Phim Game Bài viết được sự cho phép của tác giả Nguyễn Việt Hưng Nội dung chính
Một câu hỏi nhạt toẹt của nhà phỏng vấn có thể đưa ra (với người phỏng vấn thường có kiến thức từ ngôn ngữ khác như Java, PHP hay C++, hoặc một chuyên gia Python thực sự và hỏi để check xem bạn có mắc bẫy không – loại này thì hiếm, và không rảnh 🙄). Tuyển python nhiều vị trí lương cao Python dùng call-by-value hay call-by-reference?Hai khái niệm này thực ra không tồn tại trong Python, bạn có thể đào tung cả trang document của Python cũng sẽ không thấy nói gì về khái niệm này. Tức là: nó không có thật! Nó không cần thiết! bạn chỉ cần hiểu function hoạt động thế nào, cách Python sử dụng “name binding”. Còn không nên ngồi cãi nhau về “call-by-reference”, “call-by-value” làm gì cho tốn thời gian, vô tác dụng.
Call by XYZ là cái gì?Mọi khái niệm viết sau đây không tồn tại trong Python, các thuật ngữ được viết với “từ vựng” của ngôn ngữ lập trình khác. Trong một số ngôn ngữ như C, C++, khi gọi function ta có truyền vào các “tham số” (pass argument), nếu function đó nhận vào một array (trong Python hiểu nôm na là list), thì trong function, ta sẽ xử lý chính array đó hay một bản copy của nó? Kiểu 1 Kiểu 2 Với câu gọi function (call function) thứ nhất ta gọi function với giá trị (value) của biến Câu gọi function thứ hai ta gọi function với con trỏ (pointer) đến biến Những ngôn ngữ lập trình bị ảnh hưởng bởi C thường cắt giảm khái niệm “pointer” để tránh gây phức tạp, vì vậy khi gọi function sẽ mặc định dùng 1 trong 2 kiểu trên. Hoặc dùng một cơ chế khác hoàn toàn. Ví dụ:
Call by và pass by
Chỉ là hai cách tập trung khác nhau vào một việc: call function với các argument. Call function trong Python hoạt động thế nào?Nếu bắt phải đưa ra một từ khoá, thì đó là các argument sẽ được “pass by assignment”. Để thực sự hiểu Python assignment làm gì, bạn cần hiểu về khái niệm name và binding trong Python. Cách hoạt động của name và bindingx = 4 y = x x = x + 1 print(x, y)
Code này đọc theo thuật ngữ của Python như sau:
Vậy rõ ràng kết quả ở đây: Xem ví dụ sau tương tự, nhưng khác hẳn: L = [1,2,3] K = L L[0] = 9 print(L, K)
Đây nhẽ ra, phải là câu hỏi phỏng vấn mặc định cho lập trình viên Python chứ không phải mấy câu vớ vẩn như tiêu đề bài này. Vì sao? vì nếu lập trình viên trả lời đúng, tức là anh ta hiểu cách Python hoạt động, và sẽ không tạo ra những bug rất cơ bản trong chương trình. Hãy đọc đoạn code này theo thuật ngữ Python:
Hãy nhớ >>> L = [1,2,3] >>> K = L >>> L[0] = 9 >>> print(L, K) [9, 2, 3] [9, 2, 3] >>> id(L) 4326049992 >>> id(K) 4326049992 >>> L is K True
Cơ chế hoạt động của function>>> def change(numb, ns): ... numb = numb + 1 ... ns[0] = 0 ... return None ... >>> N = 9 >>> L = [1,2,3] >>> change(N, L) >>> print(N, L) 9 [0, 2, 3] Cơ chế gọi function của Python hoạt động như sau:
Vậy làm sao để không thay đổi list L và thu về một list mới sau khi gọi function? Hãy tạo một bản copy của list rồi dùng bản copy đó. >>> def change(L): ... L = L[:] # slicing là một cách đơn giản để tạo một bản shallow copy ... L[0] = 0 ... return L ... >>> newL = change(L) >>> print(L) [1, 2, 3] >>> print(newL) [0, 2, 3] CHÚ Ý: Nếu list L chứa các mutable object (xem ở
dưới), cần sử dụng function Một số kiểu dữ liệu trong Python không cho phép thay đổi giá trị của nó sau khi tạo ra (immutable) như int, float, str, NoneType, bool, tuple. Vì vậy mỗi lần “thay đổi”, ta sẽ tạo ra một object mới chứa giá trị mới: >>> N = 9 >>> id(N) 4297624192 >>> N = N + 2 >>> id(N) 4297624256 >>> N 11 >>> T1 = (1,2,3) >>> id(T1) 4326100280 >>> T1 = T1 + (3,4,5) >>> id(T1) 4325883048 >>> print(T1) (1, 2, 3, 3, 4, 5) Các kiểu dữ liệu khác cho phép thay đổi sau khi tạo ra (mutable): list, dict, set. >>> L = [1,2,3] >>> id(L) 4326050504 >>> L.extend([3,4,5]) >>> id(L) 4326050504 >>> print(L) [1, 2, 3, 3, 4, 5] Với kiểu mutable, cần đặc biệt chú ý phép toán nào trả về object mới, phép toán nào thay đổi object hiện tại: >>> L = [1,2,3] >>> id(L) 4326050568 >>> L = L + [3,4,5] >>> id(L) 4326095240 >>> L [1, 2, 3, 3, 4, 5]
Python dùng pass by assignment, call by object referencePass by assignment là khái niệm lấy từ Python FAQ, khi mà người ta bắt buộc phải giải thích khái niệm này cho những người đã biết ngôn ngữ lập trình khác. Các name trong function sẽ bind tới các object mà argument đang bind tới. Trong tutorial Python, có viết “các argument được pass sử dụng call by value, với các value luôn luôn là các object reference chứ không phải value của object.” – yup, I lied 😒 Định nghĩa name trong Python:
Liệu bạn có thể bịa ra một thuật ngữ nữa là “call by name” ??!!! Chốt, thôngĐể khỏi đau đầu về những điều này, chỉ cần nắm chắc các khái niệm Trên internet có nhiều nơi hỏi đáp, cố đưa ra một cái tên, nhưng những cái tên đó không có trong tài liệu chính thống của Python. Tham khảo
Bài viết gốc được đăng tải tại pymi.vn Có thể bạn quan tâm:
Xem thêm Việc làm it online hấp dẫn trên TopDev |