In bash habe ich eine Datei "function.sh
":Wie wird eine importierte Funktion in einer Schleife mit der Schleifenvariablen innerhalb dieser Funktion verwendet?
_bash_function_() {
echo $i
}
und eine Datei" exec.sh
"
#!/bin/bash
. ./function.sh
range=(1 2 3)
for i in ${range[@]}; do
_bash_function_
done
, dass der Ausgang gibt:
1
2
3
In Python ich eine Datei haben "function.py
":
def py_function():
print (i)
Und eine Datei "exec.py
":
#!/opt/local/bin/python3
from function import *
list = ['1','2','3']
for i in list:
py_function()
dies ein Fehler gibt:
NameError: name 'i' is not defined
Allerdings, wenn ich die Funktion und die Schleife in der gleichen Datei haben:
#!/opt/local/bin/python3
def py_function():
print (i)
list = ['1','2','3']
for i in list:
py_function()
Der Ausgang ist:
1
2
3
Wie kann ich diese Ausgabe in Python haben, mit der Funktion in einer Datei, und die Schleife in der anderen?
Es gibt einige wichtige Unterschiede zwischen 'bash' und Python hier. Erstens sind 'bash'-Variablen wirklich globale Variablen, da Sie nicht wirklich Module haben; 'source' führt den Code * genau * so aus, als ob er in der aktuellen Datei enthalten wäre. In "py_function" bezieht sich "i" auf "function.i", nicht auf die distinkte Variable "exec.i" (oder "__main __. I", abhängig davon, wie die Datei ausgeführt wird). Zweitens (und nicht sofort relevant hier) verwendet 'bash' dynamisches Scoping, was bedeutet, dass eine nicht lokale Variable den Bereich referenziert, in dem die Funktion * genannt * ist, nicht wo sie * definiert * ist. Python verwendet das statische Scoping. – chepner