Python OO 语法真是蠢到家了,这里收集了一点,欢迎大家来吐槽

s
sanwadie
楼主 (未名空间)

1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
IDE显示不同颜色不就行了吗
3. __init__,类构造函数,这种语法真是奇葩
4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
自乐

欢迎补充

 

🔥 最新回帖

s
sanwadie
102 楼

Aks就是k8s,是yml
【 在 silverhawk (silverhawk) 的大作中提到: 】
: AKS也用yaml吧,至少之前我是用YAML

s
silverhawk
101 楼

AKS也用yaml吧,至少之前我是用YAML
【 在 sanwadie (三娃爹) 的大作中提到: 】
: azure 用json。
: 差别不大。json表达能力强,多几个标点符号。yml 也够用
: 我们这里给企业做public cloud,要求隔绝部分功能,就是把yaml 翻成json,json翻
: 译成yaml,但是部分属性不翻译,报错,就达成目的

n
netghost
100 楼

因爲縮進是比括號對於人來說更容易描述stack的方式。

這個道理和你爲啥寫C,Java之類的語言的時候雖然都有括號,但是你仍然縮進的原因。

【 在 silverhawk (silverhawk) 的大作中提到: 】
: 很奇怪为啥container世界不用JSON用YAML,就是闲JSON繁琐吗?

s
sanwadie
99 楼

azure 用json。

差别不大。json表达能力强,多几个标点符号。yml 也够用

我们这里给企业做public cloud,要求隔绝部分功能,就是把yaml 翻成json,json翻
译成yaml,但是部分属性不翻译,报错,就达成目的

【 在 silverhawk (silverhawk) 的大作中提到: 】
: 很奇怪为啥container世界不用JSON用YAML,就是闲JSON繁琐吗?

s
silverhawk
98 楼

很奇怪为啥container世界不用JSON用YAML,就是闲JSON繁琐吗?
【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 忘记了完整支持YAML specs的parser存不存在,存在的话可能一只手都数得过来,还有
: 大量的parser实现是错的。就这么一个坑货,在container界也是横着走的货
: YAML

 

🛋️ 沙发板凳

c
chebyshev

你不用python不就完了。另外这些问题定制emacs都可以解决。我还见有人把
lambda写成希腊字母的。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

p
pptwo

你不折腾继承至少还能用,总比javascript里OO还得手动绑定this强。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

s
sanwadie

作为it民工,很多时候身不由己
【 在 chebyshev (......) 的大作中提到: 】
: 你不用python不就完了。另外这些问题定制emacs都可以解决。我还见有人把
: lambda写成希腊字母的。

n
netghost

別用OO啊。就一個破腳本語言,當個庫多點的bash用就行了。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

m
minquan

你觉得是屎,人家觉得是标准

没有这一套,Qt能进Python阵营吗?

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

s
sanwadie

这个不是脚本,要打包发布运行的。

自己点的ji,含泪也要打完炮

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 別用OO啊。就一個破腳本語言,當個庫多點的bash用就行了。

w
wdong

glue language,你说的这些本来就超纲了。

问题是那批乌央乌央的人不会C++,非要用python雕花,那怪谁去。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

m
mpt

python最大的优势是开发效率
一行抵c++ n行, java nn行
解释型语言,不用编译时等待的痛苦
各平台几乎通用,不用到处include包

糙快猛开发的首选
c
chebyshev

python,js的函数强。本身就不是朝着OO的设计。
【 在 mpt (嘿嘿嘿) 的大作中提到: 】
: python最大的优势是开发效率
: 一行抵c++ n行, java nn行
: 解释型语言,不用编译时等待的痛苦
: 各平台几乎通用,不用到处include包
: 糙快猛开发的首选

o
omgpop

有个毛病就是写错了程序要到执行完才知道

【 在 mpt (嘿嘿嘿) 的大作中提到: 】
: python最大的优势是开发效率
: 一行抵c++ n行, java nn行
: 解释型语言,不用编译时等待的痛苦
: 各平台几乎通用,不用到处include包
: 糙快猛开发的首选

f
fantasist

现在ide有各种type check工具了,虽然肯定不如静态类型语言,变量名拼错之类的小
错误还是可以查出来的

【 在 omgpop (See my signature) 的大作中提到: 】
: 有个毛病就是写错了程序要到执行完才知道

N
NGale

息怒息怒,应该是什么需求大就用什么。
Python过气的时候就可以把他一脚踢开。
Python号称各种快,所以扔掉也不可惜。

Python最大的优点是动态脚本语言,同时集成了functional和OOP的特性,外加一系列
的literal和comprehension表达。在开发初期让开发者把重心放在逻辑框架上而不是该用什么类型,也不需要声明一堆boilerplate code。这个非常适用于小型projects,但是会埋下好多坑。对于一个人开发的小型project,这些坑相对容易发觉和修复。对于
大的project,用python可能只是粘合各个package,其他package的核心代码不是
python。

话又说回来Python自身的设计确实是自己hack自己。我认为他既不是functional,也不是OOP,就是是个duck type,看着像用起来像就可以了。

C
Cadillaclee

Java 的oo, 是最清晰的,除了不能多继承。
Python语法简单, 但oo不清晰,容易掉陷阱里。

__init__ 就是java 里的constructor,但参数使用太模糊了,比不上java。

C
Cadillaclee

此话怎讲

【 在 chebyshev (......) 的大作中提到: 】
: python,js的函数强。本身就不是朝着OO的设计。

s
sanwadie

1200% aglee
【 在 omgpop (See my signature) 的大作中提到: 】
: 有个毛病就是写错了程序要到执行完才知道

s
sanwadie

弱类型加函数,要了命

好几次手快还是自动完成,用函数赋值,漏了(),没有一点报错,查了我半天。

【 在 chebyshev (......) 的大作中提到: 】
: python,js的函数强。本身就不是朝着OO的设计。

C
Caravel

你水平还没到一定的地步,看着都是限制。比如1,这个给了你on the fly定义member function的机会,还有各种decorator也有了可能。 2并不是强制的,况且c++里面私有成员不也有naming convention么,有人用下划线,有人用m。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

g
guvest

python是strong typed的。但是python是动态类型的。你把两者搞混了。
所以,只要你不在运行时改变类型,类型这方面其实比C容易看。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 弱类型加函数,要了命
: 好几次手快还是自动完成,用函数赋值,漏了(),没有一点报错,查了我半天。

g
guvest
https://norvig.com/python-lisp.html

python,js有很多lisp类似的特点。
【 在 Cadillaclee (cadillaclee) 的大作中提到: 】
: 此话怎讲

g
guvest

python的问题,有好多work around,写写就知道了。之前,无数互联网服务方面的大
项目是python做的。其能站住,不是没有原因的。
【 在 Caravel (克拉维尔) 的大作中提到: 】
: 你水平还没到一定的地步,看着都是限制。比如1,这个给了你on the fly定义
member
: function的机会,还有各种decorator也有了可能。 2并不是强制的,况且c++里面私有
: 成员不也有naming convention么,有人用下划线,有人用m。

d
danielfeng

第二条错误

_xxx 前置单_才是私有,自己写一般只能用这个
__xxx___ 两边都有双__,内置,不是给你自己写的
__xxx 前置双__,会有name mangling,机制比较复杂,只在特定场合使用

30秒扫一下已经公布了二十年的标准非常难吗?https://www.python.org/dev/peps/pep-0008/#method-names-and-instance-
variables

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

d
danielfeng

做过正经项目的就知道,很多设计模式比如Java的为啥又长又臭,本质上是因为语言表现力不够。像反射模式,恶心得不行的各种动态生成,就是因为Java自己没有那个表现力。在Python里很少听到反射的设计,因为那是脱裤子放屁,它自己直接动态就搞定了

