在我的解释器中查看以下代码:
$ 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解释器会拒绝),那么将变量作为参数放在反向函数中是我最初自然会使用它的方式。
在我正在学习的Udemy课程中,讲师建议将变量放在函数前面,用点分隔。我明白计算机决定什么能工作,什么不能工作,我只是想知道为什么,因为我的(错误)方法来得更自然。
为什么变量有时必须放在函数前面,而其他时候它可以作为参数放在函数内部?
我想我现在有一个更重要的问题是:当我操作变量时,我如何知道何时将变量放在外部而不是内部?
感谢您的关注。
发布于 2018-06-02 11:58:51
这是因为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']
其中包含用于对象list
的reverse
函数。
发布于 2018-06-03 08:22:16
reverse是list数据类型的一种方法,python在不带点符号的情况下调用它时,会寻找reverse的定义。如果你的源代码中有def reverse()...它将使用它,或者如果你已经导入了一个定义了反向的库。第一个列表之所以有效,是因为first_list是一个对象,它有一个名为reverse的方法。
https://stackoverflow.com/questions/50653351
复制相似问题