2012-03-16 23 views
14

Tôi có thể sử dụng 'a' + 1 để lấy 'b' trong ngôn ngữ C, vậy cách thức tiện lợi để làm điều này bằng Python là gì?
tôi có thể viết nó như:python: làm thế nào để tạo ra char bằng cách thêm int

chr(ord('a')+1) 

nhưng tôi không biết liệu nó là cách tốt nhất.

+4

Nó sẽ làm việc bạn có ý nghĩa gì bởi 'tốt nhất' – zmbq

+1

được cảnh báo rằng chuỗi trong Python được lưu trữ với một mã hóa Trong Python 2.x, mã hóa mặc định là ASCII mà thêm một số nguyên không phải là một vấn đề.Trong Python 3.x, các chuỗi mặc định là UTF8 unicode Bạn sẽ nhận được một er ror khi thêm một số nguyên để unicode ký tự nếu nó tràn vượt quá 127. http://docs.python.org/howto/unicode.html#the-unicode-type – shimofuri

+1

@shimofuri, python 3 chuỗi là Unicode. Utf-8 là một bảng mã. – alexis

Trả lời

15

Vâng, đây là cách tốt nhất Python không tự động chuyển đổi giữa một nhân vật và một int đường C và C++ làm

+0

Nó không phải là một chuyển đổi, nhưng ngữ nghĩa khác nhau (số nguyên, ký tự) cho cùng một mẫu bit được lưu trữ. – alexis

+1

Tuy nhiên, có loại "bytearray" - khá thuận tiện khi ne cần thao tác các ký tự theo giá trị của chúng. – jsbueno

7

Python không thực sự có một loại nhân vật, không giống như C, vì vậy yea, chr (ord là cách để làm điều đó.

Nếu bạn muốn làm điều đó một chút sạch hơn, bạn có thể làm một cái gì đó như :.

def add(c, x): 
    return chr(ord(c)+x) 
1

gì bạn đang làm thực sự là con đường đúng đắn.. Python không liên kết một ký tự với codepoint số của nó, như C và các ngôn ngữ tương tự. là khi bạn đi xa hơn ASCII, cùng một giá trị tích phân có thể đại diện cho các ký tự khác nhau, tùy thuộc vào mã hóa. C nhấn mạnh quyền truy cập trực tiếp vào các định dạng phần cứng cơ bản, nhưng python nhấn mạnh các ngữ nghĩa được xác định rõ.

2

Có là bytearray loại bằng Python - nó là chậm hơn so với dây thường, nhưng hành xử chủ yếu như một chuỗi C: nó là có thể thay đổi, acessing yếu tố inidividual nâng 0-255 số nguyên, insetead của chuỗi con với chiều dài 1, và bạn có thể gán cho các phần tử. Tuy nhiên, nó được thể hiện dưới dạng một chuỗi, và bằng Python 2, có thể được sử dụng trong hầu hết các nơi một chuỗi có thể mà không bị đúc đến một đối tượng str:

>>> text = bytearray("a") 
>>> text 
bytearray(b'a') 
>>> print text 
a 
>>> text[0]+=1 
>>> print text 
b 
>>> text[0] 
98 
>>> print "other_text" + text 
other_textb 

Khi sử dụng Python 3, để sử dụng các nội dung của một bytearray như một đối tượng văn bản, bạn chỉ cần gọi phương thức giải mã của nó với một mã hóa thích hợp chẳng hạn như "latin1" hoặc utf-8" :.?

>>> print ("other_text" + text.decode("latin1")) 
Các vấn đề liên quan