当然Python这样的是双刃剑,给新手就是两个极端,一是很好上手,二是一上手就飘了直接写出屎一样的垃圾代码。只能说这些人没接触过高质量的Python库,不知道正确的写法是啥。我推荐这样的人去学Java,八股文虽然很啰嗦但是出不了大错,适合学习能力和悟性不强的人

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: python的问题,有好多work around,写写就知道了。之前,无数互联网服务方面的大
: 项目是python做的。其能站住,不是没有原因的。
: member

g
guvest

一线语言其实都没有硬伤的。都是写多了就熟悉。不写就不熟。
至少别人能干,你应该也能照着比葫芦画瓢。
当然也有个投资时间和精力的问题。所以要自己动手确证。

早先twitter是python吧?我记得python开发者会议有一年还有个报告。
说python能支持几千万用户什么的。我那时候看了才开始写python的。
golang是我确证过今日头条用,才开始用的。

【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 做过正经项目的就知道,很多设计模式比如Java的为啥又长又臭,本质上是因为语言表
: 现力不够。像反射模式,恶心得不行的各种动态生成,就是因为Java自己没有那个表现
: 力。在Python里很少听到反射的设计,因为那是脱裤子放屁,它自己直接动态就搞定了
: 当然Python这样的是双刃剑,给新手就是两个极端,一是很好上手,二是一上手就飘了
: 直接写出屎一样的垃圾代码。只能说这些人没接触过高质量的Python库,不知道正确的
: 写法是啥。我推荐这样的人去学Java,八股文虽然很啰嗦但是出不了大错,适合学习能
: 力和悟性不强的人

s
sanwadie


谢指正。但我的意思不变

【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 第二条错误
: _xxx 前置单_才是私有,自己写一般只能用这个
: __xxx___ 两边都有双__,内置,不是给你自己写的
: __xxx 前置双__,会有name mangling,机制比较复杂,只在特定场合使用
: 30秒扫一下已经公布了二十年的标准非常难吗?
: https://www.python.org/dev/peps/pep-0008/#method-names-and-instance-
: variables

T
TeacherWei

高级语言,API调用,不管如何折腾,能正确返回错误而系统不崩,是起码的要求。

因此,说这个语言稳定,是可接受的假定,本来就是应该的。而且难度不大的。

我个人不喜欢Python。偶尔用用也是逢场作戏。

s
sanwadie

我听到的都是上了python,搞大了都转别的。我碰到的,python上大项目的,少之又少

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 一线语言其实都没有硬伤的。都是写多了就熟悉。不写就不熟。
: 至少别人能干,你应该也能照着比葫芦画瓢。
: 当然也有个投资时间和精力的问题。所以要自己动手确证。
: 早先twitter是python吧?我记得python开发者会议有一年还有个报告。
: 说python能支持几千万用户什么的。我那时候看了才开始写python的。
: golang是我确证过今日头条用,才开始用的。

s
sanwadie

我这算是逢场作戏。

【 在 TeacherWei (TW) 的大作中提到: 】
: 高级语言,API调用,不管如何折腾,能正确返回错误而系统不崩,是起码的要求。
: 因此,说这个语言稳定,是可接受的假定,本来就是应该的。而且难度不大的。
: 我个人不喜欢Python。偶尔用用也是逢场作戏。

C
Caravel

从本质上讲python和其他语言差别没有那么大,就拿你那个self来说,c++没有么,任
何OO language都有区别class和instance,member attributes bound在instance上面
,c++内部也实现了同样得东西,没有open给你改而已。

相反,python得OO机制十分透明,你可以看到每一步是怎么实现得,甚至可以自己修改。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 我听到的都是上了python,搞大了都转别的。我碰到的,python上大项目的,少之又少

g
guvest

python 做internet 项目那一波早就过去了。早期,YouTube, Pinterest , Dropbox, reedit 这些都是extensively用python。早期amzon还extensively 用lisp呢。晚些时
候,instgram也是python。这是有原因和根据的。
现在python核心竞争力在ML/AI这边。但是还有很多硬件相关的自动化测试。以及
security测试什么的。无可替代。

【 在 sanwadie(三娃爹) 的大作中提到: 】

: 我听到的都是上了python,搞大了都转别的。我碰到的,python上大项目的,少之又少

g
guvest

还是有没有gc最關鍵。別的自己整一整toolchain,改下習慣,我看都能克服。

【 在 Caravel(克拉维尔) 的大作中提到: 】
<br>: 从本质上讲python和其他语言差别没有那么大,就拿你那个self来说,c 没有
么,任
<br>: 何OO language都有区别class和instance,member attributes bound在
instance上面
<br>: ,c 内部也实现了同样得东西,没有open给你改而已。
<br>: 相反,python得OO机制十分透明,你可以看到每一步是怎么实现得,甚至可以自
己修改。
<br>

C
Caravel

有明确目标都可以想办法
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 还是有没有gc最關鍵。別的自己整一整toolchain,改下習慣,我看都能克服。
:
: 从本质上讲python和其他语言差别没有那么大,就拿你那个self来说,c
: 没有
: 么,任
:
: 何OO language都有区别class和instance,member attributes bound在
: instance上面
:
: ,c 内部也实现了同样得东西,没有open给你改而已。
:
: 相反,python得OO机制十分透明,你可以看到每一步是怎么实现得,甚至
: 可以自
: 己修改。
: ...................

s
sanwadie

这个文档不看还好,一看更恶心。这个只能用奇淫技巧来形容了。感觉就像国内的传武门派,在那里自嗨,顶个软用

我之前一直记得 _ 是 non-public,前几天发现有人调用我定义的内部函数。放狗搜了
一下,建议用__,所以给了我这个错觉。

问题来了,我英语太烂,实在无法理解 python 所谓的 non-public是个毛意思

如果代码规则只依赖开发人员知道并正确使用,就像一个社会期望人人按法律行事,而没有警察这种暴力机构。

仅止于此,以后严肃项目,不会再踩python的坑。最多拿来管管aws/aliyun

附上一段测试代码。
a.py:
class A:
def __init__(self):
self._a = 'a'
self.b = 'b'

def _afun(self):
print(self._a)

def bfun(self):
print(self.b)

def __cfun(self):
print(self.b)

b.py:
from a import A
c1 = A()
c1._afun()
c1.bfun()
c1.__cfun()
print(c1._a)
print(c1.b)

Method Names and Instance Variables

Use the function naming rules: lowercase with words separated by underscores as necessary to improve readability.

Use one leading underscore only for non-public methods and instance
variables.

To avoid name clashes with subclasses, use two leading underscores to invoke Python's name mangling rules.

Python mangles these names with the class name: if class Foo has an
attribute named __a, it cannot be accessed by Foo.__a. (An insistent user
could still gain access by calling Foo._Foo__a.) Generally, double leading
underscores should be used only to avoid name conflicts with attributes in
classes designed to be subclassed.

Note: there is some controversy about the use of __names (see below).

【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 第二条错误
: _xxx 前置单_才是私有,自己写一般只能用这个
: __xxx___ 两边都有双__,内置,不是给你自己写的
: __xxx 前置双__,会有name mangling,机制比较复杂,只在特定场合使用
: 30秒扫一下已经公布了二十年的标准非常难吗?
: https://www.python.org/dev/peps/pep-0008/#method-names-and-instance-
: variables

d
danielfeng

PEP 8不是让你死记硬背,你应该没用过正经CI/CD啥的,不然写的代码不符合PEP 8的
话直接连第一步都过不了

内行看门道。PEP最早是什么时候出的?2000年7月。Java的JEP是什么时候出的?2011
年8月,比PEP晚了整整11年,啥都凉了

