Python调用函数是否加括号问题

img


两个代码不同的就是最终调用函数时一个加了括号。一个没加,两个最终都可以运行,但是加括号的会报错,为啥啊,我创建该函数的时候加了括号,那我调用的时候不应该也加括号么,但是没加括号反而不报错,求解答,最好给我普及一下是否加括号的区别,谢谢了

  1. 第一没加括号,你输出的是一个变量
  2. 第二个加括号报错,是因为变量和函数名字重复,函数被覆盖了,导致再调用此函数时报错

img

你的log函数根本没有返回值
你用myfunc去接它的返回值,那myfunc不是None吗
你执行None(),能不报错吗
执行函数就是要加括号,不加括号那就不是在执行函数
问题是你函数执行之前,你总得确定它是个函数吧
不要把变量名定义的很函数名一样
搞的自己都不知道它到底是个什么玩意了

主要你令myfunc = log(myfunc)后,myfunc就不再是个函数了,是一个数值类型,你再myfunc()肯定会报错

你如果想可以正常调用就


a = log(myfunc)
myfunc()

你这么学会把自己搞晕的, 你看看你加上括号不就等于log(myfunc)()

【温馨提示:若能帮到您,望给个采纳该答案,谢谢!】
1、原因如下
因为myfunc是一个noneTyep,不是任何一种类型,改变了自己本身的函数的情况

img

2、修改如下
在赋值的时候,log方法必须返回一个值,比如:函数值,即可当做方法再次使用

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys

def log(func):
    print("代码运行开始...")
    func()
    print("代码运行结束...")
    return myfunc
    
def myfunc():
    print("Python装饰器...")

myfunc=log(myfunc)

print(type(log))
print(type(myfunc))

myfunc()

看你倒数第二句代码

加括号是直接调用执行该函数,不加括号是用于将该函数作为参数传入其他函数,在其他函数里面将该函数作为回调,在js中这种方式用于同步执行js