Python函数语法糖 python中的语法糖( 二 )


python print('=' * 30)是啥意思?题主你好,
其实这里面Python函数语法糖的 "*"号可以用数学里面的" 乘号 "去理解, " 乘号 "表示倍数嘛,所以
'=' * 30 表示30个'='.
这其实也算是python里的语法糖吧,要不你想要输出30个'=', 要一个个的敲多麻烦,如果代码中用到1,2个需要输出多个相同字符的,你一个个的敲还好, 如果有几十个,甚至上百个,那么使用:
"字符串" * 重复次数
这种写法就要省好多事儿Python函数语法糖了
举例来说,
如果代码里就让你输出20个a和20个b,则你手敲还可以接受:
print('aaaaaaaaaaaaaaaaaaaa')
print('bbbbbbbbbbbbbbbbbbbb')
但如果你的代码里有几十个要输出的重复字符串, 而且重复的个数还不同,那么:
print('a' * 20)
print('b' * 20)
这种写法就要省太多事Python函数语法糖了,而且还有一个问题,就是如果重复的多了,你还要一个个的数,很多时候会出现多数一个或少数一个的情况.
写在最后: 上面可能只是出现'字符串' * 重复次数这种写法的其中一个动机, 但明白了这种情况, 应该至少也就明白了它的用法了, 而且以后编码的时候,再遇到这种需要重复输出多个相同字符串的场景,会直接联想到使用 "倍数" 这种写法, 而不是一个个的字符去敲了.
希望可以帮到题主, 欢迎追问
“Python”有什么缺点?python的整个系统 , 我其实有非常多的不满 。但是用任何一门语言都是取舍问题,如果有一门语言,库够多 , 已读,易用,性能高,我毫不犹豫立刻转过去 。python的强处在于庞大的库 , 还有非常好的易读和易用性 。但是相比来说,性能一直是个问题 。python的实现性能大约和C相差五倍上下 。如果是大规模计算问题,大约能差10倍以上 。当然,我们可以写C扩展,但是这就不是使用python了 。我们也可以说,很多时候我们不需要这么快的速度 。这是个事实,但是不改变python性能差的事实 。python不但性能差,还有GIL这个玩意 。以至于我现在对高并发计算都采取多进程的模式 。多进程模式的通讯效率肯定比多线程低,而且麻烦 。
另外,python在底层设计上,也表现出很强的实用主义倾向 。这是比较外交术语的词汇 , 更加直白的说法应当是,混乱,不知所谓 。在闭包设计上采用free variable设计,而不是lisp中的environs设计 。区别?你试试看在外层闭包中from lib import * 。由于引入不定个数名称,free variable无法处理 。类似的问题还有LEGB规则 , 新手往往要花很长时间研究这个例子究竟是怎么错的: a = 1 def f(): print a a = 2 我勒个去 , 这种反直观反人类的事情都有 , 还敢说自己易读 。
还有坑爹的元编程,这东西根本是坑爹中的坑爹货 。如果你用过多重继承,大概就知道python的整个OO系统看起来根本是大型的仿真 , 到处都是乱糟糟的 。C++怎么解决多重继承的?你最好别用(真心说 , 这可比python更加坑爹) 。java怎么解决多重继承的 , 只能继承Interface 。其实这是变相的变成了Interface-Implement模式 。python怎么解决的?MRO!为什麽一个类加个__metaclass__就会改变性质啊 , 为什麽一个类去生成另一个类的写法是——我基本不记得了 , 反正web.py里面有用到,需要的话去炒栗子吧 。为什麽方法要隐藏居然要改名字加__啊 。你到底是在做OO还是在看起来像OO的东西上狂打补丁啊魂淡 。
lambda表达式弱智 。我和人讨论过,lambda是否是图灵完备的 。结论还是完备的 , 不过需要借助Y combinator 。何必呢?由于强调lambda的快速特性,因此将lambda强制在一行以内(没有结束标记) , 导致python其实是没有匿名函数的 。一个callback数组写的难过死 。

推荐阅读