PEP: https://www.python.org/dev/peps/

JEP: http://openjdk.java.net/jeps/0

话说PEP这样大白话文档看着都恶心的话,那你根本不可能读懂RFC了……

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 这个文档不看还好,一看更恶心。这个只能用奇淫技巧来形容了。感觉就像国内的传武
: 门派,在那里自嗨,顶个软用
: 我之前一直记得 _ 是 non-public,前几天发现有人调用我定义的内部函数。放狗搜了
: 一下,建议用__,所以给了我这个错觉。
: 问题来了,我英语太烂,实在无法理解 python 所谓的 non-public是个毛意思
: 如果代码规则只依赖开发人员知道并正确使用,就像一个社会期望人人按法律行事,而
: 没有警察这种暴力机构。
: 仅止于此,以后严肃项目,不会再踩python的坑。最多拿来管管aws/aliyun
: 附上一段测试代码。
: a.py:
: ...................

d
danielfeng

“放狗搜了一下,建议用__”

这才是Python的问题,入门太容易,垃圾示例满天飞,类似考完C语言二级就觉得自己
会写操作系统了

non-public是convention,convention这个词懂吧?public/private是有些语言在语言层面实现的概念,在Python里没区别,就是用convention来区分

早年编程不一样有各种变量命名convention?frmMain、lblNotice一个意思

我也同意Python不需要这么多小白入坑。Python是人笨怪刀钝最大的受害者,谁叫它这么好入门呢。等你搞到modern一点的Python比如asyncio的那些最新库,你会有新的感
受。当然这需要好几个层次的提升了

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 这个文档不看还好,一看更恶心。这个只能用奇淫技巧来形容了。感觉就像国内的传武
: 门派,在那里自嗨,顶个软用
: 我之前一直记得 _ 是 non-public,前几天发现有人调用我定义的内部函数。放狗搜了
: 一下,建议用__,所以给了我这个错觉。
: 问题来了,我英语太烂,实在无法理解 python 所谓的 non-public是个毛意思
: 如果代码规则只依赖开发人员知道并正确使用,就像一个社会期望人人按法律行事,而
: 没有警察这种暴力机构。
: 仅止于此,以后严肃项目,不会再踩python的坑。最多拿来管管aws/aliyun
: 附上一段测试代码。
: a.py:
: ...................

n
netghost

你不喜歡這東西花時間讀這種幹嘛?

我說了,python就是一個給不會編程的人能寫腳本的東西,但是這種想法常常能火,火了之後就不知道自己本來幹啥了。能用就用用好了,還想怎麼着?

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 这个文档不看还好,一看更恶心。这个只能用奇淫技巧来形容了。感觉就像国内的传武
: 门派,在那里自嗨,顶个软用
: 我之前一直记得 _ 是 non-public,前几天发现有人调用我定义的内部函数。放狗搜了
: 一下,建议用__,所以给了我这个错觉。
: 问题来了,我英语太烂,实在无法理解 python 所谓的 non-public是个毛意思
: 如果代码规则只依赖开发人员知道并正确使用,就像一个社会期望人人按法律行事,而
: 没有警察这种暴力机构。
: 仅止于此,以后严肃项目,不会再踩python的坑。最多拿来管管aws/aliyun
: 附上一段测试代码。
: a.py:
: ...................

n
netghost

考完C語言二級的人,大部分是放棄計算機編程了,哪有覺得自己會寫操作系統了。
【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: “放狗搜了一下,建议用__”
: 这才是Python的问题,入门太容易,垃圾示例满天飞,类似考完C语言二级就觉得自己
: 会写操作系统了
: non-public是convention,convention这个词懂吧?public/private是有些语言在语言
: 层面实现的概念,在Python里没区别,就是用convention来区分
: 早年编程不一样有各种变量命名convention?frmMain、lblNotice一个意思
: 我也同意Python不需要这么多小白入坑。Python是人笨怪刀钝最大的受害者,谁叫它这
: 么好入门呢。等你搞到modern一点的Python比如asyncio的那些最新库,你会有新的感
: 受。当然这需要好几个层次的提升了

d
danielfeng

还“前几天发现有人调用我定义的内部函数”

不明白这个道理?你根本无法阻止SB乱调用,这其实不是你的问题。你们是什么组,烂到这个程度……

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 这个文档不看还好,一看更恶心。这个只能用奇淫技巧来形容了。感觉就像国内的传武
: 门派,在那里自嗨,顶个软用
: 我之前一直记得 _ 是 non-public,前几天发现有人调用我定义的内部函数。放狗搜了
: 一下,建议用__,所以给了我这个错觉。
: 问题来了,我英语太烂,实在无法理解 python 所谓的 non-public是个毛意思
: 如果代码规则只依赖开发人员知道并正确使用,就像一个社会期望人人按法律行事,而
: 没有警察这种暴力机构。
: 仅止于此,以后严肃项目,不会再踩python的坑。最多拿来管管aws/aliyun
: 附上一段测试代码。
: a.py:
: ...................

f
fantasist


_没有语法上的意义吧,貌似纯粹是从c++那里偷来的命名style。现在很多流行的高级
语言根本没有private的概念,比如go和python,private也不是绝对正确的设计。
每个语言都有坑,python已经够好了,光骂有什么用……

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 这个文档不看还好,一看更恶心。这个只能用奇淫技巧来形容了。感觉就像国内的传武
: 门派,在那里自嗨,顶个软用
: 我之前一直记得 _ 是 non-public,前几天发现有人调用我定义的内部函数。放狗搜了
: 一下,建议用__,所以给了我这个错觉。
: 问题来了,我英语太烂,实在无法理解 python 所谓的 non-public是个毛意思
: 如果代码规则只依赖开发人员知道并正确使用,就像一个社会期望人人按法律行事,而
: 没有警察这种暴力机构。
: 仅止于此,以后严肃项目,不会再踩python的坑。最多拿来管管aws/aliyun
: 附上一段测试代码。
: a.py:
: ...................

s
sanwadie

我是民工组,人家是正规军 :-)

【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 还“前几天发现有人调用我定义的内部函数”
: 不明白这个道理?你根本无法阻止SB乱调用,这其实不是你的问题。你们是什么组,烂
: 到这个程度……

s
sanwadie

以前有个买产品的,老是说,我的东西老牛了,上手快,上到80老太,下到3岁娃娃,
都会用。等别人用出了毛病,就骂人58,治丧不够,英语不行,文档没读够。既然都说python易学易用,别人凭啥还花那么多时间去读裹脚布一样的文档?有那时间,不去学c++

我可以按照那些 convention 办事,但不是每个人都如我一样循规蹈矩。所以这个不是人笨怪刀钝,这是对python吹捧过度。python 就只是个 glue language,不适合团队
合作,搞大项目。

另:我曾花半天时间学go,然后花了两周写个小程序跑,没幺蛾子。

不用大家来踩我,我这智商,以后不会再用python做严肃项目。至于DL/ML,其实明白
人都知道,python 就是个 glue 脚本,活都是底层c/c++干得。

【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: “放狗搜了一下,建议用__”
: 这才是Python的问题,入门太容易,垃圾示例满天飞,类似考完C语言二级就觉得自己
: 会写操作系统了
: non-public是convention,convention这个词懂吧?public/private是有些语言在语言
: 层面实现的概念,在Python里没区别,就是用convention来区分
: 早年编程不一样有各种变量命名convention?frmMain、lblNotice一个意思
: 我也同意Python不需要这么多小白入坑。Python是人笨怪刀钝最大的受害者,谁叫它这
: 么好入门呢。等你搞到modern一点的Python比如asyncio的那些最新库,你会有新的感
: 受。当然这需要好几个层次的提升了

