使用Java可以完成哪些事情而不是Python?

kak*_*eys 11 python java programming-languages

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

  1. 使用Java可以完成哪些事情而不是Python?
    • 移动编程(Android).
    • POSIX线程编程.
  2. 相反,使用Python可以做什么样的事情而不是Java呢?

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

Mar*_*ers 12

两种语言都是图灵完备的,都有大量的库,并且都支持用C语言编写的扩展,以便您可以根据需要访问低级代码.主要区别在于它们目前受支持的位置.Java通常比Python有更广泛的支持.

您的Android示例是Java是标准选择的地方,尽管Python也以Android Scripting Environment的形式提供了一些支持.Java已经安装在大多数家用计算机上.您可以编写Java小程序,并希望它们可以在大多数浏览器中运行.

在Java中你不能轻易做的一件事是快速编写执行有用任务的短脚本.Python比Java更适合编写脚本(当然也有其他选择).

  • @neurino:即使将Linux + Mac一起考虑,也仅占市场的一小部分。如果要针对Windows用户,则必须面对现实-大多数人没有安装Python。如果您仅针对Mac,那么当然会有所不同。:) (2认同)

wis*_*sty 4

我想使用 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
Run Code Online (Sandbox Code Playgroud)

使用示例:

@logged
def my_func(arg1,arg2):
   # your code here
   pass
Run Code Online (Sandbox Code Playgroud)