V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
misaka19000
V2EX  ›  编程

Python 的装饰器和 Java 的注解在语法上这么相像是有什么内在的联系吗?

  •  
  •   misaka19000 · 2016-11-08 16:36:34 +08:00 · 6421 次点击
    这是一个创建于 2941 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Python 的装饰器是通过函数式编程来实现的, Java 的注解通过反射来实现,两者实现的方式虽然不一样,但是语法上真的十分相似啊,而且 Python 和 Java 的各种 Web 框架都特别喜欢用装饰器和注解来实现路由功能。。。

    所以,这两种语法之间有什么样的内在联系吗,还是说其中一个是模仿的另外一个的语法,最早这种类型的语法是出自于哪种编程语言?

    10 条回复    2016-11-10 05:20:18 +08:00
    misaka19000
        1
    misaka19000  
    OP
       2016-11-08 17:07:05 +08:00
    来人啊!!!
    skydiver
        2
    skydiver  
       2016-11-08 17:29:07 +08:00   ❤️ 1
    https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Decorators

    Python decorators were inspired in part by Java annotations, and have a similar syntax;

    看一下维基百科就知道的事情,没必要来这里问
    glasslion
        3
    glasslion  
       2016-11-08 17:48:04 +08:00   ❤️ 1
    misaka19000
        4
    misaka19000  
    OP
       2016-11-08 19:23:57 +08:00
    @skydiver
    @glasslion
    感谢,学习到了
    georgema1982
        5
    georgema1982  
       2016-11-09 03:02:09 +08:00
    两者除了看上去相似,功能上完全不同。 java 的注解只是注解,它本身不改变被注解对象的行为和性质,只有理解这些注解的处理器才会改变行为。而 python 的装饰器会改变被装饰的对象的行为和性质。所以 python 装饰器比 java 注解更强大。
    shyling
        6
    shyling  
       2016-11-09 10:52:29 +08:00
    python 的装饰器只是一个语法糖而已。嵌套函数的简化写法。
    java 的注解能实现更多好用的功能
    misaka19000
        7
    misaka19000  
    OP
       2016-11-09 11:41:37 +08:00
    @georgema1982
    @shyling
    所以到底哪个更强大一点。。。
    shyling
        8
    shyling  
       2016-11-09 11:46:17 +08:00
    @misaka19000 不是同一类的东西,只不过用了同一个 @
    不过装饰器本身是没功能的 0 0 ,注解也只是一个标记
    misaka19000
        9
    misaka19000  
    OP
       2016-11-09 11:53:15 +08:00
    @shyling 明白了,语法一样,但是可以使用的领域却各自有区别
    georgema1982
        10
    georgema1982  
       2016-11-10 05:20:18 +08:00
    @shyling python 装饰器当然是有功能的,它立刻改变了被装饰的对象。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1820 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 16:32 · PVG 00:32 · LAX 08:32 · JFK 11:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.