assign output of print to a variable in python

前端 未结 6 1416
心在旅途
心在旅途 2021-01-15 01:41

i want to know how to assign the output of print to a variable.

so if

mystring = \"a=\\\'12\\\'\"

then

print mys         


        
相关标签:
6条回答
  • 2021-01-15 02:05

    I believe one of these two things will accomplish what you're looking for:

    The Python exec statement: http://docs.python.org/reference/simple_stmts.html#exec or the Python eval function: http://docs.python.org/library/functions.html#eval

    Both of them let you dynamically evaluate strings as Python code.

    UPDATE:

    What about:

    def calltest(keywordstr):
        return eval("test(" + keywordstr + ")")
    

    I think that will do what you're looking for.

    0 讨论(0)
  • 2021-01-15 02:12

    If you have a string 'my_string' like this:

    a=123 b=456 c='hello'
    

    Then you can pass it to a function 'my_fun' like this:

    my_fun(**eval('{' + my_string.replace(' ', ',') + '}'))
    

    Depending on the precise formatting of my_string, you may have to vary this a little, but this should get you 90% of the way there.

    0 讨论(0)
  • 2021-01-15 02:15

    You can call __str__ and __repr__ on python objects to get their string representations (there's a tiny difference between them, so consult the docs). That's actually done by print internally.

    0 讨论(0)
  • 2021-01-15 02:20

    Redirect stdout and capture its output in an object?

    import sys
    
    # a simple class with a write method
    class WritableObject:
        def __init__(self):
            self.content = []
        def write(self, string):
            self.content.append(string)
    
    # example with redirection of sys.stdout
    foo = WritableObject()                   # a writable object
    sys.stdout = foo                         # redirection
    
    print "one, two, three, four"            # some writing
    

    And then just take the "output" from foo.content and do what you want with it.

    Please disregard if I have misunderstood your requirement.

    0 讨论(0)
  • 2021-01-15 02:24

    for more of an explanation: i have a list of strings i got from a a comment line of a data file. it looks like this:

    "a='0.015in' lPrime='0.292' offX='45um' offY='75um' sPrime='0.393' twistLength='0'",
     "a='0.015in' lPrime='0.292' offX='60um' offY='75um' sPrime='0.393' twistLength='0'",
     "a='0.015in' lPrime='0.292' offX='75um' offY='75um' sPrime='0.393' twistLength='0'",
     '']
    

    i want to put the values into some structure so i can plot the various things versus any variabls so the list is a legend basically, and i want to plot functions of the traces versus variables given in teh legend.

    so if for each entry i have a trace, then i may want to plot max(trace) vs offX for a series of a values.

    0 讨论(0)
  • 2021-01-15 02:32

    I wouldn't do it that way, personally. A far less hackish solution is to build a dictionary from your data first, and then pass it whole to a function as **kwargs. For example (this isn't the most elegant way to do it, but it is illustrative):

    import re
    
    remove_non_digits = re.compile(r'[^\d.]+')
    
    inputList = ["a='0.015in' lPrime='0.292' offX='45um' offY='75um' sPrime='0.393' twistLength='0'",
     "a='0.015in' lPrime='0.292' offX='60um' offY='75um' sPrime='0.393' twistLength='0'",
     "a='0.015in' lPrime='0.292' offX='75um' offY='75um' sPrime='0.393' twistLength='0'", '']
    
    #remove empty strings
    flag = True
    while flag:
        try:
            inputList.remove('')
        except ValueError:
            flag=False
    
    outputList = []
    
    for varString in inputList:
        varStringList = varString.split()
        varDict = {}
        for aVar in varStringList:
            varList = aVar.split('=')
            varDict[varList[0]] = varList[1]
        outputList.append(varDict)
    
    for aDict in outputList:
        for aKey in aDict:
            aDict[aKey] = float(remove_non_digits.sub('', aDict[aKey]))
    
    print outputList
    

    This prints:

    [{'a': 0.014999999999999999, 'offY': 75.0, 'offX': 45.0, 'twistLength': 0.0, 'lPrime': 0.29199999999999998, 'sPrime': 0.39300000000000002}, {'a': 0.014999999999999999, 'offY': 75.0, 'offX': 60.0, 'twistLength': 0.0, 'lPrime': 0.29199999999999998, 'sPrime': 0.39300000000000002}, {'a': 0.014999999999999999, 'offY': 75.0, 'offX': 75.0, 'twistLength': 0.0, 'lPrime': 0.29199999999999998, 'sPrime': 0.39300000000000002}]
    

    Which appears to be exactly what you want.

    0 讨论(0)
提交回复
热议问题