Bạn đã liên kết đến tài liệu 3.x Python, nhưng nếu translate()
đang được sử dụng với nhiều tranh cãi sau đó mã này có lẽ là từ Python 2.x nơi đó là hợp lệ. Đây là số documentation.
Như bạn có thể thấy ở đó, đối số thứ hai là tùy chọn và nó chỉ định các ký tự sẽ bị xóa khỏi chuỗi đầu vào (trên Python 3.x bạn sẽ làm điều này bằng cách ánh xạ các ký tự đến None
).
Vì vậy, đối với "Agh#$%#%2341- -!zdrkfd".translate(table, delete_table)
, đầu tiên tất cả các ký tự có mặt trong delete_table
sẽ bị xóa và sau đó bản dịch được thực hiện bằng cách sử dụng table
.
Kể từ delete_table
được xây dựng bằng string.maketrans()
dịch tất cả các chữ thường vào không gian, nó sẽ là một chuỗi có chứa tất cả các ký tự ASCII trừ chữ thường:
>>> delete_table = string.maketrans(string.ascii_lowercase, ' '*len(string.ascii_lowercase))
>>> delete_table
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./:;<=>[email protected][\\]^_` {|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
>>> ''.join(c for c in map(chr, range(0, 256)) if c not in delete_table)
'abcdefghijklmnopqrstuvwxyz'
Vì vậy, tất cả các nhân vật khác sẽ được loại bỏ khỏi chuỗi, và sau đó bản dịch với table
sẽ không sửa đổi bất cứ điều gì vì string.maketrans('', '')
được sử dụng.
Nguồn
2013-07-19 00:07:50