如何像在Javascript中那样调用Python函数
How to call a Python function like in Javascript
如果我这样做,那就没问题了:
def a():
b = [1,2,3]
def d():
print b
d()
a()
但是我有很多方法需要函数D,所以我不得不从函数A中定义它,但它显示错误:
def d():
print b
def a():
b = [1,2,3]
d()
a()
错误:
File "c.py", line 21, in <module>
a()
File "c.py", line 19, in a
d()
File "c.py", line 16, in d
print b
NameError: global name 'b' is not defined
所以我有很多不同的变量,比如不同函数中的b,所以我不想像这样发送变量:
def d(b1,b2,b3,b4,b5):
print b1,b2,b3,b4,b5
这不是很简单,所以我这样做:
d = '
'''
def d():'n
print b
'''
def a():
b = [1,2,3]
c = eval(d)
c()
a()
但它也显示错误:
File "c.py", line 16, in <module>
a()
File "c.py", line 13, in a
c = eval(d)
File "<string>", line 2
def d():
^
那我该怎么办,
谢谢
你可能会对javascript的范围感到困惑,这与python的作用域相反。在继续之前,请阅读官方 Python 教程对作用域和命名空间的看法!你可能还会发现 Ian Bicking 的演讲很有用:Javascript for People Who Know Python。他在涵盖两种语言之间的差异方面做得很好。
在这种情况下,您尝试访问具有在另一个函数的命名空间中定义的名称的对象,这意味着它无法知道它。理想的做法是重写 d(),使其接受参数并传递 b。你也可以使用 global
将 b 声明为全局,但你应该避免这种情况。
def d():
print b # b is defined in a so it's only available in a's local namespace
def a():
b = [1,2,3]
d() # if you rewrite d to accept an argument, you can pass it b and this will work
这样做:
def d(b): # accepts an argument now
print b
def a():
b = [1,2,3]
d(b) # calls d with an argument of b
如果您想知道各种作用域中的名称是什么,可以这样做:
import __builtin__
def d():
print dir(__builtin__) # built-in names
print dir(globals()) # global names
print dir(locals()) # local names, defined in d
我想你会发现Python的命名空间/范围相当直观。
看起来你想把a
变成一个类:
class A(object):
b = [1,2,3]
def d():
print b
A.d()
A.b = [4, 5, 6]
A.d()
要共享变量,您可以使用对象。定义一些将用作数据容器的类。
没有看到你试图模拟的JavaScript,我只能猜测。
但是你为什么不直接b
传递给d
:
def d(b):
print b
def a():
b = [1,2,3]
d(b)
a()
或者,如果这不是一个选项,也许您可以将b
声明为全局:
b = []
def d():
print b
def a():
global b
b = [1,2,3]
d()
a()
或者,也许您正在编写一个包装器,以便在调用每个函数之前始终执行某些操作。 在这种情况下,装饰器可以帮助:
def test(b):
def t(f):
def d():
print b
return f(b)
return d
return t
@test([1,2,3])
def a(b):
pass
a()
只是为了修改 Mikel 和 zeekay 现有的好答案,这里是 JavaScript 的区别。你可能拥有的是:
function d() {
print(b);
}
function a() {
b = [1,2,3];
d();
}
但是你在Python中得到的相当于这个:
function d() {
print(b);
}
function a() {
var b = [1,2,3];
d();
}
(请注意第二个版本中的var b
)。如果你了解 JavaScript,你就会明白其中的区别。正如所建议的那样,参数传递是更可取的方式。使用global
关键字将是另一种(不太可取的)方法。
- 用beautifulsoup-python调用onclick事件
- 如何在新创建的模块中从Odoo v8中的Javascript文件中调用python函数
- 用javascript调用python函数,并在网页上显示返回的字符串
- 从PHP调用Python脚本
- 只使用javascript或django调用python脚本
- 如何从javaScript调用python或java方法
- 如何从PHP或Javascript调用python程序(具有命令行参数)
- Django,Dajax和Javascript - onclick不调用python方法
- 你能用JavaScript函数调用Python函数吗
- 如何在Odoo 10中每次调用python函数
- 从JS调用python函数
- 在MAMP中使用Javascript调用Python函数
- 如何从Node.js调用Python函数?
- 使用JQuery调用python脚本
- 如何从HTML页面调用python命令
- 如果多个用户在同一时刻调用Python函数,它是否工作?
- 如何从javascript post调用python脚本读取数据
- 如何在点击按钮上调用python代码中的函数-来自javascript onClick调用python
- 如何像在Javascript中那样调用Python函数
- 在Python应用程序中使用WebKitGtk+时,是否有一种方法可以从JS调用Python函数?