• <tfoot id='cjZEV'></tfoot>
      <legend id='cjZEV'><style id='cjZEV'><dir id='cjZEV'><q id='cjZEV'></q></dir></style></legend>

        <i id='cjZEV'><tr id='cjZEV'><dt id='cjZEV'><q id='cjZEV'><span id='cjZEV'><b id='cjZEV'><form id='cjZEV'><ins id='cjZEV'></ins><ul id='cjZEV'></ul><sub id='cjZEV'></sub></form><legend id='cjZEV'></legend><bdo id='cjZEV'><pre id='cjZEV'><center id='cjZEV'></center></pre></bdo></b><th id='cjZEV'></th></span></q></dt></tr></i><div id='cjZEV'><tfoot id='cjZEV'></tfoot><dl id='cjZEV'><fieldset id='cjZEV'></fieldset></dl></div>

          <bdo id='cjZEV'></bdo><ul id='cjZEV'></ul>

        <small id='cjZEV'></small><noframes id='cjZEV'>

        Python-通过函数传递变量

        Python - Passing variables through functions(Python-通过函数传递变量)
            <i id='zQY3K'><tr id='zQY3K'><dt id='zQY3K'><q id='zQY3K'><span id='zQY3K'><b id='zQY3K'><form id='zQY3K'><ins id='zQY3K'></ins><ul id='zQY3K'></ul><sub id='zQY3K'></sub></form><legend id='zQY3K'></legend><bdo id='zQY3K'><pre id='zQY3K'><center id='zQY3K'></center></pre></bdo></b><th id='zQY3K'></th></span></q></dt></tr></i><div id='zQY3K'><tfoot id='zQY3K'></tfoot><dl id='zQY3K'><fieldset id='zQY3K'></fieldset></dl></div>

            <tfoot id='zQY3K'></tfoot>

            <small id='zQY3K'></small><noframes id='zQY3K'>

            <legend id='zQY3K'><style id='zQY3K'><dir id='zQY3K'><q id='zQY3K'></q></dir></style></legend>
              <bdo id='zQY3K'></bdo><ul id='zQY3K'></ul>
                <tbody id='zQY3K'></tbody>

                  本文介绍了Python-通过函数传递变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我使用Python大约有一周了。我已经研究了与此相关的各种其他问题,并对我执行这些建议的尝试失败感到相当沮丧。

                  根据我读到的内容,我尝试了几种传递变量的方法。例如(这不一定代表连贯的尝试.我尝试了许多变体,不得不返回以获取值得发布的代码):

                  def verify_nums():
                      globhours = hours
                      globrate = rate
                      try:
                          globhours = float(globhours)
                          globrate = float(globrate)
                          return globhours,globrate
                      except:
                          print("You must provide numbers")
                  
                  def calc():
                      globhours = globhours
                      globrate = globrate
                      if globhours > 40:
                          base = 40 * globrate
                          ot = (globhours - 40) * (globrate * 1.5)
                          pay = base + ot
                          print(pay)
                      else:
                          pay = globrate * globhours
                          print(pay)
                  
                  
                  hours = input("Enter hours worked: ")
                  rate = input("Enter hourly rate: ")
                  verify_nums()
                  calc()
                  

                  我对如何将小时和费率变量传递给calc()函数感到非常困惑。

                  我最终认为我可以将这些合并到一个函数中.

                  def paycalc(hours,rate):
                      etc.
                      etc.
                  
                  hours = input("Enter hours: ")
                  hours = input("Enter hours: ")
                  paycalc(hours,rate)
                  

                  但是为了学习,我真的很想把这个全局/局部的事情弄清楚。

                  谢谢您的帮助!

                  Python

                  您似乎试图让推荐答案根据它们的名称猜测哪些函数应该是全局的,哪些是本地的。Python不能做到这一点。如果为函数中的变量赋值,并希望该赋值是全局的,则需要在函数的顶部使用global语句:

                  def verify_nums():
                      global globhours
                      global blograte
                      globhours = hours
                      globrate = rate
                      # ...
                  

                  此外,globhours = globhours不会做任何有用的事情-事实上,它会导致问题。如果在该函数中也使用global globhours,则该语句没有意义。否则,您将创建一个局部变量,并将其赋值为…尚不存在局部变量的值。

                  无论如何,如果您将正确的global声明添加到所有函数,它们将会起作用,但这不是一个很好的设计。


                  这里确实不需要任何全局变量。如果您考虑的是而不是变量,那么一切都会变得容易得多。

                  您的verify_nums函数需要处理两个值。因此,只需将这些值作为参数传递即可。并且它需要返回两个值-这很简单,您已经完成了这一部分。

                  现在调用方必须存储它返回的这两个值,以便可以将它们传递给calc函数。它还可以接受两个值作为参数。

                  把这些放在一起:

                  def verify_nums(hours, rate):    
                      try:
                          numhours = float(hours)
                          numrate = float(rate)
                          return numhours, numrate
                      except:
                          print("You must provide numbers")
                  
                  def calc(hours, rate):
                      if hours > 40:
                          base = 40 * rate
                          ot = (hours - 40) * (rate * 1.5)
                          pay = base + ot
                          print(pay)
                      else:
                          pay = rate * hours
                          print(pay)
                  
                  globhours = input("Enter hours worked: ")
                  globrate = input("Enter hourly rate: ")
                  hours, rate = verify_nums(globhours, globrate)
                  calc(hours, rate)
                  

                  剩下的一个问题是:如果用户输入出现错误,会发生什么情况?在verify_nums中,您使用except:处理错误,然后打印一条消息,什么也不做。这意味着您返回None。因此,当调用者尝试执行hours, rate = None时,它将得到一个错误,而您没有处理该错误。你不能没有价值观就这样生活下去。您能做什么?

                  更笼统地说,"返回一对数字,或返回None"对于函数来说是一个令人困惑的约定。你怎么使用那个功能?还有一大堆丑陋的类型检查。但是,"返回两个数字,或者提出一个例外"是一个非常好的合同。你怎么使用那个功能?使用简单的try

                  这就是为什么最好将异常处理放在您可以处理它的正确位置。如果出现错误,您希望跳过调用calc,因此except必须位于您调用calc的位置。

                  def verify_nums(hours, rate):    
                      numhours = float(hours)
                      numrate = float(rate)
                      return numhours, numrate
                  
                  def calc(hours, rate):
                      if hours > 40:
                          base = 40 * rate
                          ot = (hours - 40) * (rate * 1.5)
                          pay = base + ot
                          print(pay)
                      else:
                          pay = rate * hours
                          print(pay)
                  try:
                      globhours = input("Enter hours worked: ")
                      globrate = input("Enter hourly rate: ")
                      hours, rate = verify_nums(globhours, globrate)
                  except ValueError:
                      print("You must provide numbers")
                  else:
                      calc(hours, rate)
                  

                  您可能需要考虑的另一个改进是:让calc返回工资,而不是打印它,并让调用者打印它返回的值。

                  这篇关于Python-通过函数传递变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)
                  Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)
                  Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)
                  Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)
                  Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)
                  Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)

                  <tfoot id='DwNU4'></tfoot>
                1. <small id='DwNU4'></small><noframes id='DwNU4'>

                2. <legend id='DwNU4'><style id='DwNU4'><dir id='DwNU4'><q id='DwNU4'></q></dir></style></legend>
                    <bdo id='DwNU4'></bdo><ul id='DwNU4'></ul>

                      <i id='DwNU4'><tr id='DwNU4'><dt id='DwNU4'><q id='DwNU4'><span id='DwNU4'><b id='DwNU4'><form id='DwNU4'><ins id='DwNU4'></ins><ul id='DwNU4'></ul><sub id='DwNU4'></sub></form><legend id='DwNU4'></legend><bdo id='DwNU4'><pre id='DwNU4'><center id='DwNU4'></center></pre></bdo></b><th id='DwNU4'></th></span></q></dt></tr></i><div id='DwNU4'><tfoot id='DwNU4'></tfoot><dl id='DwNU4'><fieldset id='DwNU4'></fieldset></dl></div>
                        <tbody id='DwNU4'></tbody>