title: Looping through list of functions in a function in Python dynamically
body: <p>I'd like to see if it's possible to run through a list of functions in a function. The closest thing I could find is looping through an entire module. I only want to use a pre-selected list of functions.</p>
  
  <p>Here's my original problem:</p>
  
  <ol>
  <li>Given a string, check each letter to see if any of the 5 tests fulfill.</li>
  <li>If a minimum of 1 letter passes a check, return True.</li>
  <li>If all letters in the string fails the check, return False.</li>
  <li>For each letter in the string, we will check these functions: isalnum(), isalpha(), isdigit(), islower(), isupper()</li>
  <li>The result of each test should print to different lines. </li>
  </ol>
  
  <p>Sample Input</p>
  
  <pre><code>    qA2
  </code></pre>
  
  <p>Sample Output (must print to separate lines, True if at least one letter passes, or false is all letters fail each test):</p>
  
  <pre><code>    True
      True
      True
      True
      True
  </code></pre>
  
  <p>I wrote this for one test. Of course I could just write 5 different sets of code but that seems ugly. Then I started wondering if I could just loop through all the tests they're asking for. </p>
  
  <p>Code for just one test:</p>
  
  <pre><code>    raw = 'asdfaa3fa'
      counter = 0
      for i in xrange(len(raw)):
          if raw[i].isdigit() == True: ## This line is where I'd loop in diff func's
              counter = 1
              print True
              break
      if counter == 0:
          print False
  </code></pre>
  
  <p>My fail attempt to run a loop with all the tests:</p>
  
  <pre><code>    raw = 'asdfaa3fa'
      lst = [raw[i].isalnum(),raw[i].isalpha(),raw[i].isdigit(),raw[i].islower(),raw[i].isupper()]
      counter = 0
      for f in range(0,5):
          for i in xrange(len(raw)):
              if lst[f] == True: ## loop through f, which then loops through i
                  print lst[f] 
                  counter = 1
                  print True
          break
          if counter == 0:
      print False
  </code></pre>
  
  <p>So how do I fix this code to fulfill all the rules up there?</p>
  
  <hr>
  
  <p><strong>Using info from all the comments - this code fulfills the rules stated above, looping through each method dynamically as well.</strong></p>
  
  <pre><code>    raw = 'ABC'
      functions = [str.isalnum, str.isalpha, str.isdigit, str.islower,  str.isupper]
  
      for func in functions:
          print any(func(letter) for letter in raw)
  </code></pre>
  
  <p><strong>getattr approach (I think this is called introspection method?)</strong></p>
  
  <pre><code>    raw = 'ABC'
  
      meths = ['isalnum', 'isalpha', 'isdigit', 'islower', 'isupper']
      for m in meths: 
          print any(getattr(c,m)() for c in raw)
  </code></pre>
  
  <p><strong>List comprehension approach:</strong></p>
  
  <pre><code>    from __future__ import print_function ## Changing to Python 3 to use print in list comp
  
      raw = 'ABC'
      functions = [str.isalnum, str.isalpha, str.isdigit, str.islower, str.isupper]
      solution = [print(func(raw)) for func in functions]
  </code></pre>