Alguém poderia explicar para mim esse código?

def pede_matriz():
m = int(input("Digite o numero de linhas da matriz A: "))
n = int(input("Digite o numero de colunas da matriz A: "))
A = le_matriz(m,n)

p = int(input("Digite o numero de colunas da matriz B: "))
B = le_matriz(n,p)

C = []
for i in range(m):
    C.append([])
    for j in range(p):
        soma = 0
        for k in range(n):
            soma += A[i][k] * B[k][j]
        
        C[i].append(soma)

#Chamada da função que imprime o resultado da Multiplicação entre as matrizes        
print("O resultado da multiplicaçao de A por B e: ")
imprime_matriz(C)        

def le_matriz(m, n):
“”"
(int, int) --> list

Funçao que recebe como entrada um numero de linhas m
e um numero de colunas n e entao le uma matriz de inteiros
tamanho m x n, ou seja, uma lista contendo m listas
com n elementos cada. A matriz lida é devolvida como
valor de retorno da funçao. 
"""

print("Digite os elementos da matriz de tamanho %dx%d:" %(m,n))
matriz = []
for i in range(m):
    matriz.append([])
    for j in range(n):
        elemento = int(input("Elemento da %da. linha, %da. coluna: " %(i+1,j+1)))
        matriz[i].append(elemento)
        
return matriz

def imprime_matriz(matriz):
“”"
(list) --> None

Funçao que recebe uma matriz como entrada, ou seja uma
lista de listas, e entao a imprime.
A funçao nao tem nenhum valor de retorno.
"""

for linha in matriz:
    for elemento in linha:
        print(elemento, end = " ")
    print()

#Chamada da função que solicita os dados
pede_matriz()