Вызов функции и приведение типов в Python? - PullRequest
0 голосов
/ 04 июня 2018

Допустим, у меня есть список

x = [1,2,3,4,5,6,7,8,9,10]

И я хочу напечатать этот список, вызвав функцию.Вот моя функция для печати списка

def print_list(list_received):
        for var in list_received:       
                print var

И я звоню print_list(), как показано ниже

print_list(x)
    |      |
 method   arguement
  name

Так что вызов функции выше похож на тот, который мы использовали в C /C ++.

Теперь допустим, у меня есть список с именем my_list

my_list = [1,2,3,4,5,6,7,8,9,10]

И я хочу преобразовать my_list в кортеж, и я буду делать, как показано ниже

my_tuple = tuple(my_list)

Теперь вот это tuple(my_list) называется приведением типов , как я прочитал здесь http://www.pitt.edu/~naraehan/python2/data_types_conversion.html

теперь выше приведением типов выглядит совершенно иначе, чем C илиC++ как и в C, который мы привыкли делать

int x = 10;
char ch = (char)x

Мое первое сомнение в том, как рациональная теория или соображение об изменении C выглядит как (tuple)my_list на tuple(my_list)?Ответ может быть Python не C, но я хочу знать больше.

Мой второй вопрос - как интерпретатор Python решает, является ли его вызов функции или преобразованием типафункция т.е. оба соглашения о вызовах my_print(x) и tuple(my_list) выглядят одинаково, но на самом деле оба выполняют разную работу.

Ответы [ 3 ]

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

my_tuple = tuple(my_list) создает экземпляр кортежа класса из объекта my_list.Это не совсем то, что делает приведение типов как (tuple)my_list в C, так как создается новый объект.

my_tuple = tuple(my_list) ближе к C ++ my_tuple = new Tuple(my_list).

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

Я могу ответить на ваш второй вопрос, интерпретатор Python работает на основе области действия (локальная, включающая, глобальная, по умолчанию).

, например:

def tuple(l_list):
     print l_list

l_list = [1,2]
tuple(l_list)

В приведенном выше случае этоне выполняет преобразование типов, вместо этого он выполняет вышеуказанную функцию.Почему, потому что, как только мы начали выполнение, он ищет объект кортежа и выполняет работу.Если он не нашел, он считает ключевое слово по умолчанию и конвертирует.В двух словах это чисто по объему объектов

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

Почему это должно быть идентифицировано как нормальная функция или функция преобразования типа?Это просто функция.

Или, поскольку почти все в python является объектом, на самом деле функция также является своего рода объектом, который реализует __call__.

Кроме того, нет типафункция преобразования на самом деле.tuple действует как конструктор, он принимает итеративный объект и возвращает объект кортежа.

...