Jęd*_*ruj -1 python function definition
我迷失了方向,因为我的代码正在执行完全矛盾的动作。我packet_counts
在定义函数之前定义为Counter(),custom_action
没有问题。当我尝试将test1
int 定义为int时,就像packet_counts
说test1
内部custom_action
未定义一样。缺乏一致性。你们能告诉我什么地方错了吗?
我尝试global
了相同的结果。我无法定义test1
内部函数,因为它必须使用scapy收集捕获的数据包的大小,如果这样做,它将在每次调用时重置。
from collections import Counter
test1=0
packet_counts = Counter()
def custom_action(packet):
key = tuple(sorted([packet[0][1].src, packet[0][1].dst]))
packet_counts.update([key])
packetSize = len(packet)
test1 += packetSize #here occurs error that test1 is undefined...
Run Code Online (Sandbox Code Playgroud)
在函数中分配的任何名称都是隐式本地的。如果仅从名称读取,它将从包含该变量的最近范围读取。
test1 += packetSize
Run Code Online (Sandbox Code Playgroud)
既是读取又是赋值,都是test1
局部的,但是由于没有事先赋值,所以得到了UnboundLocalError
(因为您实际上只是想说test1 = ??? + packetSize
)。
要在不使其局部化的情况下写入变量,请添加:
global test1
Run Code Online (Sandbox Code Playgroud)
要么
nonlocal test1
Run Code Online (Sandbox Code Playgroud)
作为函数的第一行。前者显式跳转到全局范围,后者在最接近的范围内查找它(在这种情况下,它们是等效的)。
请注意,global
通常,要求声明的代码通常是错误的形式。通常,您应该使用一个类的实例,而该函数是该类的一个方法(每个实例可以保留其自己的状态,而不是只有一个全局状态),这通常是一个线索。
归档时间: |
|
查看次数: |
50 次 |
最近记录: |