d
danielfeng

裹脚布是Java专用不要搞错。C++还是算了我自认功力不够这辈子都学不会。你是不是
把C和C++搞混了在这瞎扯?这世界上有真懂C++的?别开玩笑了好吧……

Python根本不和你瞎扯文档你都读不懂,就这也只能写写小程序玩了。给你指条明路都不领情,老早就说了Python/JavaScript/Go/Rust这四个优先级按顺序保证没错,C是基本功但和前四个的层次不同,会最好不会也没事。C++就别碰了不要做题家思维

当然你钱你定你非要和钱过不去你高兴就好

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 以前有个买产品的,老是说,我的东西老牛了,上手快,上到80老太,下到3岁娃娃,
: 都会用。等别人用出了毛病,就骂人58,治丧不够,英语不行,文档没读够。既然都说
: python易学易用,别人凭啥还花那么多时间去读裹脚布一样的文档?有那时间,不去学
: c++
: 我可以按照那些 convention 办事,但不是每个人都如我一样循规蹈矩。所以这个不是
: 人笨怪刀钝,这是对python吹捧过度。python 就只是个 glue language,不适合团队
: 合作,搞大项目。
: 另:我曾花半天时间学go,然后花了两周写个小程序跑,没幺蛾子。
: 不用大家来踩我,我这智商,以后不会再用python做严肃项目。至于DL/ML,其实明白
: 人都知道,python 就是个 glue 脚本,活都是底层c/c++干得。
: ...................

T
TeacherWei

楼主是经历过DOS时代的老司机。取决于工作性质,一辈子不需要碰Python也是可能的。

萝卜白菜,各有所爱。一个scope靠缩进来定义的语言,我个人对其严肃性永远存在蔑
视。

【 在 danielfeng(公孙欠扁) 的大作中提到: 】

: 裹脚布是Java专用不要搞错。C 还是算了我自认功力不够这辈子都学不会。你
是不是

: 把C和C 搞混了在这瞎扯?这世界上有真懂C 的?别开玩笑了好吧……

: Python根本不和你瞎扯文档你都读不懂,就这也只能写写小程序玩了。给你指条明路都

: 不领情,老早就说了Python/JavaScript/Go/Rust这四个优先级按顺序保证没错
,C是基

: 本功但和前四个的层次不同,会最好不会也没事。C 就别碰了不要做题家思维

: 当然你钱你定你非要和钱过不去你高兴就好

C
Caravel

indent,dedent两个字符,和一对括号有啥区别?

【 在 TeacherWei (TW) 的大作中提到: 】
: 楼主是经历过DOS时代的老司机。取决于工作性质,一辈子不需要碰Python也是可能
的。
: 萝卜白菜,各有所爱。一个scope靠缩进来定义的语言,我个人对其严肃性永远存在蔑
: 视。
:
: 裹脚布是Java专用不要搞错。C 还是算了我自认功力不够这辈子都学不会。你
: 是不是
:
: 把C和C 搞混了在这瞎扯?这世界上有真懂C 的?别开玩笑了好吧……
:
: Python根本不和你瞎扯文档你都读不懂,就这也只能写写小程序玩了。给你指条
: 明路都
:
: 不领情,老早就说了Python/JavaScript/Go/Rust这四个优先级按顺序保证没错
: ,C是基
: ...................

c
chebyshev

还是要尊重事实。

python在几个领域dominate,在几个领域流行。我大概列一下。

1.各种数值计算,从物理化学到生物,dominate
2.芯片应用接口,硬件接口,very popular
3.自动化测试,从security test到各种实验室工作
4.ML/AI接口,dominate
5.internet后端,流行

其他方向就不说了。以internet后端而论,从2010开始,youtube,pinterset到
instegram,dropbox,无数公司都曾经是extensively python。你说人家没有团队合作,这就有点滑稽了。amazon到201x年才把Lisp后端全改掉。有没有团队合作,那要看是擅长什么的团队。没有哪个团队什么都擅长。干活就用自己会的,擅长的就可以了。忽视数据和事实,贬低自己不擅长的方向未必可取。

当然,你说internet后端正在逐步被go替代,这也是可能的。我也这么看。go性能优势很大,我测过。但是go是静态类型。不可能完全替代python在后端快速开发的作用的。

我在许多年前第一次看numpy的时候,认为其与matlab相比,惨不忍睹。
但是3年后就不一样了。帖子在本版都有。这一块是最难被替代的。没做过的人不知道。
不是底层c/cpp做完,python什么都不用做了。

我举一个例子。fftw早就有了,但是上面派生出来的,
与Fourier变换有关的算法,我能讲一年不重样。此类算法python是最全的。
质量是不错的。这些东西其他的语言系统要补全,那基本上是不可能的。
除非matlab开源,别的都没戏。投入太大了。

假如你找个计算物理的,生物信息的,熟悉scipy什么的人,他也能给你讲两年,
为什么那些攒下来的东西,其他语言系统补起来很难。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 以前有个买产品的,老是说,我的东西老牛了,上手快,上到80老太,下到3岁娃娃,
: 都会用。等别人用出了毛病,就骂人58,治丧不够,英语不行,文档没读够。既然都说
: python易学易用,别人凭啥还花那么多时间去读裹脚布一样的文档?有那时间,不去学
: c++
: 我可以按照那些 convention 办事,但不是每个人都如我一样循规蹈矩。所以这个不是
: 人笨怪刀钝,这是对python吹捧过度。python 就只是个 glue language,不适合团队
: 合作,搞大项目。
: 另:我曾花半天时间学go,然后花了两周写个小程序跑,没幺蛾子。
: 不用大家来踩我,我这智商,以后不会再用python做严肃项目。至于DL/ML,其实明白
: 人都知道,python 就是个 glue 脚本,活都是底层c/c++干得。

c
chebyshev

核心问题是很多人不习惯dynamic type。
这是Lisp传下来的。但是历史上第一个网上商店是Lisp写的。amzon很晚才去掉lisp。
paul graham讲过详细的历史,以及这么干的理由。我觉得很有道理。这里就不重述了。

然而这楼里好多人并不知道strong/weak, static/dynamic type
是不同的范畴。

例如C是weak type的,类型如果出错,更难查。只能靠老司机自我约束。

显然python比任何一种lisp都好的多。
除非有更好的dynamic type语言出现,不然pyton的market位置是很难被取代的。

objective-c也是dynamic type。当初steve jobs,福斯涛开发第一个手机操作系统,
选objective-c,是有理由的。swift还没有完全替代objective-c,莱特纳就被干掉了
。。。

【 在 Caravel (克拉维尔) 的大作中提到: 】
: indent,dedent两个字符,和一对括号有啥区别?
: 的。

T
TeacherWei

因为除了space还有tab。靠缩进这种设计属于精神分裂。

另外一种依赖缩进的语言是Fortran。但是历史背景完全不一样。Fortran就是科学计算用,不像Python是专门干各种幺蛾子的。

【 在 Caravel(克拉维尔) 的大作中提到: 】

: indent,dedent两个字符,和一对括号有啥区别?

: 的。

c
chebyshev

rust没戏。firefox公司不靠谱啊。皮之不存,毛将焉附。
【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 裹脚布是Java专用不要搞错。C++还是算了我自认功力不够这辈子都学不会。你是不是
: 把C和C++搞混了在这瞎扯?这世界上有真懂C++的?别开玩笑了好吧……
: Python根本不和你瞎扯文档你都读不懂,就这也只能写写小程序玩了。给你指条明路都
: 不领情,老早就说了Python/JavaScript/Go/Rust这四个优先级按顺序保证没错,C是基
: 本功但和前四个的层次不同,会最好不会也没事。C++就别碰了不要做题家思维
: 当然你钱你定你非要和钱过不去你高兴就好

