Python字符串比较函数()

时间:2014-03-26 14:50:35

标签: python python-2.7 string-comparison

我正在查看我在网上找到的一段Python代码(http://www.exploit-db.com/exploits/18305/),而且我已经查了一段代码。

说实话,我不懂Python,但我有其他编程语言的经验。

方法_computeCollisionChars生成许多字符,然后将它们添加到字典中,如果它们不同。以下是方法签名以及问题的相关部分。 注意:可以在链接的源上找到实际代码。

def _computeCollisionChars(self, function, count, charrange):
    baseStr = ""
    baseHash = function(baseStr) # What is this?

    for item in source:
        tempStr = ""

        if tempStr == baseStr:
            continue
        if function(tempStr) == baseHash: # What type of comparison is this?
            # logic goes here...

    return

我的问题是:

  1. function参数在方法签名中的含义是什么?
  2. 最重要的是function(string)做了什么?为什么有两个 检查以及function(tempStr)生成的输出类型 然后?
  3. 非常感谢你们!

2 个答案:

答案 0 :(得分:3)

显然,您可以将任何可调用对象function传递给_computeCollisionChars。然后初始化baseHash作为调用function并将空字符串作为参数的结果。在循环内部,条件为:如果使用空字符串调用的function的结果作为参数等于baseHash,则执行此操作。这是毫无意义的,因为tempStr总是''baseHash永远不会改变(或者你没有发布那部分)。

在当前代码段中,永远不会达到第二个if,因为tempStr == baseStr == ''总是如此。

正如评论员指出的那样,在实际代码中tempStrbaseStr确实发生了变化,function应该是一个散列函数(但任何其他函数都需要一个字符串因为论证应该有效。)

答案 1 :(得分:1)

在Python函数中是第一类对象,因此可以将它们作为参数传递给其他函数。所以function(baseStr)正在调用传递给_computeCollisionChars的函数对象。

请注意,Python没有检查它是作为参数传递的函数对象 - 它只是隐含地期望这个(并且程序会崩溃它不是因为它没有引发TypeError异常)。

>>> def f1():
        print "Hello world"

>>> def f2(function):
        function()

>>> f2(f1)
Hello World

>>> f2("not a callable function")
TypeError: 'str' object is not callable