2017-06-14 41 views
1

在bash我有一个文件 “function.sh ”:如何在循环中使用导入的函数,并在该函数中使用循环变量?

_bash_function_() { 
echo $i 
    } 

和文件“ exec.sh

#!/bin/bash 

. ./function.sh 

range=(1 2 3) 

for i in ${range[@]}; do 
    _bash_function_ 
done 

这使输出:

1 
2 
3 

在Python中我有一个文件“function.py”:

def py_function(): 
    print (i) 

和文件 “​​”:

#!/opt/local/bin/python3 

from function import * 

list = ['1','2','3'] 

for i in list: 
    py_function() 

这给出了一个错误:

NameError: name 'i' is not defined 

但是如果我具备的功能,并在同一个文件的循环:

#!/opt/local/bin/python3 

def py_function(): 
    print (i) 

list = ['1','2','3'] 

for i in list: 
    py_function() 

输出:

1 
2 
3 

我怎样才能在Python中输出这个输出,函数在一个文件中,而循环在另一个文件中?

+1

有bash'之间'几个关键的不同Python在这里。首先,'bash'变量是真正的全局变量,因为你真的没有模块; 'source'只是简单地执行代码*就好像它出现在当前文件中一样。在'py_function'中,'i'是指'function.i',而不是独立变量'exec.i'(或'__main __。i',取决于文件如何执行)。其次(在这里并不直接相关),'bash'使用动态作用域,这意味着一个非局部变量引用函数被调用*的范围,而不是它被定义*的地方。 Python使用静态范围。 – chepner

回答

3

功能的要点之一是他们接受参数。在你的情况,你应该定义的函数,以便它接受i作为参数:

def py_function(i): 
    print (i) 

,并通过它,当你把它叫做:

for i in list: 
    py_function(i) 
+0

我明白了,那有效。谢谢 ! :) – azbc