2015-10-12 1 views
1

Я пытаюсь изучить Python 3. Это пример, с которого я пытаюсь учиться. Поэтому здесь я определяю функцию для чтения текста. Откройте файл, прочитайте содержимое, распечатайте его и закройте.Основное использование функций в python

Так что этот код работает хорошо. Однако я не понимаю, почему мы пишем:

print (contents_of_file), но не читать (кавычки). Почему это quotes.read()? Насколько я понимаю, print() и read() являются функциями, и я ожидал, что оба будут использоваться одинаково. Что мне здесь не хватает - пожалуйста, помогите?

Есть ли правило, когда положить вещи в скобки и когда не нужно?

def read_text(): 
    quotes = open("/Users/me/text.txt", encoding = "utf-8") 
    contents_of_file = quotes.read() 
    print(contents_of_file) 
    quotes.close() 
read_text() 
+0

http://effbot.org/pyfaq/why-does-python-use-methods-for-some-functionality-eg-list-index-but-functions-for-other-eg-len-list.htm –

+0

Вы не можете сказать 'read (quotes)', но вы можете сказать 'io.TextIOWrapper.read (кавычки)', однако теперь вам также придется импортировать io'. Но зачем вам это нужно? –

ответ

2

print() - это функция. read() - method of the object, связанный с quotes. Таким образом, read следует называть путем доступа к quotes. Только тогда мы можем добавить парсеры, чтобы вызвать его.

+0

Это было очень полезно. Спасибо! –

0

Вы наткнулись на часто аргументированные определения функций и методов.

read() - это метод, относящийся к quotes (который является экземпляром класса, на самом деле я не знаю, какое имя). Технически, Методы принадлежат к Объекты, Функции обычно определяются в стиле, который не является строго ориентированным на объект или в глобальной области действия (как и все функции C).

Возможно, стоит прочитать о аспектах ООП Python, это, скорее всего, поможет вам понять это больше.

+1

Это некоторый потомок 'io.TextIOBase', а не то, что это действительно имеет значение. –

+0

Я уверен, что я запомню это в каком-то странном, нерелевантном моменте в будущем. –

0

quotes является файловым объектом. Я понимаю, что вы еще не знаете, что такое объект. Но попробуйте распечатать quotes.

print type(quotes) 

Этот объект имеет функцию read(), целью которой является чтение содержимого из файла.

Для вызова функции объекта, вы должны написать:

object.funcName() 

Поскольку это именно то, что мы хотим, мы просто вызов этой функции. Таким образом, мы пишем:

quotes.read() 

print не принадлежит ни одному из этих типов объектов. Таким образом, мы можем назвать это без ссылки на объект.