Project Euler Problem 11 ("Largest product in a grid") in Python
If you restricted your lines to 79 columns, as recommended by the Python style guide (PEP8), then we wouldn't have to scroll the code horizontally to read it here.

Anyway, all four loops have the same form:

max(grid[i][j]
    * grid[i+i_step][j+j_step]
    * grid[i+2*i_step][j+2*j_step]
    * grid[i+3*i_step][j+3*j_step]
    for i in range(i_min, i_limit)
    for j in range(j_limit))


given particular choices of parameters i_step, j_step, i_min, i_limit and j_limit. So we can implement the program as a data-driven loop over those choice of parameters:

print(max(max(grid[i][j]
              * grid[i+i_step][j+j_step]
              * grid[i+2*i_step][j+2*j_step]
              * grid[i+3*i_step][j+3*j_step]
              for i in range(i_min, i_limit)
              for j in range(j_limit)))
          for i_step, j_step, i_min, i_limit, j_limit
          in [( 0, 1, 0, 20, 17),  # horizontal
              ( 1, 0, 0, 17, 20),  # vertical
              ( 1, 1, 0, 17, 17),  # leading diagonal
              (-1, 1, 3, 20, 17)]) # trailing diagonal


If you want to avoid writing out the multiplication, then the best approach would be to define a helper function, for example using functools.reduce and operator.mul:

from functools import reduce
from operator import mul

def product(iterable):
    """Return the product of the numbers in the iterable."""
    return reduce(mul, iterable, 1)


and then:

print(max(max(product(grid[i+k*i_step][j+k*j_step] for k in range(4))
              for i in range(i_min, i_limit)
              for j in range(j_limit)))
          for i_step, j_step, i_min, i_limit, j_limit
          in [( 0, 1, 0, 20, 17),  # horizontal
              ( 1, 0, 0, 17, 20),  # vertical
              ( 1, 1, 0, 17, 17),  # leading diagonal
              (-1, 1, 3, 20, 17)]) # trailing diagonal