代码之家  ›  专栏  ›  技术社区  ›  W Toe

Python循环函数参数

  •  0
  • W Toe  · 技术社区  · 7 年前

    我是新来的,刚开始从codeacademy学习Python。在下面的函数中,我无法理解为什么print\u board函数使用参数board\u In,但board\u In在任何地方都没有引用?

    board = []
    
    for i in range(5):
      board.append(["O"] * 5)
    
    def print_board(board_in):
      for row in board:
        print row
    
    print_board(board)
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Martijn Pieters    7 年前

    这个 board_in Parameter完全未使用。您发现了错误代码 可能 本打算使用该参数,但有人出错并忘记使用它。

    函数体改用全局名称 board (与作为参数传入函数调用的名称相同)。这就是代码正常工作的原因,但是 不会 当您传入完全不同的内容时,按预期工作:

    >>> print_board(None)
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    >>> print_board("This argument is ignored, so it doesn't matter what you pass in")
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    ['O', 'O', 'O', 'O', 'O']
    >>> board = [['A new value', 'for the board global'], ['means the output', 'changes']]
    >>> print_board(2 + 2)
    ['A new value', 'for the board global']
    ['means the output', 'changes']
    

    它将继续打印 当您传入完全不同的内容时列出,例如 print_board(None) . 它将以 NameError 当您使用 del board 在调用函数(并传入其他内容)之前:

    >>> del board  # remove the global altogether
    >>> print_board({'foo', 'bar', 'baz'})
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in print_board
    NameError: global name 'board' is not defined
    

    我怀疑 预定的 实施是:

    def print_board(board_in):
        for row in board_in:
            print row
    

    现在 board\u输入 实际上正在使用。