【问题标题】:Python: When do you put variables inside or outside a function?Python:你什么时候将变量放在函数内部或外部?
【发布时间】:2018-11-12 04:21:38
【问题描述】:

在我的解释器中查看这段代码:

$ python3
Python 3.6.5 (default, Apr  1 2018, 05:46:30) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
<<< first_list = [1,2,3,4,5,6]
<<< second_list = [101,202,303,404]
<<< first_list.reverse()
<<< print(first_list)
[6, 5, 4, 3, 2, 1]
<<< reverse(second_list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'reverse' is not defined
<<<

在第一行和第二行,我定义了两个列表。然后我继续以两种不同的方式颠倒 first_list 和 second_list 的顺序。第一种反转成功,第二种被拒绝。

如果我要编写脚本(显然会被 Python 解释器拒绝),将变量作为参数放在 reverse 函数中是我最初自然会使用它的方式。

我正在学习的 Udemy 课程的讲师建议将变量放在函数前面,用点分隔。我知道计算机决定什么有效,什么无效。我只是想知道为什么,因为我的(错误的)方法来得这么自然。

为什么变量有时必须放在函数前面,而有时它可以作为参数放在函数内部?

我想我现在遇到的更重要的问题是:当我处理变量时,我怎么知道何时将变量放在外部和内部?

感谢您的关注。

【问题讨论】:

  • 这个问题可能对stackoverflow.com/q/20981789/831878有帮助
  • 你想要list(reversed(second_list))吗?
  • reversed 是带有参数的内置函数。列表对象的reverse 方法不接受任何参数并反转其绑定到的列表。对于最后一种情况,您只需要使用reversed(second_list)

标签: python function object methods


【解决方案1】:

这是因为 reverse() 函数是作为 first_list 对象的 attribute 创建的。因此,reverse() 不是您可以调用并提供 first_list 作为参数的函数。

重要的是要知道 Python 中的一切都是对象,每个对象都有属性。

例如,如果我在python解释器中创建一个列表new_list = [1, 2, 3],然后执行dir(new_list)(这显示了new_list的属性),我会得到以下信息:

>>> new_list = [1, 2, 3]
>>> dir(new_list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', 
'__delslice__', '__doc__', '__eq__', '__format__', '__ge__', 
'__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', 
'__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', 
'__lt__', '__mul__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', 
'__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 
'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

其中包含对象listreverse 函数。

【讨论】:

    【解决方案2】:

    reverse 是一种列表数据类型的方法,当您在没有点符号的情况下调用它时,python 正在寻找 reverse 的定义。如果您的源代码中有 def reverse()... 它会使用它,或者如果您导入了定义反向的库。第一个列表有效,因为 first_list 是一个对象,它有一个名为 reverse 的方法。

    python3 documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 2017-03-08
      • 2012-08-18
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      相关资源
      最近更新 更多