Computer >> Máy Tính >  >> Lập trình >> Python

Đối số vị trí trong Python theo sau đối số từ khóa Giải pháp

Trong Python, có hai loại đối số:đối số vị trí và đối số từ khóa. Các đối số này phải xuất hiện theo một thứ tự cụ thể nếu không trình thông dịch Python trả về lỗi.

Trong hướng dẫn này, chúng ta sẽ nói về lỗi "đối số vị trí theo sau đối số từ khóa" và tại sao lỗi này lại xuất hiện. Chúng tôi sẽ xem xét một đoạn mã mẫu có lỗi này để có thể hướng dẫn cách giải quyết.

Hãy bắt đầu!

Vấn đề:đối số vị trí theo sau đối số từ khóa

Hãy xem toàn bộ lỗi của chúng tôi:

 SyntaxError:đối số vị trí theo sau đối số từ khóa 

Giống như ngôn ngữ tiếng Anh, ngôn ngữ lập trình có các quy tắc riêng của chúng. Các quy tắc này được gọi là cú pháp. Lỗi của chúng tôi là lỗi cú pháp có nghĩa là chúng tôi đã không tuân theo một trong các quy tắc chi phối cách viết mã Python.

Phần tiếp theo của lỗi của chúng tôi cho chúng tôi biết nguyên nhân gây ra lỗi này. Trong trường hợp này, mã của chúng ta phải có đối số vị trí xuất hiện sau đối số từ khóa.

Đối số vị trí là các đối số xuất hiện ở các vị trí tương ứng của chúng:

 def add_numbers (a, b):return a + b Hãy gọi hàm này:add_numbers (2, 3) 

“A” và “b” trở thành các biến bên trong hàm của chúng ta. Mã này hoạt động vì chúng tôi đã chỉ định hai đối số vị trí. “A” bằng 2 và “b” bằng ba. Chúng tôi cũng có thể chỉ định các đối số này làm đối số từ khóa:

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

 add_numbers (a =2, b =2) 

Tuy nhiên, chúng ta không thể chỉ định một đối số vị trí trước rồi chuyển sang cú pháp từ khóa.

Điều này là do Python có một hàm đặc biệt gọi là * args xử lý nhiều đối số trong một hàm. Hãy xem xét mã này:

 def show_users (a, b, * args):print (a, b, * args) 

Mã này sử dụng * args. Từ khóa này đại diện cho một số đối số có thể thay đổi. Chúng tôi có thể chuyển bao nhiêu đối số vào show_users() của chúng tôi hoạt động như chúng tôi muốn:

 show_users ("Alex", "Peter", "Violet '," Julie ") 

Mã của chúng tôi trả về:Alex Peter Violet Julie

Hai đối số đầu tiên của chúng ta, “a” và “b”, có giá trị tương ứng là “Alex” và “Peter”.

Điều này là do nếu bạn sử dụng cú pháp vị trí, các đối số được gán theo thứ tự mà chúng được truyền. Các đối số cuối cùng xuất hiện theo thứ tự mà chúng được nêu bởi vì * args đại diện cho một lượng đối số bổ sung không xác định.

Một tình huống mẫu

Hãy xem đoạn mã gặp lỗi này:

 def print_menu (salad, pizza):print ("Salad Menu") cho s trong salad:print (s) print ("") print ("Pizza Menu") for p trong pizza:print (p)  

Hàm này chấp nhận hai đối số:salad và pizza. Chức năng của chúng tôi in ra từng món salad trên menu salad và từng chiếc bánh pizza trên menu pizza ra bảng điều khiển.

Hãy gọi chức năng của chúng tôi:

 salads =["Salad cá ngừ", "Xà lách và xà lách xoài", "Hy Lạp Salad"] pizzas =["Veggie Supreme", "Ham and Pineapple", "BBQ Chicken"] print_menu (pizzas =pizza, salads) 

Mã của chúng tôi trả về:

 Tệp "main.py", dòng 13 print_menu (pizzas =pizza, salads) ^ SyntaxError:đối số vị trí theo sau đối số từ khóa 

Đã xảy ra lỗi trong mã của chúng tôi, như chúng tôi mong đợi. Hãy sửa nó.

Giải pháp

Để giải quyết vấn đề này, chúng ta cần đảm bảo rằng tất cả các đối số vị trí đều xuất hiện trước các đối số từ khóa. Hãy thay đổi cách chúng tôi gọi chức năng của mình để phản ánh quy tắc này:

 print_menu (salad, pizza) 

Chúng tôi đã chỉ định hai đối số vị trí:salad và pizza. Ngoài ra, chúng tôi có thể chỉ định “pizza” làm đối số từ khóa sau “salads”:

 print_menu (salads, pizzas =pizza) 

Trong ví dụ này, không cần thiết phải thêm bất kỳ đối số từ khóa nào vì chúng tôi không sử dụng phương thức * args. Như đã nói, việc thêm các đối số từ khóa có thể làm cho mã dễ đọc hơn tùy thuộc vào số lượng giá trị được chuyển vào một hàm.

Hãy chạy mã của chúng tôi với lệnh gọi hàm đã sửa đổi này:

 Thực đơn Salad Salad Salad Xà lách và Xoài Salad cà riThực đơn PizzaVeggie SupremeHam và dứaBBQ Gà 

Mã của chúng tôi in thành công hai danh sách Python của chúng tôi.

Kết luận

Đối số vị trí phải xuất hiện trước đối số từ khóa trong Python. Điều này là do Python diễn giải các đối số vị trí theo thứ tự mà chúng xuất hiện. Sau đó, nó diễn giải các đối số từ khóa đã được chỉ định.

Bây giờ, bạn đã sẵn sàng giải quyết lỗi "đối số vị trí theo sau đối số từ khóa" giống như một nhà phát triển Python chuyên nghiệp!