2017-01-05 4 views
-2

Pythonプログラミングの新機能はこちら。私はこれを行うとき関数のパラメータ入力として、Pythonインポートモジュールのドット表記

import x.y # x is a package with __init__.py 
def func1(x.y.z): # I get a syntax error here 

それは動作します:私はこれが動作しない理由を理解していくつかの助けが必要

import x.y 
a = x.y.z 
def func1(a): 

私はウェブを検索しましたし、これをやや直接答えるでしょう何かを見つけることができません。

ありがとうございました。

+1

関数*定義*の間に 'x.y.z'が関数シグネチャに持つ意味は? 'def func1(a):'を実行すると、 'a'という1つの引数を持つ関数が定義されます。つまり、前のコードの' a'の値は考慮されません。 – vaultah

+0

@vaultah私はOPを意味すると思う理由は、私は変数にインポートされたものを割り当てて、関数の引数として使用すると、それは正しく動作しますが、私は関数の引数として直接使用するとき構文エラーがあります – Arman

答えて

1

defでは、(おそらく不明)の(!)引数を受け入れる新しい関数を定義します。

したがって、def sin(x):は、「1つの引数を受け入れるsinという関数を定義する」ことを意味します。このコードはx絶対に何も、あなたが定義にはない(とすることはできません)、その型、値、サイズ上の任意の制限を適用する機能など

ことができることを意味することに注意してください

a = "hello" 
def test(a): 
    pass 
関数定義の

aあなたのコード内で使用a他にいかなる関係を持っていないだけで、引数です! xpiz、またはという名前は実際には関係ありません。(コードの可読性は別として)です。

あなたは

def test(x.y.z): 
    pass 

を書くしようとするとあなたは変数にしたい任意の名前を呼ぶことはできません構文などのエラー変数の制限が存在すると引数の名前を取得します。どうして?単にそうでなければあなたは不確実性をたくさん得るでしょう。たとえば、これを解析する方法:

# a poorly formatted number literal or a variable definition?? 
1234hello = "test" 

# attempt to access a member of a class (or module) or a variable definition?? 
x.y.z = 5 

# is "yay a variable's name or a poorly formatted string literal?? 
x = "yay - 5 

# the same question as above 
f' = df/dx 

関数の引数は変数なので、同様の制限が課されます。

ところで、上のコードを強調しようとしているSOコードハイライターのナットを見てください。

+0

ありがとうございます。今は私にとって意味があります。 – art03

関連する問題