Built-in functions' (print(), input(), islower(), math.sqrt(), etc) definition was made by Python system writers. For your own functions, you write the definition. an exponentiation function: let's name it power, pass it base x and exponent n (multiply x by itself n times) Arguments are the x and the n. Return value is x to the nth power. Notes: function name is an identifier. Must obey rules for identifiers. and are the parameters. Can be used as local variables in the body of the function. Are assigned the values of the actual arguments in the call. Values of the actual arguments are passed in to become the values of the parameters. Changing the parameters will not change the actual arguments in the call of the function. i and p are local variables of the function. They are not accessible by other functions or the main program. They come into existence each time the function is called. They do not keep their values from the last call of the function. The parameters are essentially local variables that are initialized by the actual arguments. return statement is the value returned by/from the function. Typically the last statement in a function, but could have more than one in a function. When executed the function is finished. # evenly divisible by 4 but not by 100 unless also by 400 # different variable than function's parameter