在这个函数中,"的真正含义是什么? *"运营商?

时间:2016-03-17 09:46:50

标签: python operator-keyword

from Crypto.Cipher import AES
import os
import base64
import socket
import subprocess

BLOCK_SIZE = 16
PADDING='#'

def _pad(data, pad_with=PADDING):
    return data + (BLOCK_SIZE - len(data) % BLOCK_SIZE) * PADDING

我理解角色"#"用于填充块但我无法理解" *"的含义,通常用于乘法。

4 个答案:

答案 0 :(得分:4)

在Python中,您可以将一个字符串乘以一个整数,以多次重复该字符串。 E.g。

'a' * 4

产生

'aaaa'

任何类都可以通过implementing specially-named methods重载*之类的运算符。

答案 1 :(得分:1)

* PADDING正是指( PADDING)。

* PADDING (BLOCK_SIZE - len(data) % BLOCK_SIZE)#添加到data 的末尾。
它会根据特定数据的大小和BLOCK_SIZE计算特定数据所需的填充的数量,并添加额外的# PADDING

计算是BLOCK_SIZE减去传递给函数的data的长度,所有这些都以BLOCK_SIZE为模。

示例:

>>> BLOCK_SIZE = 20
>>> data = 'this is my data'
>>> PADDING = '#'
>>> data + (BLOCK_SIZE - len(data) % BLOCK_SIZE) * PADDING
'this is my data#####'

执行的计算是:

data + (20 - 15%20)*PADDING = data + (20 - 15)*PADDING = data + 5*PADDING = data + '#####'

答案 2 :(得分:1)

str类型获取*运算符:

$ http get localhost:6666/bar
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 16
Content-Type: text/html; charset=utf-8
Date: Thu, 17 Mar 2016 09:51:19 GMT
ETag: W/"10-cReU2J3jD/VaD5KVhqwLow"
X-Powered-By: Express

Custom 404 page.

因为'#' * 10 = '##########' 方法在str类定义中定义:

__mul__()

答案 3 :(得分:-1)

>>> a= '#'
>>> a* 12
'############'
>>>