Java可以做什么样的事情,而不是Python?

2022-09-04 08:20:52

我会选择一种新的编程语言 - Java,已经使用Python一段时间了。但似乎大多数可以用Java完成的事情都可以用Python完成。所以我想知道

  1. Java可以做什么样的事情,而不是Python?
    • 移动编程(安卓)。
    • POSIX Threads Programming.
  2. 相反,Python可以做什么样的事情,但如果有的话,不能用Java?

澄清:我希望从实践的角度而不是从理论的角度得到答案,它应该是关于当前状态,而不是未来。因此,从理论上讲,所有编程语言都可以执行任何任务,实际上每种语言都以某种方式受到限制。


答案 1

这两种语言都是图灵完备的,都有庞大的库,并且都支持用C编写的扩展,以便您可以在需要时访问低级代码。主要区别在于它们当前支持的位置。一般来说,Java比Python有更广泛的支持。

你的Android示例是Java是标准选择的一个地方,尽管Python也有一些Android脚本环境形式的支持。Java已经安装在大多数家庭计算机上。您可以编写 Java 小程序,并期望它们在大多数浏览器中工作。

在Java中,您无法轻松做到的一件事是快速编写执行有用任务的简短脚本。Python比Java更适合脚本(当然还有其他选择)。


答案 2

我想使用Jython,你可以用Python做任何你可以用Java做的事情。

相反,Python有PyPy编译器,这很酷 - 具有多个支持的虚拟机(Java Runtime,LLVM,.net和Python IIRC),多个垃圾回收器,多个实现(Stackless)等。我知道Java有很多虚拟机选择,但PyPy的增长是惊人的,因为它是用RPython编写的 - 一种相当高效的语言。

另外,Java是否可以在1个文件和少于20行的情况下做到这一点,而无需导入库?显然,这两种语言都有可以做到这一点的库,但我只是在谈论语言的灵活性。

class Logger(object): # boilerplate code
    def log(self,level,msg,*args,**kwargs): # *args, **kwargs = flexible arguments
        self._log(level,msg,*args,**kwargs) # call with flexible argments

    def _log(self,level,msg,*args,**kwargs):
        # override me at runtime :) 
        # I think Java people call this Dependency Runtime Injection
        if level>1:
            print msg,args,kwargs

logger = Logger() # boilerplate code

def logged(level): # what pattern do you call this?
    def logged_decorator(function): # and this? 
        def func(*args,**kwars): 
            name = func.__name__ # look ma, reflective metaprogramming!
            logger.log(level,name,*args,**kwargs)
            return func(*args,**kwargs)
        return func # boilerplate code
    return logged_decorator # boilerplate code

使用示例:

@logged
def my_func(arg1,arg2):
   # your code here
   pass