どのようにPythonの関数は、多かれ少なかれ作品は以下の通りである。パラメータは唯一の機能function_name
の範囲内であるか
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
注意してください。その変数はその関数でのみ使用され、その関数では使用されません。私たちは、関数から変数を返すとき、私たちは関数を呼び出す別の変数に割り当てることができます。
my_variable = function_name("hello")
my_variable
我々は値"hello"
に渡して、関数を呼び出したので、それが価値だと今"hello"
を持っています。指定した変数名で関数を呼び出さなかったことに注意してください。パラメータ名が何であるかは気にしません。私たちが知っているのは、関数の入力が1つだけだということだけです。そのパラメータ名は関数内でのみ使用されます。関数を呼び出したときに、その変数の名前を知っているうちに、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
を返します。
ここで、機能の連鎖について話しましょう。
私はシェフに何かを与えて私についての基本的なダウンを得て、彼は私に与えたものに基づいて私に戻って食べ物を与える。だから、料理をする前に処理しなければならないものを彼に渡せたらどうでしょうか?彼がコーヒー豆を粉砕する方法を知らない場合はどうしましょう。しかし、彼の共同シェフの職員は、どのようにも知っている。彼はその豆をその人に渡して、コーヒー豆を粉砕し、そして戻しプロセスで調理する。
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)
と呼ばれ、の機能sort_sentence()
の出力にsorted_words
を設定しました。あなたは入力を受け入れましたsentence
sort_sentence(sentence)
getが実行されました。文字列を渡すと、変数内にsentence
と呼ばれるようになりました。
sorted_words = ex25.sort_sentence("All good things come to those who wait.")
そして機能sort_sentence()
はまだその文字列sentence
を呼び出します:あなたはこのように関数を呼び出している可能性があり、それはまだ動作することに注意してください。関数は基本的に私の入力が何であるかを言っています、私はそれを文章と呼んでいます。文章という名前のオブジェクトを私に渡すことができます。このオブジェクトは、私がそれを使って作業している間に文章に名前を変更します。スタック上
次は、次のとおりです。今、機能sort_sentence
がそれを呼ばれることで、関数を呼び出しているbreak_words
words = break_words(sentence)
はsentence
として入力です。あなたはそれが基本的にやっているトレース従うのであれば:
words = break_words("All good things come to those who wait.")
次へ]をスタック上にある:
words = stuff.split(' ')
return words
注関数はstuff
として入力だ呼び出すこと。だから、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のチュートリアルセグメント[定義関数_より詳しく説明](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'は 'break_words(sentence)'の呼び出しから_value_が_returnされたものを指しますが、 'break_words'の中で使われる変数名には依存しません。私はそれがあなたをこのように混乱させるように設計されていると思います。 – roganjosh