2009-12-21 42 views
8

Trong python 2.6, tại sao dòng sau hợp lệ?Quirks cú pháp hoặc tại sao python hợp lệ

my_line = 'foo' 'bar' 

và nếu điều đó là hợp lệ, tại sao không phải là như sau:

my_list = 1 2 

Ví dụ đầu tiên là chuỗi nối, tuy nhiên, sau đây là không hợp lệ hoặc (nhờ thần):

foo = 'foo' 
bar = 'bar' 
foo_bar = foo bar 
+1

tôi làm không thấy điểm trong "xóa" các khoảng trắng vì ví dụ 'my_list = 1 2' của bạn dường như đề xuất. – jldupont

+0

Nó không gợi ý điều đó. Những gì tôi đề nghị là khía cạnh này của cú pháp Python là không phù hợp (imho). –

+3

Xem PEP này http://www.python.org/dev/peps/pep-3126/ nơi nó được thảo luận rộng rãi. – stephan

Trả lời

20

Điều này đang thực hiện string literal concatenation. Như đã đề cập trong tài liệu, ưu điểm bao gồm những điều sau đây:

Tính năng này có thể được sử dụng để giảm số của backslashes cần thiết, để chia chuỗi dài thuận tiện trên đường dài, hoặc thậm chí để thêm ý kiến ​​để phần của chuỗi ...

Lưu ý rằng việc ghép nối này được thực hiện tại thời gian biên dịch thay vì thời gian chạy.

Lịch sử và lý do đằng sau vấn đề này và đề xuất bị từ chối xóa đối tượng địa lý được mô tả trong PEP 3126.

8

my_line = 'foo' 'bar' là chuỗi nối.

+3

Vẫn hoạt động trong Python 3.1 nhưng tôi không thích nó lắm. –

+0

@ Tôi cũng vậy. May mắn thay, tôi đã không tìm thấy mã viết theo cách này, và tôi hy vọng tôi không bao giờ phải ... Tôi chắc chắn tôi sẽ quên những gì nó có nghĩa là! –

+0

Nó có thể hữu ích khi "tự động tạo" mã nhưng ngoài việc này, tôi không thấy lợi thế (nếu có). – jldupont

5

Nó không phải là không phù hợp. Các chuỗi và số nguyên có các phương thức khác nhau.

Ghép số nguyên là vô nghĩa.

Ghép chuỗi là hành vi mặc định có ý nghĩa.

6

Có lẽ đây là tổ tiên của C. Trong C, sau đây là hoàn toàn hợp lệ:

char* ptr = "hello " "world"; 

Nó được thực hiện bởi C pre-processor (cpp), và lý do được đưa ra trong liên kết đó là:

này cho phép chuỗi dài để được chia trên nhiều dòng , và cũng cho phép literals chuỗi kết quả từ C định nghĩa preprocessor và macro được nối vào dây tại thời gian biên dịch

Các vấn đề liên quan