没有类型检查还是挺坑的

roy
天上掉大饼:学思行言 05月06日 字数 189

给学生上课,遇到了很多奇葩的写法

比如这个:

if x == 1 or 2:

还有这个

if x.phone.startswith("139" or "138" or "137")

再有

if x.id = '12345': # 其实type(x.id)是int

如果有类型检查,能减少很多这种错误

Python Python的自由天空
25 个回复
sah166
撒轰 05月06日

因噎废食

【 在 roy 的大作中提到: 】

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: ...................

here080
hero080 05月07日

python最大的好处是既简单又强大。

python最大的坏处也是既简单又强大。

【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】

: 标  题: 没有类型检查还是挺坑的

: 发信站: 水木社区 (Wed May  6 20:37:52 2020), 转信

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: 还有这个

: if x.phone.startswith("139" or "138" or "137")

: 再有

: if x.id = '12345': # 其实type(x.id)是int

: 如果有类型检查,能减少很多这种错误

: --

here080
hero080 05月07日

你说的前两个问题,是用自然语言来想象程序语言,没有理解“运算符”和“求值顺序”这些概念。

你说的最后一个问题,其实是python设计里的正确用法。

python里的赋值本质上是指针赋值(或者叫引用重绑定),并不改变对象本身。

老的x.id是什么type跟新的x.id是什么type是不相关的。

【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】

: 标  题: 没有类型检查还是挺坑的

: 发信站: 水木社区 (Wed May  6 20:37:52 2020), 转信

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: 还有这个

: if x.phone.startswith("139" or "138" or "137")

: 再有

: if x.id = '12345': # 其实type(x.id)是int

: 如果有类型检查,能减少很多这种错误

: --

blowg
吹哥 05月07日

学软件的会自然觉得这两个写法不对吧 ...

【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: ...................

freesand
freesand 05月07日

有类型检查啊,用mypy就好,自由天空提供自由选择……

jimmycmh
Jimmy 05月07日

最后一个是比较,不是赋值

【 在 here080 (hero080) 的大作中提到: 】

: 你说的前两个问题,是用自然语言来想象程序语言,没有理解“运算符”和“求值顺序”这些概念。

: 你说的最后一个问题,其实是python设计里的正确用法。

: python里的赋值本质上是指针赋值(或者叫引用重绑定),并不改变对象本身。

: ...................

world
You are my world 05月07日

看起来入门还是学java比较好。

【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: ...................

MetalSlugX
冰天雪地敲冰块,春光灿烂挖臭虫 05月07日

其实,我到希望python里面有可以这样做的语法,才不枉它的宣传语

【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】

: 标  题: 没有类型检查还是挺坑的

: 发信站: 水木社区 (Wed May  6 20:37:52 2020), 转信

: if x.phone.startswith("139" or "138" or "137")

flw
帅五进九 05月07日

Perl6 里倒是有,不过已经死掉了。

过于讨好程序员,没啥意思。

还是要有些基本的门槛。

【 在 MetalSlugX (冰天雪地敲冰块,春光灿烂挖臭虫) 的大作中提到: 】

: 其实,我到希望python里面有可以这样做的语法,才不枉它的宣传语

MetalSlugX
冰天雪地敲冰块,春光灿烂挖臭虫 05月07日

我不是程序员

我还是喜欢语法糖的

【 在 flw (帅五进九) 的大作中提到: 】

: Perl6 里倒是有,不过已经死掉了。

: 过于讨好程序员,没啥意思。

: 还是要有些基本的门槛。

: ...................

javaboy
喝了咖啡就话多-_-; 05月07日

startswith可以接受tuple。

if s.startswith(('a','b','c')): ...

【 在 MetalSlugX (冰天雪地敲冰块,春光灿烂挖臭虫) 的大作中提到: 】

: 其实,我到希望python里面有可以这样做的语法,才不枉它的宣传语

flw
帅五进九 05月07日

那我更正一下,过于讨好用户,这下可以了吧。

听话要听音,抓住关键字。

【 在 MetalSlugX (冰天雪地敲冰块,春光灿烂挖臭虫) 的大作中提到: 】

: 我不是程序员

: 我还是喜欢语法糖的

javame
yimin 05月07日

正确的怎么写?

【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: ...................

MetalSlugX
冰天雪地敲冰块,春光灿烂挖臭虫 05月07日

哦?之前还不知道

谢谢

查了一下,居然2.5就支持了

【 在 javaboy (喝了咖啡就话多-_-;) 的大作中提到: 】

: startswith可以接受tuple。

: if s.startswith(('a','b','c')): ...

ilovecpp
cpp 05月07日

这语法看着倒挺自然的。我们可以想象它是以下的简写:

if any((x==i for i in [1, 2]))

if any((x.phone.startswith(i) for i in ["139", "138", "137"]))

这想法值得探索一下。

【 在 roy 的大作中提到: 】

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: ...................

ToSimplicity
致简 05月07日

前两个应该是,“如果了解运算符优先级,能减少很多这种错误”

最后一个,“如果有了解符号含义,能减少很多这种错误”

lvsoft
Lv(The Last Guardian) 05月07日

犯错的方法千万条,你堵上了这个级别的错误,人家也能在别的地方犯别的错误。

java类型检查ok了吧?培训班出来的人写的代码每次我都能看得一肚子火。

【 在 roy (天上掉大饼:学思行言) 的大作中提到: 】

: 给学生上课,遇到了很多奇葩的写法

: 比如这个:

: if x == 1 or 2:

: ...................

flw
帅五进九 05月07日

re

所有的语言都可以用来写烂代码。

【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】

: 犯错的方法千万条,你堵上了这个级别的错误,人家也能在别的地方犯别的错误。

: java类型检查ok了吧?培训班出来的人写的代码每次我都能看得一肚子火。