-1

だから私は読んでいる本からこの関数を書きました。

def cheese_and_crackers(cheese_count, boxes_of_crackers):
    print "You have %d cheeses!" % cheese_count
    print "You have %d boxes of crackers!" % boxes_of_crackers
    print "Man that's enough for a party!"
    print "Get a blanket.\n"

わかりました。そして、これは私が少し混乱して何かを確認したかったところでこの関数が実行されたときです:

print "OR, we can use variables from our script:"
amount_of_cheese = 10
amount_of_crackers = 50  

cheese_and_crackers(amount_of_cheese, amount_of_crackers)

ここで私を混乱させたのは、 amount_of_cheese と amount_of_crackers が、関数の最初の初期変数ラベルから、それぞれcheese_countとbox_of_crackersから変数を変更していることです(言い回しですか?私が正しい専門用語を言っているかどうかわかりません)。

だから私の質問は、あなたが書いた最初の関数で使用されているものとは異なる変数を使用している場合、なぜ新しい変数名を書き出した後に名前を変更するのでしょうか? それがその後に表示された場合、プログラムは新しい変数が何であるかをどのように知るでしょうか?

Pythonはプログラムを上から下に読み取ると思いましたか、それとも下から上に読み取りますか?

それは理にかなっていますか?私はそれを説明する方法がわかりません。助けてくれてありがとう。:) (python 2.7)

4

4 に答える 4

6

パラメータを渡すための命名規則について少し混乱していると思います。

検討:

def foo(a, b):
    print a
    print b

そして、あなたは次のように呼び出すことができfooます:

x = 1
y = 2
foo(x, y)

そして、あなたは見るでしょう:

1
2

関数シグニチャ(関数定義の1行目)の引数(a, b)の変数名は、関数を呼び出すときに使用される実際の変数名と一致する必要はありません。

あなたが呼ぶとき、それをこれと考えてください:

foo(x, y)

それは次のように言っています:「関数を呼び出しますfoo;として渡し、xとしてa渡します」。さらに、ここでの引数はコピーとして渡されるため、関数内でそれらを変更した場合でも、呼び出された場所から関数外の値は変更されません。次のことを考慮してください。yb

def bar(a, b):
    a = a + 1
    b = b + 2
    print a

x = 0
y = 0
bar(x, y)
print x
print y

そして、あなたは見るでしょう:

1
2
0
0
于 2012-12-10T01:47:27.870 に答える
2

スクリプトは上から下に実行されます。関数は、定義するときではなく、呼び出すときに実行されます。

最初に、変数や関数の引数の受け渡しなどの概念を理解することをお勧めします。

于 2012-12-10T01:47:44.957 に答える
0
def change(variable):
    print variable

var1 = 1
change(var1)

In the above example, var1 is a variable in the main thread of execution.

When you call a function like change(), the scope changes. Variables you declared outside that function cease to exist so long as you're still in the function's scope. However, if you pass it an argument, such as var1, then you can use that value inside your function, by the name you give it in the function declaration: in this case, variable. But it is entirely separate from var! The value is the same, but it is a different variable!

于 2012-12-10T01:48:33.180 に答える
0

あなたの質問は関数パラメータ転送に関連しています。

関数へのパラメーター転送には、次の 2 つのタイプがあります。

  • 値による ------- 値は関数ドメインで変更されましたが、グローバル ドメインでは変更されませんでした
  • 参照 ------- グローバル ドメインで変更された値

Python では、非アトミック型は参照によって転送されます。アトミック型 (文字列、整数など) は値によって転送されます。

例えば、

ケース 1:

x = 20
def foo(x): 
    x+=10
foo()
print x // 20, rather than 30

ケース 2:

d = {}
def foo(x): x['key']=20
foo(d)
print d // {'key': 20}
于 2012-12-10T01:54:07.680 に答える