d
danielfeng

他的问题在于根本不了解业界是个什么情况,这几年错过了金矿都不自知

Go的优势在container native,就是Kubernetes那一套,目前还没有别的可以替代

Java全家桶在Kubernetes冲击下已经全面溃败,还有的优势在一些中间件但一直都在被替换中(包括被自家的Kotlin + JVM爆菊)

Robinhood做的高频交易系统就是用modern Python写的流处理,能力超强。虽然中间件目前还离不了JVM系的Kafka,但也已经被搞成语言无关了,有别的实现那分分钟可以替换

Java肉眼可见的趋势是退化成固守中间件,接下来被边缘化。Java和K8s生态根本不配
,一个是几十年前的抽象,另一个是这几年的抽象

legacy Python在很多领域早就是dominate,而modern Python在asyncio + K8s生态下
更是飞速攻城掠地。Python多线程不行是客观事实,但是现在单线程异步性能已经和Go、Node打平了,多核根本不是个事,K8s微服务直接爆兵策略。需要通信对吧?中间件
分布式锁/通信顶上,早就是分布式系统了谁还关心Java那老掉牙的单机多线程性能

所以连自己的玩具程序都写不好,PEP 8都不过CI/CD的人大谈Python没有团队合作这可能是2021年最大的笑话

【 在 chebyshev (......) 的大作中提到: 】
: 还是要尊重事实。
: python在几个领域dominate,在几个领域流行。我大概列一下。
: 1.各种数值计算,从物理化学到生物,dominate
: 2.芯片应用接口,硬件接口,very popular
: 3.自动化测试,从security test到各种实验室工作
: 4.ML/AI接口,dominate
: 5.internet后端,流行
: 其他方向就不说了。以internet后端而论,从2010开始,youtube,pinterset到
: instegram,dropbox,无数公司都曾经是extensively python。你说人家没有团队合作
: ,这就有点滑稽了。amazon到201x年才把Lisp后端全改掉。有没有团队合作,那要看是
: ...................

c
chebyshev

go是静态类型。无法完全取代python。都有自己的市场。
这就好比objective-c不可能灭亡。

但是基本的原则还是,擅长什么就写什么。这条肯定没错。
【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 他的问题在于根本不了解业界是个什么情况,这几年错过了金矿都不自知
: Go的优势在container native,就是Kubernetes那一套,目前还没有别的可以替代
: Java全家桶在Kubernetes冲击下已经全面溃败,还有的优势在一些中间件但一直都在被
: 替换中(包括被自家的Kotlin + JVM爆菊)
: Robinhood做的高频交易系统就是用modern Python写的流处理,能力超强。虽然中间件
: 目前还离不了JVM系的Kafka,但也已经被搞成语言无关了,有别的实现那分分钟可以替换
: Java肉眼可见的趋势是退化成固守中间件,接下来被边缘化。Java和K8s生态根本不配
: ,一个是几十年前的抽象,另一个是这几年的抽象
: legacy Python在很多领域早就是dominate,而modern Python在asyncio + K8s生态下
: 更是飞速攻城掠地。Python多线程不行是客观事实,但是现在单线程异步性能已经和Go
: ...................

d
danielfeng

你对靠缩进吃饭语言的耐受度太低了,应该是没摸过YAML?这么看你摸一下YAML会疯的

【 在 TeacherWei (TW) 的大作中提到: 】
: 因为除了space还有tab。靠缩进这种设计属于精神分裂。
: 另外一种依赖缩进的语言是Fortran。但是历史背景完全不一样。Fortran就是科学计算
: 用,不像Python是专门干各种幺蛾子的。
:
: indent,dedent两个字符,和一对括号有啥区别?
:
: 的。
:

f
fantasist

你记错了吧,amazon早期的e-commerce部分是perl写的,不是lisp。我在里边的时候见过perl service,比c++ service还操蛋。
python把perl直接扫进历史的垃圾堆,ruby也快了。

【 在 chebyshev (......) 的大作中提到: 】
: 核心问题是很多人不习惯dynamic type。
: 这是Lisp传下来的。但是历史上第一个网上商店是Lisp写的。amzon很晚才去掉lisp。
: paul graham讲过详细的历史,以及这么干的理由。我觉得很有道理。这里就不重述
了。
: 然而这楼里好多人并不知道strong/weak, static/dynamic type
: 是不同的范畴。
: 例如C是weak type的,类型如果出错,更难查。只能靠老司机自我约束。
: 显然python比任何一种lisp都好的多。
: 除非有更好的dynamic type语言出现,不然pyton的market位置是很难被取代的。
: objective-c也是dynamic type。当初steve jobs,福斯涛开发第一个手机操作系统,
: 选objective-c,是有理由的。swift还没有完全替代objective-c,莱特纳就被干掉了
: ...................

T
TeacherWei

YAML是图灵完备的么?
前阵子我还真的和楼主讨论过这个语言。
作为开源的Home assistance的编程语言。
我还顺便讲了语言界Double speak的问题。我认为这些和同后现代后工业化的社会经济问题,以及赛博朋克社会的人性缺失都有强相关。

【 在 danielfeng(公孙欠扁) 的大作中提到: 】

: 你对靠缩进吃饭语言的耐受度太低了,应该是没摸过YAML?这么看你摸一下YAML会疯的

f
fantasist

金矿跟用什么语言关系不大。不管Go还是Python,很多新的business model增加了就业,而不是提高了码工的薪水。

【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 他的问题在于根本不了解业界是个什么情况,这几年错过了金矿都不自知
: Go的优势在container native,就是Kubernetes那一套,目前还没有别的可以替代
: Java全家桶在Kubernetes冲击下已经全面溃败,还有的优势在一些中间件但一直都在被
: 替换中(包括被自家的Kotlin + JVM爆菊)
: Robinhood做的高频交易系统就是用modern Python写的流处理,能力超强。虽然中间件
: 目前还离不了JVM系的Kafka,但也已经被搞成语言无关了,有别的实现那分分钟可以替换
: Java肉眼可见的趋势是退化成固守中间件,接下来被边缘化。Java和K8s生态根本不配
: ,一个是几十年前的抽象,另一个是这几年的抽象
: legacy Python在很多领域早就是dominate,而modern Python在asyncio + K8s生态下
: 更是飞速攻城掠地。Python多线程不行是客观事实,但是现在单线程异步性能已经和Go
: ...................

c
chebyshev

我应该是没记错。你查查看。
我就不费事了。这个很难查,因为amzon总是出来什么什
么lisp的书。

但是主要结论是类似的,perl也是dynamic typed的。

【 在 fantasist (一) 的大作中提到: 】
: 你记错了吧,amazon早期的e-commerce部分是perl写的,不是lisp。我在里边的时候见
: 过perl service,比c++ service还操蛋。
: python把perl直接扫进历史的垃圾堆,ruby也快了。
: 了。

f
fantasist

你确实记错了https://en.wikipedia.org/wiki/Programming_languages_used_in_most_popular_
websites

【 在 chebyshev (......) 的大作中提到: 】
: 我应该是没记错。你查查看。
: 我就不费事了。这个很难查,因为amzon总是出来什么什
: 么lisp的书。
: 但是主要结论是类似的,perl也是dynamic typed的。

d
danielfeng

忘记了完整支持YAML specs的parser存不存在,存在的话可能一只手都数得过来,还有大量的parser实现是错的。就这么一个坑货,在container界也是横着走的货

