这些是函数绑定变量还是它们叫什么?

时间:2019-08-21 07:19:11

标签: python function variables

首先,我是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到底是什么。前缀及其作用是什么?

2 个答案:

答案 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__']