Python的功能更多或更少的工作如何如下:
def function_name(parameter_name_used_locally_within_function_name):
#do stuff with parameter_name_used_locally_within_function_name
some_new_value = parameter_name_used_locally_within_function_name
return some_new_value
注意參數是如何僅在功能function_name
的範圍。因爲該變量只能用於該功能而不在其外部。當我們從一個函數返回一個變量,我們可以把它分配給另一個變量調用函數:
my_variable = function_name("hello")
my_variable
現在有"hello"
,因爲它的價值,因爲我們調用的函數,傳遞價值"hello"
。注意我沒有用指定的變量名稱調用函數?我們不在乎參數名稱是什麼,我們只知道該函數需要一個輸入。該參數名稱僅用於該功能。請注意,我們如何在調用函數時知道該變量的名稱而得到some_new_value
的值?
讓我給你一個更廣泛的例子。函數可以被認爲是你給別人做的任務。可以說,功能或任務是爲了他們爲我們做點什麼。廚師或任務需要烹飪原料(這是我們的投入),我們希望獲得食物(我們的產量回報)。可以說,我想要一個煎蛋,我知道我必須讓主廚的蛋才能讓我變成一個人,我不在乎他是如何做到的,或者他做了什麼,只要我把我的產品/煎蛋餅帶回來。他可以把雞蛋叫做他想要的東西,他可以把雞蛋打碎成他想要的樣子,他可以在鍋裏炸他喜歡的東西,但只要我拿到煎蛋餅,我就會很開心。
回到我們的編程世界裏,函數是這樣的:
def cook_me_something(ingredients):
#I don't know how the chef makes things for us nor do I care
if ingredients == "eggs":
food = "omelette"
elif ingredients == "water":
food = "boiled water"
return food
我們這樣稱呼它:
my_food_to_eat = cook_me_something("eggs")
通知我給了他「雞蛋」,我得到了一些「煎蛋「 背部。我沒有說雞蛋是成分,也不知道他稱之爲他給我的食物。他只是返回food
,其中包含omelettes
現在讓我們來討論鏈接功能。
因此,我們基本瞭解了我給主廚一些東西,他根據我給他的東西給我回來了食物。那麼,如果我們給他一些他需要加工的東西,然後再烹飪。讓我們說,如果他不知道如何磨咖啡豆。但他的聯合廚師也知道如何。他會把豆子傳給那個人,把咖啡豆碾碎,然後用返工過程做飯。
def cook_me_something(ingredients):
#I don't know how the chef makes things for us nor do I care
if ingredients == "eggs":
food = "omelette"
elif ingredients == "water":
food = "boiled water"
elif ingredients == "coffee beans"
co_worker_finished_product = help_me_co_worker(ingredients)
#makes coffee with the co_worker_finished_product which would be coffee grindings
food = "coffee"
return food
#we have to define that function of the co worker helping:
help_me_co_worker(chef_passed_ingredients):
if chef_passed_ingredients == "coffee beans"
ingredients = "coffee grinding"
return ingredients
注意的共同工作者如何有一個局部變量ingredients
?這與廚師有所不同,因爲廚師有自己的配料,同事也有自己的配料。請注意,廚師如何不在乎同事稱他的配料或他如何處理這些物品。廚師給了同事一些東西,並期待成品。
這或多或少是如何工作的。只要功能得到他們的輸入,他們就會工作,也許會產生輸出。我們不關心他們在他們的函數內調用他們的變量,因爲這是他們自己的項目。
因此,讓我們回到你的例子:
def break_words(stuff):
words = stuff.split(' ')
return words
def sort_sentence(sentence):
words = break_words(sentence)
return sort_words(words)
>>> sentence = "All good things come to those who wait."
>>> sorted_words = ex25.sort_sentence(sentence)
>>> sorted_words
['All', 'come', ’good’, ’things’, ’those’, ’to’, ’wait.’, ’who’]
讓我們看看我們是否能夠打破它讓你明白。
您調用sorted_words = ex25.sort_sentence(sentence)
並將sorted_words
設置爲函數sort_sentence()
的輸出即['All', 'come', ’good’, ’things’, ’those’, ’to’, ’wait.’, ’who’]
。你通過輸入sentence
sort_sentence(sentence)
get的執行。你傳入的字符串現在叫做sentence
裏面的變量。請注意,您可以調用這樣的功能,它仍然可以工作:
sorted_words = ex25.sort_sentence("All good things come to those who wait.")
而且功能sort_sentence()
仍然會調用該字符串sentence
。這個函數基本上說了我的輸入是什麼,我稱之爲句子。您可以將您的對象命名爲句子,我將在我使用它時將它重命名爲句子。
接下來在棧上是:
words = break_words(sentence)
現在與該函數sort_sentence
稱之爲調用函數break_words的輸入爲sentence
。所以,如果你按照它基本上做跟蹤:
words = break_words("All good things come to those who wait.")
接下來在棧上是:
words = stuff.split(' ')
return words
注意函數調用它的輸入爲stuff
。因此,sort_sentence的輸入是:sort_sentence叫做sentence
,功能break_words
現在叫它stuff
。
它拆分「句子」成單詞並將其存儲在一個列表並返回列表中的「話」
通知功能如何sort_sentence
被存儲在變量words
的break_words
輸出。注意函數break_words
是如何返回一個名爲words
的變量?在這種情況下它們是相同的,但是如果有人以不同的方式說出它並不重要。 sort_sentence
可以將輸出存儲爲foo
並且它仍然有效。我們正在談論不同範圍的變量。功能break_words
之外的變量words
可以是任何東西,並且break_words
不會在意。但是break_words
裏面的那個變量就是這個函數的輸出。
在我家我的規定?在我的房子外面,你可以做任何你想要的東西。
與sort_sentence
返回變量相同,我們如何存儲我們從中得到的回報。無論我們如何存儲它或我們稱之爲無關緊要。
如果你想,你可以將其命名爲:
def break_words(stuff):
break_words_words = stuff.split(' ')
return break_words_words
def sort_sentence(sentence):
words = break_words(sentence)
return sort_words(words) #not sure where this function sort_words is coming from.
#return words would work normally.
>>> sentence = "All good things come to those who wait."
>>> sorted_words = ex25.sort_sentence(sentence)
>>> sorted_words
['All', 'come', ’good’, ’things’, ’those’, ’to’, ’wait.’, ’who’]
你只需要考慮局部變量和參數,就像剛事物命名的工作。就像我們與廚師的例子一樣,廚師可能會調用雞蛋,配料,但我稱它爲我想要的,只是通過它「雞蛋」。這些都是關於事物的範圍,把功能看作是房子,當你在房子裏時,你可以在房子裏命名你想要的任何物體,而在房子外面,那些相同的名字可能是不同的東西,但在房子內部,他們就是你想讓他們成爲的人。當你拋出一些東西時,你將這個項目命名爲與外界無關,因爲外部世界會將其命名爲別的東西。可能將它命名爲同樣的東西...
如果我只是漫步太多,提出問題,我會盡力爲你清除它。
編輯
午飯再回到我以爲變量的容器,其所持有的價值觀,但你不關心別人的容器命名。你只關心你的,當有人給你一些東西時,你把它放在一個容器中,並將它命名爲你關心的東西,這會幫助你知道它裏面的東西。當你放棄一個項目,你不給的容器,因爲你需要它來存儲其他東西..
指定的參數將映射到該函數使用的參數。因此,在'def break_words(stuff)'這樣的東西中,任何傳遞給它的參數都會在方法體內顯示爲'stuff'。這裏可能有太多行話,但是Python教程片段[_Defining Functions_描述更好](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)。 – birryree
「從'break_words'返回的'words'與'sort_sentence'的一部分定義的變量'words'有什麼關係?」基本上什麼都沒有。 'sort_sentence'中的'words'獨立於'break_words'中的'words'。每個函數都有自己的作用域:在'sort_sentence'裏面,'words'指的是_value_從返回時調用'break_words(句子)',但不依賴於'break_words'中使用的任何變量名。我想這是爲了讓你迷惑你。 – roganjosh