首先,我是python的新手,这让我有些困惑。我来自c ++背景,没有类似的东西。我试图用Google搜索它,但我什至不知道该怎么称呼。
我发现这段代码似乎在函数名称上绑定了某种变量,例如对象或某些东西,但我不明白它是什么,它如何工作以及应该如何使用。
def foo():
foo.counter+=1
foo.counter=0
foo()
print(foo.counter)
现在,如果我删除foo。前缀,程序将停止工作。
但是,如果我添加了全局声明,它将再次起作用:
def foo():
global counter
counter+=1
counter=0
foo()
print(counter)
所以我的问题是那个foo到底是什么。前缀及其作用是什么?
答案 0 :(得分:1)
在python中,几乎所有东西都是对象。甚至功能。您可以使用以下方法获取对象的所有属性:
>>> dir(foo)
[ ..., '__str__', '__subclasshook__', 'counter']
这意味着您向该功能添加了额外的属性。现在,该属性可以像对象的任何其他属性一样进行操作和编辑。 因为仅一次创建函数,所以只有一个foo对象。因此,这与不使用foo和global相同。
答案 1 :(得分:0)
Python函数是一等公民。这意味着它们与任何其他对象一样都是对象。一个函数可以具有属性甚至其他函数。
例如,每个函数都有内置的__name__
属性:
def foo(x):
print(x)
print(foo.__name__)
输出
foo
您可以使用dir
查看对象具有的所有属性:
print(dir(foo))
输出
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__',
'__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__get__', '__getattribute__', '__globals__', '__gt__', '__hash__',
'__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__',
'__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__']