无参数传递Python函数

无参数传递Python函数,python,function,python-2.7,debugging,python-3.x,Python,Function,Python 2.7,Debugging,Python 3.x,我试过用谷歌搜索,但没有找到一个明确的答案: 为什么,当您运行以下代码时: n = "Hello" # Your function here! def string_function(n): return (n) + 'world' print string_function 您会得到以下响应: <function string_function at 0x7f5111010938> None 没有一个 我当然意识到这个函数没有参数,但是这个响应具体是什么呢?这串字

我试过用谷歌搜索,但没有找到一个明确的答案:

为什么,当您运行以下代码时:

n = "Hello"
# Your function here!
def string_function(n):
    return (n) + 'world'
print string_function
您会得到以下响应:

<function string_function at 0x7f5111010938>
None 

没有一个
我当然意识到这个函数没有参数,但是这个响应具体是什么呢?这串字母和数字是什么意思(“0x7F511101938”)


谢谢你提供的任何信息

你得到的是一个函数对象。它可以在程序的任何地方使用。列表是内存中函数的地址。因此

f = string_function #is a function object

f
现在可以作为函数变量使用,也可以作为
f('hi')
Python使用唯一id保存所有对象。它是该函数的内存地址,每个对象实际上都是一个类,您可以使用它进行检查

print (type(string_function))

>>> 
<class 'function'>
>>>
打印(类型(字符串函数))
>>> 
>>>

>a=“你好”
>>>印刷品(a型)
>>>x=26
>>>打印(类型(x))
>>>  

正如您看到的
class
,显然,如果您调用函数
print(string_function())
,您将看到一个错误,因为函数中缺少参数,输出就是函数对象本身。单词
函数
是您打印的函数对象的
类型
。部分
string\u函数
是对象的名称。这些数字是内存中函数对象的地址

Python中的所有内容都是第一类对象,包括函数和类。函数甚至在Python中也有自己的
函数
类型(只需执行
type(myfunction)
),就像
100
是一个
int
'Hello World'
是一个
str
True
是一个
bool
,或者
myfancyobject
MyFancyClass
实例

例如,您可以将函数(甚至类本身,属于
类型
)传递到其他函数中:

def increment(x): return x + 1
def sayHiBefore(func, *args, **kwargs):
    print('Hi')
    return func(*args, **kwargs)

print(sayHiBefore(increment, 1))
这显然是一个非常做作的说明,但是能够以这种方式传递函数是非常有用的。装饰师是一个很好的例子,说明你可以用这个能力做一些有用的事情。谷歌“Pythondecorators”来了解更多关于它们的信息

对对象可以做的另一件事是赋予它们属性!你甚至可以这样做:

increment.a = 1

几乎可以对对象执行任何操作,也可以对函数执行任何操作(包括
print
它们,如您的示例所示);它们是物体

执行
打印字符串\u函数时
实际上并不是在调用该函数。该命令只打印函数对象本身的表示。这是执行打印报告(字符串函数)的捷径。;在解释器中,只需执行
string\u函数
即可打印相同的内容

表示中的
0x7F511101938
是函数对象的名称;每次运行脚本时,该数字都会更改。在标准Python(又称CPython)中,id是对象的内存地址,但这只是CPython的一个实现细节,在其他风格的Python中不一定如此。也看到


不过,我不明白为什么最后会打印出
None

如果要调用该函数,需要执行
string\u function()
。非常感谢,这是一个很有启发性的回答。非常感谢!
increment.a = 1