python替代品for一些java及kotlin功能(慎入啊慎入)

Stream API

在python2时代,那年头java 8还未流行,java6还没有内置map、filter、reduce三大金刚(貌似连for each都没有),也没有lambda表达式,java 6代码相比python确实过于冗长。然而,这种冗长到了java 8时就有很大改善(引入Stream API)。现在java已经到了java14了,语法变得越来越像动态语言,更别说kotlin这种语法糖妖孽。作为从kotlin跑过来写python3的人,表示python有诸多不便,首先就是集合操作。kotlin不仅有了map、filter、reduce,还有了mapIndexed(给映射加上索引)、groupBy(分组)、flatten(展平列表)、flatMap(展平字典)、sortBy(排序)、distinctBy(去重复项)、joinToString等集合操作函数,并且可以无限链式调用,完全不需要借助中间变量。而python这些年还在原地踏步,根本不支持链式调用。kotlin/java上可以一句写完的代码,python却要写成好几行,引入好几个中间变量,简直是不能忍,于是我找到 pipetools 库(官网 http://0101.github.io/pipetools/doc/pipeutils.html#module-pipetools.utils)贴几段官网例子:

from pipetools import pipe, foreach, foreach_do, group_by, flatten ......

from pipetools import where, X

foo = (pipe

| something

| debug_print(X.get_status())

| something_else

| foreach(debug_print("attr is: {0.attr}"))

| etc)

>>> range(9000) > where(X % 100 == 0) | take_first(5) | tuple

(0, 100, 200, 300, 400)

>>> f = where(X > 10) | list | unless(IndexError, X[0])

>>> f([5, 8, 12, 4])

12

>>> f([1, 2, 3])

None

>>> [[[[[[1]]], 2], range(2) > foreach(X + 3)]] > flatten | list

[1, 2, 3, 4]

open('addresses.txt') > foreach(geocode) | foreach_do(launch_missile)

>>> [1, 2, 3, 4, 5, 6] > group_by(X % 2) | list

[(0, [2, 4, 6]), (1, [1, 3, 5])]

>>> ['py', 'pie', 'pi'] > select_first('^pi')

'pie'

>>> 'asdfaSfa' > sort_by(X.lower()).descending

['s', 'S', 'f', 'f', 'd', 'a', 'a', 'a']

可以看出,这个库在集合操作方面还是跟java/kotlin很像的,内置的函数也很丰富,完全有一战之力。只可惜,pipetools 是个第三方库,不是python官方内置的,跟原生python互操作时有时会有些坑。

文件操作

java里文件是一个File类,而python里基本就是字符串,显得非常原始,靠调用os.path各种裁接字符串,虽然官方也有pathlib提供一个面向对象的Path类,但功能不太健全,很多基础功能还是得靠自己手动裁接字符串。kotlin里的File类甚至直接提供了 nameWithoutExtension 属性,一步就能提取纯文件名。

pyhon生态里应该还有其他文件操作的库,但是懒得去找了,估计没一个能跟kotlin打的。

表格操作 pandas VS jtablesaw

pandas 作为python的大招牌,其完善程度当然是首屈一指的,但是,使用这个库简直让我有种回到原始社会的感觉,号称最好的IDE——pycharm有好多提示不出来或提示错误的,IDE的代码补全成了残废(另一款AI加持的代码补全工具Kite - AI Autocomplete and Docs for Python也没卵用,什么代码补全工具都救不了弱类型的python),无奈只能打开官网文档+百度+谷歌+必应+stackoverflow++++++++++++++,反正离开了浏览器,完全写不动代码,这情景真像过去工厂里那些老师傅边捧着厚重的机器说明书边修机器。

都说python现在的热度高,tm全是因为搜索频率高,为什么需要频繁搜索,因为python是弱类型,IDE在写代码时给的提示太少,也无法保证提示的正确性。(更无法读源代码,因为弱类型完全很难在IDE上正确追踪函数调用栈)

如果说有什么东西能让编程老鸟瞬间变菜鸟,变得只能面向搜索引擎编程,python这种弱类型语言就是。

如果说什么东西能让世界上最聪明的IDE变笨的话,python这种弱类型语言就是,弱类型语言从头到尾就写着"你猜我什么类型,你猜我有什么函数什么字段,你能猜中算我输"。

上边的一切麻烦,在我使用同类型的java库jtablesaw时几乎完全不存在,搜索引擎上jtablesaw的信息极少,stackoverflow上也几乎找不到,然而我拔掉网线只靠着IDE的源码阅读和代码提示就顺利写出所有代码,耗时不到python的十分之一,这就是强类型和弱类型语言的差距呀。

现在是全民python的时代,很多培训班也借此热潮捞钱,但是python根本就不是适合干大活(我的心理底线是超过300行代码不用python)。贴一段我在其他地方的回答。

答曰:(本人)pycharm,pydev,VS Code都用过,其实用什么IDE都差不多,由于python是弱类型语言,IDE能给的代码提示很有限(即使有Type Hint),使用陌生的库时,你基本都要边开着浏览器边搜索才能写得动代码,保证你搜到tu,使用一个新库的的成本太高,简直太不友好了。python也就适合常年都用那少数几个库的人,对于他们这群老油条来说,用文本编辑器问题也不是很大。新手的话,弃坑吧!牛逼语言那么多,学什么python,入门虽容易,后路全是坑。

——2020-01-22

kotlin和python哪个好_python替代品for一些java及kotlin功能(慎入啊慎入)相关推荐

  1. python dump函数_python中实现php的var_dump函数功能

    最近在做python的web开发(原谅我的多变,好东西总想都学着...node.js也是),不过过程中总遇到些问题,不管是web.py还是django,开发起来确实没用php方便,毕竟存在的时间比较短 ...

  2. 使用python下载文件_python使用socket实现上下载文件功能

    服务端源偌 """ 1-导入模块 2-创建套接字 3-绑定Ip与端口号 4-被动监听 5-建立链接 6-接收客户端文件信息 7-查找文件打开并发送数据到客户端 8-关闭客 ...

  3. python实现弹幕_python实现b站直播自动发送弹幕功能

    基本开发环境 · Python 3.6 · Pycharm 相关模块使用 import requests import time from tkinter import * import random ...

  4. python 小说爬虫_Python实现的爬取小说爬虫功能示例

    本文实例讲述了Python实现的爬取小说爬虫功能.分享给大家供大家参考,具体如下: 想把顶点小说网上的一篇持续更新的小说下下来,就写了一个简单的爬虫,可以爬取爬取各个章节的内容,保存到txt文档中,支 ...

  5. python常量列表_Python中实现常量(Const)功能

    python语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现这一功能 定义const类如下 复制代码 代码如下: imp ...

  6. python是动态_Python中的对象和动态性 [菜鸟的理解,高手莫入]

    当我们谈到python时常常会说python中一切都是对象,字符串是对象,整数型是对象,标准库中的对象当然也是对象,class本身也是对象,类型(type)也是对象. 但是初学的时候会错误地认为,既然 ...

  7. 学python电脑硬件_Python实现的读取电脑硬件信息功能示例

    本文实例讲述了Python实现的读取电脑硬件信息功能.分享给大家供大家参考,具体如下: 上学那会,老师让我用java获取电脑硬件信息,CPU, 硬盘,MAC等,那个时候感觉搞了好久...... 今天, ...

  8. 高性能python软件开发_Python 最抢手、Java 最流行、Go 最有前途,7000 位程序员揭秘 2019 软件开发现状...

    作者 | 屠敏 整理 报告来源 | JetBrains 出品 | CSDN(ID:CSDNnews) 互联网的下半场,科技公司为面对更加严峻的竞争环境,越来越重视开源节流.而对于身处其中且撑起 IT ...

  9. python 病毒脚本_python实现集中式的病毒扫描功能详解

    本文实例讲述了python实现集中式的病毒扫描功能.分享给大家供大家参考,具体如下: 一 点睛 本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象.描述模式.扫描路 ...

最新文章

  1. dataimagepng php_nginx无法打开 dataimage/php
  2. 实现AGI,强化学习就够了?Sutton:奖励机制足够实现各种目标
  3. 用串口电缆实现双机互联(图)
  4. Hive 05_hive变量、动态分区
  5. 如何用ant将JSP项目打成war包
  6. 《童梦奇缘-梦幻般的羁绊》第一章-朦胧
  7. MyBatis框架笔记05:MyBatis条件查询
  8. C++之stringstream(字符串与数字相互转换)
  9. Firefox 火狐恢复下载失败的任务(原创)
  10. mysql延迟写入概念_三分钟了解MySQL的简单概念
  11. 《大学之路》读书笔记(上)范文3700字
  12. 余世维有效沟通全文字!
  13. 计算请假时间(不算节假日)
  14. 【MTK 6737】Modem编译
  15. 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)...
  16. 将Windows10设置为UTF8编码格式
  17. uniapp 添加地图标记点
  18. 封神演义人物实力分级点评
  19. 一分钟了解“#include命令是干啥的”
  20. 宇宙最简单排序:桶排序

热门文章

  1. 05-文件与流-课堂测试(四则运算)
  2. 20171026_Python学习第二周四次课
  3. 【VS开发】【miscellaneous】 Windows下配置Git
  4. 【腾讯优测干货分享】使用多张图片做帧动画的性能优化
  5. 从我的简历再谈测试分类
  6. 【报告分享】2020年中国短视频头部市场竞争状况专题研究报告.pdf(附下载链接)...
  7. 【报告分享】2020技术趋势报告-德勤-202003.pdf(附120页pdf原文下载链接)
  8. 解压tar.xz文件和tar.gz文件
  9. Python Cookbook手记I
  10. 朋友圈发图多大不会被压缩_类风湿会不会引发肾病?会!本文告诉你对内脏的伤害有多大...