gpt4 book ai didi

javascript - 如何像在 Javascript 中一样调用 Python 函数

转载 作者:行者123 更新时间:2023-11-28 20:28:18 29 4
gpt4 key购买 nike

如果我这样做,那就没问题了:

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 教程中关于 scopes and namespaces 的内容在你继续之前!您可能还会发现 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 的命名空间/作用域相当直观。

关于javascript - 如何像在 Javascript 中一样调用 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919642/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com