Generate range of characters import string
def charRange(mini, maxi, step=1):
  if mini in string.ascii_uppercase:
    strg = string.ascii_uppercase
  else:
    strg = string.ascii_lowercase
  return (strg[i] for i in 
          range(string.ascii_lowercase.index(mini.lower()),
                string.ascii_lowercase.index(maxi.lower())+1,
                step))


Examples of usage:

for i in charRange('A', 'Z'):
    print(i)
&gt; A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
for i in charRange('a', 'h'):
  print(i, end=' ')
&gt; a b c d e f g h
for i in charRange('A', 'J', 2):
  print(i, end=' ')
&gt; A C E G I
What if you would operate with character code ranges and use the ord() and chr() built-in functions instead:

def char_range(mini, maxi, step=1):
    for code in range(ord(mini), ord(maxi) + 1, step):
        yield chr(code)


Or, with the yield from (Python 3.3+):

def char_range(mini, maxi, step=1):
    yield from range(ord(mini), ord(maxi) + 1, step)


Demo:

$ ipython3 -i test.py
In [1]: for char in char_range('a', 'h'):
   ...:     print(char, end=' ')
   ...:     
a b c d e f g h 


Couple notes about the code style of your solution:


according to PEP8, there should be two blank lines after the imports
use the "lower_case_with_underscores" style to name the function - charRange() vs char_range() (PEP8 reference)