Python:你什么时候在函数内部或外部放置变量?

时间:2018-06-02 03:54:01

标签: python function object methods

在我的口译员中查看此代码:

$ 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里面?

感谢您的关注。

2 个答案:

答案 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是一个具有反向方法的对象。

python3 documentation