【 在 TeacherWei (TW) 的大作中提到: 】
: YAML是图灵完备的么?
: 前阵子我还真的和楼主讨论过这个语言。
: 作为开源的Home assistance的编程语言。
: 我还顺便讲了语言界Double speak的问题。我认为这些和同后现代后工业化的社会经济
: 问题,以及赛博朋克社会的人性缺失都有强相关。
:
: 你对靠缩进吃饭语言的耐受度太低了,应该是没摸过YAML?这么看你摸一下
YAML
: 会疯的
:

c
chebyshev

I know that part of every Amazon.com product page is generated using a Lisp service, but only because I had a beer with the guy who wrote and deployed
it.

2009 stackoverflow
https://stackoverflow.com/questions/406729/what-are-some-examples-of-lisp-
being-used-in-production-outside-of-ai-and-acade
【 在 fantasist (一) 的大作中提到: 】
: 你确实记错了
: https://en.wikipedia.org/wiki/Programming_languages_used_in_most_popular_
: websites

c
chebyshev

PG:2001

Viaweb at first had two parts: the editor, written in Lisp, which people
used to build their sites, and the ordering system, written in C, which
handled orders. The first version was mostly Lisp, because the ordering
system was small. Later we added two more modules, an image generator
written in C, and a back-office manager written mostly in Perl.

In January 2003, Yahoo released a new version of the editor written in C++
and Perl. It's hard to say whether the program is no longer written in Lisp, though, because to translate this program into C++ they literally had to
write a Lisp interpreter: the source files of all the page-generating
templates are still, as far as I know, Lisp code. (See Greenspun's Tenth
Rule.)

【 在 chebyshev (......) 的大作中提到: 】
: I know that part of every Amazon.com product page is generated using a
Lisp
: service, but only because I had a beer with the guy who wrote and deployed
: it.
: 2009 stackoverflow
: https://stackoverflow.com/questions/406729/what-are-some-examples-of-lisp-: being-used-in-production-outside-of-ai-and-acade

f
fantasist

大公司什么语言都有死忠粉用,他们愿意花很多时间强行在没支持的情况下折腾,比如fb里曾经有个D语言的核心advocate。另外收购来的小公司也有可能,比如fb买的Parse用ruby和go,当时基本没有别的组用。所以你听说用了某个奇葩语言不用奇怪,肯定不是主流,可以忽略就对了。

T
TeacherWei

那也只能说明该圈太乱。

【 在 danielfeng(公孙欠扁) 的大作中提到: 】

: 忘记了完整支持YAML specs的parser存不存在,存在的话可能一只手都数得过来,还有

: 大量的parser实现是错的。就这么一个坑货,在container界也是横着走的货

: YAML

c
chebyshev

以类型而言,有weak/strong,static/dynamic两组范畴。
以gc而言,有yes/no两组。
分成8个区。
对应于产品的性质,每个区都有适合的时候。
所以我倾向于认为还是市场的作用。

【 在 fantasist (一) 的大作中提到: 】
: 大公司什么语言都有死忠粉用,他们愿意花很多时间强行在没支持的情况下折腾,比如
: fb里曾经有个D语言的核心advocate。另外收购来的小公司也有可能,比如fb买的
Parse
: 用ruby和go,当时基本没有别的组用。所以你听说用了某个奇葩语言不用奇怪,肯定不
: 是主流,可以忽略就对了。

s
sanwadie

看得出公孙大爷是python大拿,谢谢他的很多指教。一并回一些贴。

我对python的缩进和弱类型是有思想准备的,毕竟大家说了好多年。但这次对它的oo有了更深的认识。

我得承认没有全面学习过python,很早以前看了半页语法,几个例程开干,民工IT索男要的是短频快,python的经验来自flask有限的几个脚本,主要是在 ml/dl 领域,把
github上一些东西做成服务给人用。另外就是ansible和devops。这两个领域,我会继
续用。其他的项目,如果没有合适的团队或用户硬性需求,我不会。

我近几年看到业界的变化,还用过js,ruby,groovy,go,dart等。

js天天用但好像存在感最低,水平就到用轮子的程度。ruby基本死了。groovy 在
jenkins里用得多,也就这样了

我自己比较偏喜欢go,开始在后端服务中替换Java。但大型复杂项目,还是Java,因为团队熟,找人容易,轮子全,也因为我的圈子认这。一开始推荐用go,还是要花时间去说服别人,并承担技术风险的。听说go在挖矿领域也很pop。

dart/flutter,我推荐,它就是个 TypeScript 的山寨,一次开发,出四端,有点被惊艳到,第一
次使用就感觉不错,可能对mobile app的原生开不满已久,尤其讨厌苹果的开发生态(但喜欢它的产品和隐私,严重精分)。唯一的坏处是狗家产品

c
chebyshev

公孙大爷看好python可能有十年了?确实是大拿。
他能带来python社区的新进展,相信不少人都从他说的东西受益。

我个人感觉,对应用软件来说。
lisp-pyton-perl-js。。。这些动态类型的,对快速迭代友好。

需求确定性不高的阶段,边做边改,这些语言很适合。
需求相对固定之后,往外扩张的时候,这些语言的bug容易被打出来。
而且出问题很难改。这可能是为何不少公司后来就用java重写了。不费劲去改了。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 看得出公孙大爷是python大拿,谢谢他的很多指教。一并回一些贴。
: 我对python的缩进和弱类型是有思想准备的,毕竟大家说了好多年。但这次对它的oo有
: 了更深的认识。
: 我得承认没有全面学习过python,很早以前看了半页语法,几个例程开干,民工IT索男
: 要的是短频快,python的经验来自flask有限的几个脚本,主要是在 ml/dl 领域,把: github上一些东西做成服务给人用。另外就是ansible和devops。这两个领域,我会继
: 续用。其他的项目,如果没有合适的团队或用户硬性需求,我不会。
: 我近几年看到业界的变化,还用过js,ruby,groovy,go,dart等。
: js天天用但好像存在感最低,水平就到用轮子的程度。ruby基本死了。groovy 在
: jenkins里用得多,也就这样了
: ...................

w
wdong

事到如今,其实不上python又有什么办法呢?

我现在就是C++加python,中间用pybind11对接。觉得python
不爽的地方我就用C++写。

【 在 chebyshev (......) 的大作中提到: 】
: 公孙大爷看好python可能有十年了?确实是大拿。
: 他能带来python社区的新进展,相信不少人都从他说的东西受益。
: 我个人感觉,对应用软件来说。
: lisp-pyton-perl-js。。。这些动态类型的,对快速迭代友好。
: 需求确定性不高的阶段,边做边改,这些语言很适合。
: 需求相对固定之后,往外扩张的时候,这些语言的bug容易被打出来。
: 而且出问题很难改。这可能是为何不少公司后来就用java重写了。不费劲去改了。

c
chebyshev


我现在trial and error,以及客户demo用python。
说定了给钱后,用c重写一遍。

【 在 wdong (万事休) 的大作中提到: 】
: 事到如今,其实不上python又有什么办法呢?
: 我现在就是C++加python,中间用pybind11对接。觉得python
: 不爽的地方我就用C++写。

s
sanwadie

我基本就是wdong的路子。

再补充一点,受公孙刺激,又扫了点语法,python3 支持函数参数类型 hint,感觉会
有点帮助,但是变量还是没有明确的类型定义方式,尤其是一开始是 None 的情况下。如果哪位大拿能指点一下,不甚感激

【 在 chebyshev (......) 的大作中提到: 】
: 我现在trial and error,以及客户demo用python。
: 说定了给钱后,用c重写一遍。

f
fantasist

