0

まず、私はPython3を使用しています

関数に関する Khanacademy の Python チュートリアルを調べていました。

階乗関数の定義

コードは次のとおりです。

def factorial(number):
    product = 1
    for i in range(number):
        product = product * (i+1)
    return product

user_input = int(input("enter a number that you want to factorial: "))
factorial_of_user_input = factorial(user_input)
print(factorial_of_user_input)

混乱を説明するのに苦労していますので、ご容赦ください。私は次のことを理解していません: Sal はパラメーターnumberという名前です。しかし、その後、数は消えます。

最初、関数のチュートリアルの前に、user_inputnumberに続いてprint(number)という名前でした。入力を取得し、それをnumberと呼び、numberを出力します。

残念ながら、今、私にとって、その一貫性は失われています。変数名をパラメーター名とは異なるものに変更して、それを機能させるにはどうすればよいですか? 一貫性が壊れているので、爆破するだろうと考えました。私の考えでは、次のように考えています。この関数は、numberという名前のバケットで整数を探します。その正確なバケットから整数を与えないと、うまくいきません-丸いペグを長方形に突き刺すようなものです。

Python がuser_inputがnumberと同じものであることを理解するために使用した魔法は何ですか?

4

3 に答える 3

0

number はfactorial関数に付けられた名前です。これがすべての構文の意味です。単一の引数を入力すると、factorial関数内では名前として知られるようになります。名前user_inputは関係ありません factorial(5)

これは他の言語でも同様です。たとえば、C++ では次の関数を記述できます。

int square(int input_number){ return input_number*input_number ; }

そして、あなたはそれを次のように呼ぶことができますsquare(5)

何が起こっているかについてのあなたの見方は首尾一貫していますが、それはpythonや他の言語がどのように機能するかではありません. 具体的には、関数が number という名前のバケットで整数を探すと言います。

例のような関数を宣言すると、フィードする値は内部的に として認識されると言いますnumber。ただし、期待どおりの動作を得る方法があります。Python では次のようになります。

def myfunction():
    print(some_value)

この場合、some_valueが存在し、スコープ(またはバケットと呼ばれるバケット) 内でその名前で認識されている必要があります。したがって、これを機能させるには、次のようにする必要があります。

def myfunction():
    print(some_value)
some_value=3
myfunction()

逆の例として、特定の名前で知られていない値を入力したい場合、次のようにすることを想像してください。

def myfunction(a,b,c): 
    print(("a ",a," b ",b,"c ",c))
j=4
myfunction(1,j,5+2)
gives('a ', 1, ' b ', 4, 'c ', 7)
于 2012-11-01T15:10:41.433 に答える
0

これは名前空間に帰着します。

自分がどのスコープにいるのかを理解する必要があります。Python では、スコープは関数、クラス、およびモジュールで区切られています。あなたの場合、最初に関数のスコープを理解する必要があります。

次のようなコードのブロックがある場合:

def function1(var1):
    print var1

var1 = 'Variable 1'
function1(var1) #will print: Variable 1
function1('var1 is just for use inside the function') #will print: var1 is just for use...
print var1 #will print: Variable 1, because we never did any assignment outside of the function

関数内の var1 が関数外の var1 ではないことを示しています。と という名前の名前空間がありglobalますlocal。これらの各スコープの変数をいつでも表示するために、Python には 2 つの組み込み関数が呼び出され、呼び出したスコープ内のすべての変数globals()locals()その値の辞書 (値にマップされた名前) が表示されます。

于 2012-11-01T21:58:42.003 に答える