2017-01-05 5 views
-2

Neu bei Python-Programmierung hier. Ich brauche Hilfe zu verstehen, warum dies nicht funktioniert:Python importiert Modul Punktnotation als Funktionsparameter Eingabe

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

Es funktioniert, wenn ich dies tun:

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

Ich habe das Web durchsuchen und kann nichts finden, dass dies etwas direkt antworten würde .

Danke.

+1

Welche Bedeutung hätte 'x.y.z' in der Funktionssignatur während der Funktion * definition *? Wenn Sie 'def func1 (a):' definieren, definiert es eine Funktion mit einem Argument namens 'a', d.h. der Wert von 'a' im vorhergehenden Code wird nicht einmal berücksichtigt. – vaultah

+0

@vaultah Ich denke, OP, warum, wenn ich importierte Sache zu einer Variablen zuweisen und es als Funktion Argumente verwenden, funktioniert es richtig, aber wenn ich es direkt als Funktion Argument verwende, habe ich einen Syntaxfehler – Arman

Antwort

1

Mit def definieren Sie neue Funktionen, die einige möglicherweise unbekannte (!) Argumente akzeptieren.

Also, def sin(x): bedeutet "definieren Sie eine Funktion namens sin, die ein Argument akzeptiert". Beachten Sie, dass dieser Code bedeutet, dass xabsolut kann alles sein, die Funktion Definition nicht (und kann) gelten keine Beschränkungen seiner Art, Wert, Größe usw.

Wenn Sie das tun

a = "hello" 
def test(a): 
    pass 

die a in der Funktionsdefinition ist lediglich ein Argument, die nicht jede Beziehung zu jedem anderen a Sie in Ihrem Code verwenden muss! Sie könnten es x, pi, z oder was auch immer genannt haben der Name ist nicht wirklich wichtig (Code Lesbarkeit beiseite).

Wenn Sie versuchen,

def test(x.y.z): 
    pass 

Sie einen Fehler Syntax erhalten zu schreiben, wie es Einschränkungen für die Variablen existieren und Argumente Namen, die Sie nicht erlauben, eine Variable rufen Sie einen beliebigen Namen. Warum? Einfach weil man sonst viel Unsicherheit bekommt. Zum Beispiel, wie diese analysieren:

# 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 

Eine Funktion Argument ist eine Variable, so dass die gleichen Einschränkungen auf ihn auch auferlegt.

BTW, werfen Sie einen Blick auf die SO-Code-Highlighter gehen Nüsse versuchen, den Code oben zu markieren.

+0

Danke für die Erklärung. Es macht jetzt Sinn für mich. – art03