【问题标题】:How to pass a string variable from one function to another?如何将字符串变量从一个函数传递到另一个函数?
【发布时间】:2019-10-08 12:29:59
【问题描述】:

如果我想假设执行 test1 并将结果传递给 excel 然后执行 test2 然后传递结果,我会怎么做?现在所有测试都必须一起执行。这可能吗?

import os
import xlswriter
from datetime import datetime
import time


def save_results():
    os.chdir(r'C:\Users\vrozakos\Documents\10P_Results')
    workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
    worksheet = workbook.add_worksheet()
    bold = workbook.add_format({'bold': True})
    worksheet.set_column('A:A', 20)
    worksheet.write('B1', test_1())
    worksheet.write('B2', test2())
    workbook.close()



def test1():
    output = str(ser.read(1000).decode())
    output = str(output)
    if "0x1" in output :
        print('Pass')
        return 'Pass'
    else:
        print('Fail')
        return 'Fail'


def test2():
    output2 = str(ser.read(1000).decode())
    print(output2)
    test2_output = str(output2)
    if "0x1" in test2_output:
        print('Pass')
        return 'Pass'
    else:
        print('Fail')
        return 'Fail'

【问题讨论】:

    标签: python python-3.x function xlsxwriter


    【解决方案1】:

    最好的解决方案似乎是这个,你应该遵循这个:

    def save_results():
        os.chdir(r'C:\Users\user\Documents\Results')
        workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
        worksheet = workbook.add_worksheet()
        bold = workbook.add_format({'bold': True})
        worksheet.set_column('A:A', 20)
        worksheet.write('A1', test1())
        worksheet.write('B1', test2())
        workbook.close()
    

    【讨论】:

      【解决方案2】:

      这真的很简单,不需要改变太多:

      def save_results():
          os.chdir(r'C:\Users\user\Documents\Results')
          workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
          worksheet = workbook.add_worksheet()
          bold = workbook.add_format({'bold': True})
          worksheet.set_column('A:A', 20)
          worksheet.write('A1', test1())
          worksheet.write('B1', test2())
          workbook.close()
      

      请注意,我只是在您需要结果的地方调用了函数。我假设这里缺少的其他变量已经在您的代码中的其他地方定义了。

      编辑:

      或者,据我从您的 cmets 了解到,您可以在每个测试中调用 save_results,仅在运行时调用,但您必须让 save_results 接受一些参数:

      def save_results(result, target_cell):
          os.chdir(r'C:\Users\vrozakos\Documents\10P_Results')
          workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
          worksheet = workbook.add_worksheet()
          bold = workbook.add_format({'bold': True})
          worksheet.set_column('A:A', 20)
          worksheet.write(target_cell, result)
          workbook.close()
      
      def test1():
          output = str(ser.read(1000).decode())
          output = str(output)
          if "0x1" in output :
              result = 'Pass'
          else:
              result = 'Fail'
          print(result)
          save_results(result, 'A1')
      
      def test2():
          output2 = str(ser.read(1000).decode())
          print(output2)
          test2_output = str(output2)
          if "0x1" in test2_output:
              result = 'Pass'
          else:
              result = 'Fail'
          print(result)
          save_results(result, 'B1')
      

      但是您应该注意,每次调用 save_results 都会添加一个新工作表,您可能希望修改此函数以每次都写入同一个工作表(但这是关于此事的另一个问题的主题)。

      就像我说的,您的代码有很多问题,但这里的基本逻辑(在我的两个示例中)是在彼此内部调用函数以获取它们的结果(或向它们传递参数)没有问题。

      【讨论】:

      • 首先感谢您的回答!我可能需要稍微改变一下这个问题,因为即使这有效,它也不完全是它应该工作的方式。如果我想让我们说执行一个测试(函数),然后将结果传递给 excel,我会怎么做?现在所有测试都必须一起执行吗?这可能吗?
      • 这是一个问题:如果我想让我们说执行一个测试(函数),然后将结果传递给 excel,我该怎么做?现在所有测试都必须一起执行吗?那可能吗?我也会将其编辑为主要问题
      • @Bill the way in my answer分别运行每个测试,所以我不确定你的意思。如果您只想运行其中一个,请删除另一行代码。或者,让每个测试仅在运行时将其自己的值写入xlsx 文件(这根本不涉及您的save_results 函数)
      • Or alternitavely, have each test write it's own value to the xlsx file only when it is run,这是什么意思,我该怎么做?
      • @Bill 我再次编辑了我的问题,以向您展示一个示例,使用您的 save_results 函数,但如果不对该函数进行重大修改,这也不会是预期的行为。在我看来,您应该就任何此类问题提出单独的问题
      【解决方案3】:

      您可以从 pll_test 函数接收 main 函数中的值。如果您打算在 print 语句之后返回,则必须在 print 语句之后添加该行作为 return。

      现在返回值作为参数传递给调用 save_results 函数。

      【讨论】:

        【解决方案4】:
        def save_results(result):
            os.chdir(r'C:\Users\vrozakos\Documents\10P_Results')
            workbook = xlsxwriter.Workbook(datetime_output_results+'.xlsx')
            worksheet = workbook.add_worksheet()
            bold = workbook.add_format({'bold': True})
            worksheet.set_column('A:A', 20)
            worksheet.write('A1', 'PLL TEST', bold)
            worksheet.write('B1',result) --> result is string value from pll_test function
            workbook.close()
        
        def pll_test():
            output = str(ser.read(1000).decode())
            alarm_output = str(output)
            if "pll reg=0x1 val=0x3f" in alarm_output :
                save_results("pass") --> pass value to function
                print('Pass')
            else:
                save_results("fail")
                print('fail')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-12
          • 2021-04-23
          • 1970-01-01
          相关资源
          最近更新 更多