x: int = None
类型是动态的,这只是加个tag,没有强制约束
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 我基本就是wdong的路子。
: 再补充一点,受公孙刺激,又扫了点语法,python3 支持函数参数类型 hint,感觉会
: 有点帮助,但是变量还是没有明确的类型定义方式,尤其是一开始是 None 的情况下。
: 如果哪位大拿能指点一下,不甚感激

f
fantasist

突然想起来,我看过instagram前端代码,就是python3,用asyncio那一套+OOD。至少
有大几百人每天在那个repo里干活。
设计好不好是见仁见智,说不能团队协作、写严肃项目的就有点荒唐了。

s
sanwadie

巧了,我也用 coro。一开始也是各种不适应,熟悉了还好,嗯有点爽,所以没吐槽。

但我不明白,你说的前端指那块。

【 在 fantasist (一) 的大作中提到: 】
: 突然想起来,我看过instagram前端代码,就是python3,用asyncio那一套+OOD。至少
: 有大几百人每天在那个repo里干活。
: 设计好不好是见仁见智,说不能团队协作、写严肃项目的就有点荒唐了。

s
sanwadie

谢谢
【 在 fantasist (一) 的大作中提到: 】
: x: int = None
: 类型是动态的,这只是加个tag,没有强制约束

f
fantasist

我们这里前端一般指web server的application layer,很多business logic在这里。
真正的后端是各种infra service,比如database。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 巧了,我也用 coro。一开始也是各种不适应,熟悉了还好,嗯有点爽,所以没吐槽。
: 但我不明白,你说的前端指那块。

s
sanwadie

Make sense

【 在 fantasist (一) 的大作中提到: 】
: 我们这里前端一般指web server的application layer,很多business logic在这里。
: 真正的后端是各种infra service,比如database。

p
pseudo

估计你记混了,yahoo 的shopping 网站最初是用common lisp写的。

【 在 chebyshev (......) 的大作中提到: 】
: 我应该是没记错。你查查看。
: 我就不费事了。这个很难查,因为amzon总是出来什么什
: 么lisp的书。
: 但是主要结论是类似的,perl也是dynamic typed的。

d
daemonself

因为公司里的三脚猫占90%。MBA们要把队伍作大不能只看几个geek的脸色阿
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 我听到的都是上了python,搞大了都转别的。我碰到的,python上大项目的,少之又少

L
Liber8

python是很sb 但是不用不行
很多不合理的东西就是存在于这个社会 不仅仅是python
我觉得最好的是 C++有两个版本 解释版类似python 和 编译版

【 在 wdong (万事休) 的大作中提到: 】
: 事到如今,其实不上python又有什么办法呢?
: 我现在就是C++加python,中间用pybind11对接。觉得python
: 不爽的地方我就用C++写。

s
staftermath

1. 不想要打个staticmethod就行了。写起来问题不大。当然同意是补丁语法。
2. 是个问题。不过遵守规矩的话问题不大。不定义private/public是语言特征。好不
好是另外一回事情。我个人偏向同意你的意见。
3. 具体说说怎么奇葩了?撇去无法overload的问题,单独存在一个method来构造并不
一定比强行需要一个和类同名的来当构造函数更奇葩吧?
4. 继承非常差。没有interface。抽象方法没有统一语法标准。

补充
5. 2021年了并行和协程都还没有好好的整。感觉开发者并没有想让python好好支持多
线程开发。绝大多数内置类和扩展类(collections里面)都不是threadsafe或不提供对应的threadsafe的类。
6. static typing打死不提供。虽然也能理解难度,但是现在也有像julia那样都支持
的,python再不想想办法,只能一天到晚在data analyst那边混饭吃了。

总体来说是个半道出家的人的玩具。但是小公司和Self sustain的小组里面开发操快猛,招人容易又便宜,就像excel占据现代公司行业大半江山一样。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 1. self,脑子进水了,每个成员函数都需要有个 self 参数,典型的补丁语法
: 2. __ 表示私有成员,搞得满屏的屎条。定义一下 private/public 的关键字,然后
: IDE显示不同颜色不就行了吗
: 3. __init__,类构造函数,这种语法真是奇葩
: 4. 整个继承机制补丁套补丁,真没法用,实际上几乎没人用,只有搞得人在那里自娱
: 自乐
: 欢迎补充

f
fantasist

4. 有interface (abc),虽然也是补丁
5. GIL没办法
6. 有pyre之类的静态分析工具,我们的新代码都强制要兼容这个。语言层面的static type不太可能实现,几乎等于推倒重写一门语言

s
staftermath

4. 我说的是对应Java的Interface的那种。确实有一些近似的解决方案,不过据我所知(测试)都有各自的不足。或者像你说的,纯粹补丁。
5. 是啊。
6. 是的没救了。

【 在 fantasist (一) 的大作中提到: 】
: 4. 有interface (abc),虽然也是补丁
: 5. GIL没办法
: 6. 有pyre之类的静态分析工具,我们的新代码都强制要兼容这个。语言层面的
static
: type不太可能实现,几乎等于推倒重写一门语言

s
staftermath

哈哈著名的django写instagram的例子。

【 在 fantasist (一) 的大作中提到: 】
: 突然想起来,我看过instagram前端代码,就是python3,用asyncio那一套+OOD。至少
: 有大几百人每天在那个repo里干活。
: 设计好不好是见仁见智,说不能团队协作、写严肃项目的就有点荒唐了。

s
smc2020

为啥老要黑excel?

这个东西绝对比你想象的要牛的多。。。

【 在 staftermath (彦清风) 的大作中提到: 】
: 1. 不想要打个staticmethod就行了。写起来问题不大。当然同意是补丁语法。
: 2. 是个问题。不过遵守规矩的话问题不大。不定义private/public是语言特征。好不
: 好是另外一回事情。我个人偏向同意你的意见。
: 3. 具体说说怎么奇葩了?撇去无法overload的问题,单独存在一个method来构造并不
: 一定比强行需要一个和类同名的来当构造函数更奇葩吧?
: 4. 继承非常差。没有interface。抽象方法没有统一语法标准。
: 补充
: 5. 2021年了并行和协程都还没有好好的整。感觉开发者并没有想让python好好支持多
: 线程开发。绝大多数内置类和扩展类(collections里面)都不是threadsafe或不提供对
: 应的threadsafe的类。
: ...................

c
chebyshev

excel还算好。我都怀疑没有念过phd的马工。是否需要20年工龄才能理解matlab厉害的地方。
【 在 smc2020 (人生若只如初见) 的大作中提到: 】
: 为啥老要黑excel?
: 这个东西绝对比你想象的要牛的多。。。

s
sanwadie

4. 看了一眼abc就放弃了,写出的代码失去了短平快的目的
5. 用了coro,对我来说够了。有些别的问题,和IDE相关
6. 谢谢,有空看一下 pyre

【 在 fantasist (一) 的大作中提到: 】
: 4. 有interface (abc),虽然也是补丁
: 5. GIL没办法
: 6. 有pyre之类的静态分析工具,我们的新代码都强制要兼容这个。语言层面的
static
: type不太可能实现,几乎等于推倒重写一门语言

s
sanwadie

感谢大家的各种意见,从中学了很多

这个项目在我这里接近收尾。这是我个人第一个比较大的python项目,所以用到的言语feature比以前多了很多,我都是现学现用:

1)通过 OO 组织代码
2)使用了 coro
3)使用了大量回调
4)使用了很多python提供的不同数据结构

我使用 vscode+ python extension+sonar lite,有自动完成,和sonar提供的语法检查

分享我遇到的一些主要问题,这些问题或许是我不熟悉python或IDE设置有问题,请大
家不吝赐教。

