了解 python 语法 - 变量后跟括号
Understanding python syntax - variable followed by parenthesis
我在此处的 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())),))
有很多行在变量后跟括号。我不明白它的作用。
在 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())),))
您可以拥有一个具有函数类型的变量。
也许另一个例子更容易理解:
foo = print
foo("Hello") # This prints Hello in the terminal
你可以看到这种变量有一个特殊的class:
>>> type(foo)
<class 'builtin_function_or_method'>
您定义的函数也会发生同样的情况:
def hello(s):
print(s)
hello("123") # prints 123
bar = hello
bar("123") # prints 123
在这种情况下,class 类型不同:
>>> type(bar)
<class 'function'>
我在此处的 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())),))
有很多行在变量后跟括号。我不明白它的作用。
在 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())),))
您可以拥有一个具有函数类型的变量。
也许另一个例子更容易理解:
foo = print
foo("Hello") # This prints Hello in the terminal
你可以看到这种变量有一个特殊的class:
>>> type(foo)
<class 'builtin_function_or_method'>
您定义的函数也会发生同样的情况:
def hello(s):
print(s)
hello("123") # prints 123
bar = hello
bar("123") # prints 123
在这种情况下,class 类型不同:
>>> type(bar)
<class 'function'>