Python「內建函數」(built-in functions)就是不用 import,隨時可以直接呼叫的函數,像 print()、len()、range() 這些,都算。
bytearray():可變的位元組序列
語法:
bytearray(整數) # 建立指定長度的零填充
bytearray(可迭代物件) # 從整數列表建立
bytearray(字串, encoding) # 從字串編碼建立
bytearray(bytes物件) # 從 bytes 複製建立bytearray 跟 bytes 很像,差別在於 bytearray 是「可變的」,可以修改裡面的內容:# 建立 bytearray
ba = bytearray(b'Hello')
print(ba) # bytearray(b'Hello')
print(ba[0]) # 72(H 的 ASCII 碼)
# 可以修改!(bytes 不行)
ba[0] = 74 # 改成 J
print(ba) # bytearray(b'Jello')
# 從整數列表建立
ba2 = bytearray([65, 66, 67])
print(ba2) # bytearray(b'ABC')bytearray 支援很多 list 的操作:
ba = bytearray(b'Hello')
# append:加一個 byte
ba.append(33) # 33 是 '!' 的 ASCII
print(ba) # bytearray(b'Hello!')
# extend:加多個 bytes
ba.extend(b' World')
print(ba) # bytearray(b'Hello! World')
# pop:移除最後一個
last = ba.pop()
print(chr(last)) # 'd'
print(ba) # bytearray(b'Hello! Worl')
# slice 切片
print(ba[0:5]) # bytearray(b'Hello')bytearray 和 bytes 的互相轉換:
# bytes → bytearray
b = b'Hello'
ba = bytearray(b)
ba[0] = 104 # 改成小寫 h
print(ba) # bytearray(b'hello')
# bytearray → bytes
b2 = bytes(ba)
print(b2) # b'hello'
print(type(b2)) # <class 'bytes'>小小綜合例子
# 簡單的凱薩加密(Caesar Cipher)
def caesar_encrypt(text, shift):
data = bytearray(text.encode('ascii'))
for i in range(len(data)):
if 65 <= data[i] <= 90: # 大寫字母
data[i] = (data[i] - 65 + shift) % 26 + 65
elif 97 <= data[i] <= 122: # 小寫字母
data[i] = (data[i] - 97 + shift) % 26 + 97
return data.decode('ascii')
message = "Hello Python"
encrypted = caesar_encrypt(message, 3)
print(f"原文:{message}")
print(f"加密:{encrypted}")
# 解密就是反向位移
decrypted = caesar_encrypt(encrypted, -3)
print(f"解密:{decrypted}")