【问题标题】:Understanding python syntax - variable followed by parenthesis理解python语法 - 变量后跟括号
【发布时间】:2021-08-22 07:41:59
【问题描述】:

我在比特币的 python 实现中看到了这个语法。

https://github.com/samrushing/caesure/blob/master/caesure/bitcoin.py

我以前从未见过这种语法,有人可以向我解释一下,或者在文档中的某个地方我可以理解吗?

    def dump (self, fout=sys.stdout):
        D = fout.write
        D ('hash: %s\n' % (hexify (dhash (self.render())),))
        D ('inputs: %d\n' % (len(self.inputs)))
        for i in range (len (self.inputs)):
            (outpoint, index), script, sequence = self.inputs[i]
            try:
                redeem = pprint_script (parse_script (script))
            except ScriptError:
                redeem = script.encode ('hex')
            D ('%3d %064x:%d %r %d\n' % (i, outpoint, index, redeem, sequence))
        D ('outputs: %d\n' % (len(self.outputs),))
        for i in range (len (self.outputs)):
            value, pk_script = self.outputs[i]
            pk_script = pprint_script (parse_script (pk_script))
            D ('%3d %s %r\n' % (i, bcrepr (value), pk_script))
        D ('lock_time: %s\n' % (self.lock_time,))

我说的是D ('hash: %s\n' % (hexify (dhash (self.render())),))

有很多行,其中有一个变量后跟一个括号。我不明白它的作用。

【问题讨论】:

  • 你能澄清一下你觉得奇怪的地方吗?这是一个函数调用,就像代码块中的hexifydhashself.renderlenrange 和许多其他函数一样。

标签: python syntax semantics


【解决方案1】:

在 Python 中,您可以将函数分配给变量。

fout.write 是一个函数,因此在本例中,D 被分配给该函数。

D = fout.write

在这一行 D ('hash: %s\n' % (hexify (dhash (self.render())),)),你调用的是函数D,也就是fout.write。这将与以下内容相同:

fout.write('hash: %s\n' % (hexify (dhash (self.render())),))

【讨论】:

    【解决方案2】:

    你可以有一个函数类型的变量。

    也许这个其他例子更容易理解:

    foo = print
    foo("Hello") # This prints Hello in the terminal
    

    你可以看到这种变量有一个特殊的类:

    >>> type(foo)
    <class 'builtin_function_or_method'>
    

    您定义的函数也会发生同样的情况:

    def hello(s):
        print(s)
    
    hello("123") # prints 123
    
    bar = hello
    bar("123") # prints 123
    

    在这种情况下,类类型不同:

    >>> type(bar)
    <class 'function'>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多