无参数传递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