【问题标题】:"i" variable in "for" statement valid inside functions?“for”语句中的“i”变量在函数内部有效吗?
【发布时间】:2018-07-23 11:03:20
【问题描述】:

我在python中使用这个结构:从for循环调用一个函数;该函数在内部使用迭代器的 i 值。我也应该传递 i 值吗?还是全球性的?这里的最佳做法是什么?

def function_1(A):
   (use if "i" inside here)

for i in range (etc etc):
   function_1(A)

【问题讨论】:

  • 一个函数应该单独处理它的形参,尽可能不使用任何隐式全局状态……
  • 如果function_1需要该值,则传递该值。

标签: python function variables for-loop


【解决方案1】:

如果这真的是A 的一个函数,你应该明确地将迭代器的值传递给它。函数的整体思想是它使用其参数执行一些独立操作。该函数应该对调用它的环境一无所知。它不应该知道它是从循环中调用的,也不应该知道在其调用者中调用了什么变量。否则,这个函数在这个脚本之外的任何地方都是无用的,如果有任何变化,甚至在同一个脚本内也无用。

这是关于函数、类或模块/包的一般设计原则。一个对象不应该知道谁在使用它,用户应该知道它应该如何使用。

【讨论】:

    【解决方案2】:

    如果您需要在循环的每次迭代中将 i 的值传递给 function_1,那么您的代码将类似于:

    def function_1(A):
        # use A...
    
    for i in range(...):
      function_1(i)
    

    在您对function_1 的定义中,A 是函数内部给您在调用时传递的参数的名称(在您的情况下为i)。

    【讨论】:

    • 变量 i 确实存在于全局范围内,因为 for 循环在全局范围内。 Python for 循环没有自己的作用域。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    相关资源
    最近更新 更多