This should work, assuming that the input is a double, long, or string. If the input is a string, you can remove the line that casts the value to a string.
exp = """
def convert(value,latlong):
num = str(int(value))
i = 0 if len(num) == 8 else 1
val = int(num[0:2+i]) + int(num[2+i:4+i])/60.0 + int(num[4+i:])/360000.0
if latlong.lower() in ["longitude", "long", "lambda"]: val = -val
return val"""
arcpy.CalculateField_management("<DBF FILE>", "<new lat field>",
'convert(!LAT!,"")', "PYTHON_9.3", exp)
With built in exp, it's difficult to maintain exact spacing and newline characters.
arcpy.CalculateField_management("<DBF FILE>", "<new lat field>",
'convert(!LAT!,"")', "PYTHON_9.3",
"""def convert(value,latlong):\n num = str(int(value))\n i = 0 if len(num) == 8 else 1\n val = int(num[0:2+i]) + int(num[2+i:4+i])/60.0 + int(num[4+i:])/360000.0\n if latlong.lower() in ["longitude", "long", "lambda"]: val = -val\n return val""")