Python: Когда вы помещаете переменные внутри или вне функции? - PullRequest
0 голосов
/ 02 июня 2018

Проверьте этот код в моем интерпретаторе:

$ 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 двумя различными способами.Первое обращение успешно, тогда как второй путь отклонен.

Помещение переменной в функцию reverse в качестве параметра - это то, как я изначально использовал бы ее естественным образом, если бы написал сценарий (который, очевидно, был бы отклоненИнтерпретатор Python).

Преподаватель курса Удеми, который я беру, предлагает поместить переменную перед функцией, отделенную точкой.Я понимаю, что компьютер диктует, что работает, а что нет.Я просто хочу знать, почему, поскольку мой (ошибочный) подход гораздо более естественен.

Почему переменные иногда должны идти перед функцией, когда в других случаях они могут входить в функцию как параметр?

Я предполагаю, что гораздо более важный вопрос, который у меня сейчас возникает, заключается в следующем: когда я манипулирую переменными, как мне узнать, когда помещать переменные вне vs внутри?

Спасибо за ваше внимание.

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

reverse - это метод типа данных списка, python ищет определение реверса, когда вы вызываете его без точечной нотации.Если бы в вашем исходном коде было где-то def reverse () ... он бы использовал это, или если бы вы импортировали библиотеку, которая определила reverse.Первый список работает, потому что first_list - это объект, у которого есть метод с именем reverse.

python3 документация

0 голосов
/ 02 июня 2018

Это происходит потому, что функция 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 для объекта list.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...