Почему некоторые аргументы должны быть определены, а другие нет?(Изучите Python на своем пути, пример 25) - PullRequest
2 голосов
/ 25 ноября 2011

Проезжая свой путь через Learn Python на нелегком пути ex.25, и я просто не могу что-то обернуть вокруг себя. Вот сценарий:

def break_words(stuff):
    """this function will break waords up for us."""
    words = stuff.split(' ')
    return words

def sort_words(words):
    """Sorts the words."""
    return sorted(words)

def print_first_word(words):
    """Prints the first word after popping it off."""
    word = words.pop(0)
    print word

def print_last_word(words):
    """Prints the last word after popping it off."""
    word = words.pop(-1)
    print word

def sort_sentence(sentence):
    """Takes in a full sentence and returns the sorted words."""
    words = break_words(sentence)
    return sort_words(words)

def print_first_and_last(sentence):
    """Prints the first and last words of the sentence."""
    words = break_words(sentence)
    print_first_word(words)
    print_last_word(words)

def print_first_and_last_sorted(sentence):
    """Sorts the words, then prints the first and last ones."""
    words = sort_sentence(sentence)
    print_first_word(words)
    print_last_word(words)

При запуске сценария break_words будет использовать любой аргумент, который я создаю, если я использую команду break_words (**). Так что я могу напечатать

sentence = "My balogna has a first name, it's O-S-C-A-R"

, а затем запустите break_words (предложение) и в итоге разберете "Мой" балон "имеет" (...).

Но другие функции (например, sort_words) будут принимать только функцию с именем «words». Я должен напечатать words = break_words (предложение)

или что-то для работы sort_words.

Почему я могу передать любой аргумент в скобках для break_words, но только аргументы, которые на самом деле приписываются "предложению" и "словам" специально для sort_words, print_first_and_last и т. Д.? Я чувствую, что это нечто фундаментальное, что я должен понять, прежде чем углубляться в книгу, и я просто не могу разобраться с этим.

1 Ответ

5 голосов
/ 25 ноября 2011

Речь идет о типе значения, которое каждая функция принимает в качестве своего параметра.

break_words возвращает список. sort_words использует встроенную функцию sorted (), которая ожидает передачи списка. Это означает, что параметр, который вы передаете sort_words, должен быть списком.

Может быть, следующий пример иллюстрирует это:

>>> sort_words(break_words(sentence))
['My', 'O-S-C-A-R', 'a', 'balogna', 'first', 'has', "it's", 'name,']

Обратите внимание, что Python по умолчанию полезен, хотя иногда это может сбивать с толку. Поэтому, если вы передадите строку в sorted (), она будет обрабатываться как список символов.

>>> sorted("foo bar wibble")
[' ', ' ', 'a', 'b', 'b', 'b', 'e', 'f', 'i', 'l', 'o', 'o', 'r', 'w']
>>> sorted(["foo", "bar", "wibble"])
['bar', 'foo', 'wibble']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...