gpt4 book ai didi

python - 如何在 Python 的嵌套函数中正确引用全局变量

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:09 24 4
gpt4 key购买 nike

假设我有以下简单情况:

import pandas as pd

def multiply(row):
global results
results.append(row[0] * row[1])

def main():
results = []
df = pd.DataFrame([{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}])
df.apply(multiply, axis=1)
print(results)

if __name__ == '__main__':
main()

这导致以下回溯:

Traceback (most recent call last):

File "<ipython-input-2-58ca95c5b364>", line 1, in <module>
main()

File "<ipython-input-1-9bb1bda9e141>", line 11, in main
df.apply(multiply, axis=1)

File "C:\Users\bbritten\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\frame.py", line 4262, in apply
ignore_failures=ignore_failures)

File "C:\Users\bbritten\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\frame.py", line 4358, in _apply_standard
results[i] = func(v)

File "<ipython-input-1-9bb1bda9e141>", line 5, in multiply
results.append(row[0] * row[1])

NameError: ("name 'results' is not defined", 'occurred at index 0')

我知道我可以将 results = [] 移动到 if 语句来让这个例子工作,但是有没有办法保持我现在的结构并使其发挥作用?

最佳答案

您必须在函数之外声明结果,例如:

import pandas as pd

results = []

def multiply(row):
# the rest of your code...

更新

另请注意,python 中的 list 是可变的,因此您无需在函数开头使用 global 指定它。示例

def multiply(row):
# global results -> This is not necessary!
results.append(row[0] * row[1])

关于python - 如何在 Python 的嵌套函数中正确引用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335659/

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