在我的口译员中查看此代码:
$ 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课程中的讲师建议将变量放在以点分隔的函数前面。我知道计算机决定哪些有效,哪些无效。我只是想知道为什么,因为我的(错误的)方法更自然地来了。
为什么变量有时必须在函数前面进行,有时它可以作为参数进入函数内部?
我认为现在更重要的问题是:当我操纵变量时,我怎么知道何时将变量放在vs里面?
感谢您的关注。
答案 0 :(得分:2)
这是因为reverse()
函数被创建为attribute
对象的first_list
。因此,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']
其中包含对象reverse
的{{1}}函数。
答案 1 :(得分:1)
reverse是列表数据类型的一种方法,python在没有点表示法的情况下调用它时会查找反向的定义。如果你的源代码在某处def reverse()...它会使用它,或者如果你导入了一个定义了反向的库。第一个列表有效,因为first_list是一个具有反向方法的对象。