Я заметил, что некоторые функции вызываются в формате var.func(), как в var1.split(), в то время как другие функции вызываются в формате func(var), как в sorted(list1).

Вот очень простая программа для иллюстрации вопроса. Я также заметил такое же поведение с функциями open и read.

str1 = "This is a string"
list1 = str1.split()

print str1.split(' ')
print sorted(list1)

Я очень новичок в программировании, поэтому любая помощь будет принята с благодарностью!

0
mrahma04 15 Дек 2015 в 19:36

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.

0
TraxusIV 15 Дек 2015 в 16:49

В Python все является объектом . Таким образом, когда делаете что-то вроде этого:

s = "some string"

s является объектом str, и вы можете вызывать все методы str для него. Вы также можете делать такие вещи:

"some string".split()

И это даст вам список разделенных строк.

2
nasser alshammari 15 Дек 2015 в 16:41

В var.func() func() предназначен для использования с объектом var.

Например split() в строковом объекте, но не может использоваться в list

Но func(var) не ограничивается одним типом объекта var. Вы можете использовать его с любым подходящим объектом var.

Например sorted() может использоваться с любой итерацией, например lists, tuples, dicts ...

0
Termi 15 Дек 2015 в 16:51

var.func() просто означает, что функция принадлежит объекту.

Например, x.sort(). list (например, x) имеют функцию sort.

Когда вы вызываете func(var), func не является функцией списков.

Например, sorted(x).

Это не специфично для Python. Вы увидите ту же идею на других языках (например, Java).

0
pushkin 15 Дек 2015 в 16:42

Следуя принципу TraxusIV, я попробовал следующее, и это сработало!

from string import split

str1 = "This is a string"
list1 = str1.split()

print split(str1)
print sorted(list1)
0
Mohammad Rahman 15 Дек 2015 в 18:09