我正在尝试学习Python,对正在使用的脚本有点困惑。我用Python来启动scapy。有一些条件语句可以测试某些值。我的困惑集中在如何检查值上。我希望我恰当地使用了术语属性和方法。我仍在试图找出内置功能与什么是包括在scapy。过去几年我一直在使用Powershell,所以很难进行切换:)
tcp_connect_scan_resp = sr1(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="S"),timeout=10)
if(str(type(tcp_connect_scan_resp))=="<type 'NoneType'>"):
Print "Closed"
elif(tcp_connect_scan_resp.haslayer(TCP)):
if(tcp_connect_scan_resp.getlayer(TCP).flags == 0x12):
第一个条件语句似乎是检查属性“type”。在这种情况下,他们为什么要使用Python内置的str()
和type()
函数?如果我只使用type()
,它会得到相同的值。你知道吗
对于第二个和第三个条件语句,似乎使用了scapy中内置的方法。在语句外部包含括号()的逻辑是什么?同样,如果我手动运行它们,我会得到正确的值。你知道吗
第二个语句,围绕
if
语句表达式的偏执,是完全不必要的和糟糕的风格。你知道吗第一种说法需要更详细的解释:
这将检查} 。你知道吗
tcp_connect_scan_resp
所属类型的字符串表示形式是否等于“”。这是一种不好的类型检查形式,使用方式不好。有些情况下可能需要进行类型检查,但通常在Python中应该尽量避免这种情况(请参见duck typing)。如果必须,请使用^{对于Python内置类型
None
,惯用的方法是只写现在,您自己使用} )。除了具有文字符号(如整数、字符串或序列)的基本类型外,对象的表示形式不一定与其值相同(或者键入什么来重新创建相同的对象)。你知道吗
type()
得到“相同结果”的原因是,如果您在交互式Python shell中输入一些内容,那么解释器为您表示值(通过调用^{所以,当你这么做的时候
解释器打印
'<type 'int'>'
,但调用的结果实际上是int
,即整数的内置类型:另外,考虑一下:
为帮助特定专业领域而编写的库或工具通常由这些领域的专家编写,而不一定是Python专家。在我看来,你经常在科学图书馆看到这一点(例如^{} 和^{} )。这并不意味着它们是糟糕的库,但它们通常不是Pythonic风格的好灵感。你知道吗
不要通过比较
str(type(obj)) == 'ClassName'
来检查类型。你知道吗你应该使用
isinstance(obj, Class)
,如果没有,你就写if obj is None
。你知道吗相关问题 更多 >
编程相关推荐