1)IDE很不给力,花了很长时间,还是没有完全满意,
1.1)类型检查基本没有
1.2)OO方面的支持基本为0
1.3)无法区分回调传递和正常赋值,经常造成困扰
1.4)sonar 的语法检查不给力,以前在java里能够发现的问题,在python里只有通过
调试才能发现
1.5)一些源代码常用工具,比如refactor 变量名,提取常量等,都没有。也许是我用的工具不给力
2)OO 方面非常混乱,严格的语法定义比较少,都是通过各种补丁,最后基本放弃。
3)用了coro,主要的问题是,在改写函数时,完全没有IDE支持,需要自己找出全部调用点修改。其他还好,没有碰到奇怪的问题。我以前用共dart/flutter里的async机制
,所以这次没有太多问题。
4)python里各种约定,书写习惯多如牛毛,这些都需要程序员自觉遵守,
4.1)这些约定习惯也需要大量时间学习,但又往往被忽略
4.2)在大项目里,你无法保证每个人都了解这些,会造成很多混乱

我还是这个结论,在不得不用的地方,我会用,做胶水语言,也很不错。做后端项目,我有其他更好的选择,比如 go和java。

c
chebyshev

IDE可以试下pycharm。后端我也是能用go就用go。
python要学会用好,估计要花很长时间熟悉各种work around。时间投入不划算。
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 感谢大家的各种意见,从中学了很多
: 这个项目在我这里接近收尾。这是我个人第一个比较大的python项目,所以用到的言语
: feature比以前多了很多,我都是现学现用:
: 1)通过 OO 组织代码
: 2)使用了 coro
: 3)使用了大量回调
: 4)使用了很多python提供的不同数据结构
: 我使用 vscode+ python extension+sonar lite,有自动完成,和sonar提供的语法
检查
: 分享我遇到的一些主要问题,这些问题或许是我不熟悉python或IDE设置有问题,请大
: 家不吝赐教。
: ...................

a
az2008

不是我说你,写python的没看过pep8,相当于脑门子上“我是小白”四个大字,写出来的code肯定是一大坨别人看不懂的屎。Python被人称道的可读性很大程度上是通过大家都遵守pep8做到的。

【 在 sanwadie (三娃爹) 的大作中提到: 】
: 这个文档不看还好,一看更恶心。这个只能用奇淫技巧来形容了。感觉就像国内的传武
: 门派,在那里自嗨,顶个软用
: 我之前一直记得 _ 是 non-public,前几天发现有人调用我定义的内部函数。放狗搜了
: 一下,建议用__,所以给了我这个错觉。
: 问题来了,我英语太烂,实在无法理解 python 所谓的 non-public是个毛意思
: 如果代码规则只依赖开发人员知道并正确使用,就像一个社会期望人人按法律行事,而
: 没有警察这种暴力机构。
: 仅止于此,以后严肃项目,不会再踩python的坑。最多拿来管管aws/aliyun
: 附上一段测试代码。
: a.py:
: ...................

c
chebyshev

半导体公司从python 2开始很多芯片的application notes就是python了。
没人completely遵循pep。所以确实很多芯片说明书跟屎一样。
【 在 az2008 (举步维艰,是该消瘦一下了) 的大作中提到: 】
: 不是我说你,写python的没看过pep8,相当于脑门子上“我是小白”四个大字,写出来
: 的code肯定是一大坨别人看不懂的屎。Python被人称道的可读性很大程度上是通过大家
: 都遵守pep8做到的。

n
nkw

没装pylance?
s
sanwadie

谢谢提醒,下回我给vscode装个做代码格式检查。phew,可以伪装成非python小白了

【 在 az2008 (举步维艰,是该消瘦一下了) 的大作中提到: 】
: 不是我说你,写python的没看过pep8,相当于脑门子上“我是小白”四个大字,写出来
: 的code肯定是一大坨别人看不懂的屎。Python被人称道的可读性很大程度上是通过大家
: 都遵守pep8做到的。

s
staftermath

感觉是不是看错了?
我说的是Excel市场广,没有黑它的意思。

【 在 smc2020 (人生若只如初见) 的大作中提到: 】
: 为啥老要黑excel?
: 这个东西绝对比你想象的要牛的多。。。

o
omgpop

作为一个资深程序员,尤其还有了pycharm什么的帮忙,基本不会出现语法错误的,可
怕的错误就是用错类型啊,那个pylint啥的也没辙。基本上稍微仔细一点的人,写完一段程序,不大会有一跑就停掉的。

【 在 fantasist (一) 的大作中提到: 】
: 现在ide有各种type check工具了,虽然肯定不如静态类型语言,变量名拼错之类的小
: 错误还是可以查出来的

s
sanwadie

回来谢谢兄弟。装了pylance,在pylint里激活了python codestyle/pep8,所有参数和变量加了hint,排除了所有代码报警。忙了一天多,现在的代码舒服多了。

剩余的两个问题:
1,vscode有没有插件便于代码refactor。我这次都是手工改的
2,vscode异步io代码的静态检查有好办法吗。差个await,nm要调试半天

【 在 nkw (非死非活) 的大作中提到: 】
: 没装pylance?

l
littlebirds

运行是类型不对会报错吗?
【 在 fantasist (一) 的大作中提到: 】
: x: int = None
: 类型是动态的,这只是加个tag,没有强制约束

s
sanwadie

只在ide报警高亮

【 在 littlebirds (dreamer) 的大作中提到: 】
: 运行是类型不对会报错吗?

l
littlebirds

有性能优化吗? 还是纯粹就是注释?
【 在 sanwadie (三娃爹) 的大作中提到: 】
: 只在ide报警高亮

s
silverhawk

公孙大神列举几个高质量的python 库?
【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 做过正经项目的就知道,很多设计模式比如Java的为啥又长又臭,本质上是因为语言表
: 现力不够。像反射模式,恶心得不行的各种动态生成,就是因为Java自己没有那个表现
: 力。在Python里很少听到反射的设计,因为那是脱裤子放屁,它自己直接动态就搞定了
: 当然Python这样的是双刃剑,给新手就是两个极端,一是很好上手,二是一上手就飘了
: 直接写出屎一样的垃圾代码。只能说这些人没接触过高质量的Python库,不知道正确的
: 写法是啥。我推荐这样的人去学Java,八股文虽然很啰嗦但是出不了大错,适合学习能
: 力和悟性不强的人

s
silverhawk

JVM 系还有一个大强项就是Spark这系列的数据batch和stream处理,当然Pyspark也不错
【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 他的问题在于根本不了解业界是个什么情况,这几年错过了金矿都不自知
: Go的优势在container native,就是Kubernetes那一套,目前还没有别的可以替代
: Java全家桶在Kubernetes冲击下已经全面溃败,还有的优势在一些中间件但一直都在被
: 替换中(包括被自家的Kotlin + JVM爆菊)
: Robinhood做的高频交易系统就是用modern Python写的流处理,能力超强。虽然中间件
: 目前还离不了JVM系的Kafka,但也已经被搞成语言无关了,有别的实现那分分钟可以替换
: Java肉眼可见的趋势是退化成固守中间件,接下来被边缘化。Java和K8s生态根本不配
: ,一个是几十年前的抽象,另一个是这几年的抽象
: legacy Python在很多领域早就是dominate,而modern Python在asyncio + K8s生态下
: 更是飞速攻城掠地。Python多线程不行是客观事实,但是现在单线程异步性能已经和Go
: ...................

s
silverhawk

很奇怪为啥container世界不用JSON用YAML,就是闲JSON繁琐吗?
【 在 danielfeng (公孙欠扁) 的大作中提到: 】
: 忘记了完整支持YAML specs的parser存不存在,存在的话可能一只手都数得过来,还有
: 大量的parser实现是错的。就这么一个坑货,在container界也是横着走的货
: YAML