If you really need the discrete difference between adjacent row and/or column pixel values, you can use NumPy's diff function along one row or column axis:
import numpy as np
# Somehow load raster into NumPy, I use GDAL
>>> dtm = np.array([[560.78, 556.04, 559.11],
[559.84, 560.77, 560.24],
[560.03, 559.82, 560.05]])
>>> print(dtm)
[[ 560.78 556.04 559.11]
[ 559.84 560.77 560.24]
[ 560.03 559.82 560.05]]
>>> dzdrow = np.diff(dtm, axis=0)
>>> dzdrow
[[-0.94 4.73 1.13]
[ 0.19 -0.95 -0.19]]
>>> dzdcol = np.diff(dtm, axis=1)
>>> dzdcol
[[-4.74 3.07]
[ 0.93 -0.53]
[-0.21 0.23]]
I generally would have more GDAL Python code here to write the two arrays to two raster files so that I can view them in ArcGIS or wherever.
As expected, the difference along columns output has one fewer column, and the difference along rows output has one fewer row. However, as there are two outputs from this analysis, it can be more difficult to interpret (compared to calculating slope with one output). With this method, the row and column directions are two perpendicular components, so you can't combine them into one raster output.