Я заметил, что некоторые функции вызываются в формате var.func()
, как в var1.split()
, в то время как другие функции вызываются в формате func(var)
, как в sorted(list1)
.
Вот очень простая программа для иллюстрации вопроса. Я также заметил такое же поведение с функциями open
и read
.
str1 = "This is a string"
list1 = str1.split()
print str1.split(' ')
print sorted(list1)
Я очень новичок в программировании, поэтому любая помощь будет принята с благодарностью!
5 ответов
Это различие связано с вопросами охвата. Функции, которые можно вызывать напрямую, например, sorted(list1)
в приведенном выше примере, являются либо встроенными функциями, либо определены на верхнем уровне одной из ваших импортированных библиотек (например, при использовании from simpy import *
вы можете вызовите test()
напрямую для запуска встроенного набора тестов для библиотеки simpy). Функции, доступ к которым осуществляется через оператор точки, являются функциями, которые определены для конкретного типа данных, к которому вы их применяете. Помните, что каждый тип данных в Python является объектом, а следовательно, экземпляром класса. Эти функции, такие как split()
, определены в определении класса этого типа данных. Кроме того, чтобы снова использовать пример test()
из библиотеки simpy, если бы вы импортировали библиотеку только с import simpy
, вам пришлось бы использовать simpy.test()
для вызова этого метода.
from simpy import *
test()
Против
import simpy
simpy.test()
Первый работает, потому что вы импортировали все методы и классы из верхнего уровня библиотеки Simpy, тогда как второй работает, потому что вы явно погрузились в область применения библиотеки Simpy.
В Python все является объектом . Таким образом, когда делаете что-то вроде этого:
s = "some string"
s
является объектом str
, и вы можете вызывать все методы str для него. Вы также можете делать такие вещи:
"some string".split()
И это даст вам список разделенных строк.
В var.func()
func()
предназначен для использования с объектом var
.
Например split()
в строковом объекте, но не может использоваться в list
Но func(var)
не ограничивается одним типом объекта var. Вы можете использовать его с любым подходящим объектом var.
Например sorted()
может использоваться с любой итерацией, например lists
, tuples
, dicts
...
var.func()
просто означает, что функция принадлежит объекту.
Например, x.sort()
. list
(например, x
) имеют функцию sort
.
Когда вы вызываете func(var)
, func
не является функцией списков.
Например, sorted(x)
.
Это не специфично для Python. Вы увидите ту же идею на других языках (например, Java).
Следуя принципу TraxusIV, я попробовал следующее, и это сработало!
from string import split
str1 = "This is a string"
list1 = str1.split()
print split(str1)
print sorted(list1)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.