今天是传说中的XX节,所以现充啊、有妹啊什么的…… #必须烧了!
但是不管怎么说呢,过几天就得回学校去了w。
经过24天的超负荷运转,基本完成了Python的学习。
虽然很累,但是鶿觉得,这个寒假过的值!
至于Python,鶿直接上Python3了,说实话,Python3相对于Python2变化挺大的,但是不管如何,Python3是趋势,所以总有一天会普及~
Python 在鶿看来,以简洁,优雅,严谨,和高成产力著称(实际上动态语言就是为这个而生的。
简洁,主要表现在语法和功能上。
其实也就是Python内置了许多强大的函数和模块,而不要你像写C/C++那样需要自己动手:
a=’123′
b=’123′
c=’4′
a==b #True
a==c #False
说到优雅,其实就是语法更加符合人类的语言和思维:
x=’man’
y=’woman’
x is ‘man’ #True
x is not ‘woman’ #True
y is ‘woman’ #True
至于严谨,Python严格使用缩进来控制流程,不需要分号,也不需要括号,其实这一定程度上也造成了Python的简洁:
def main():
a="x y z"
print('%'.join(a))
main() #x% %y% %z
至于高生产力,因为Python有强大的内置数据结构和类库,所以省力!
可以说Python的所有数据都是类,但是却不像那狗日的java一样,放个屁也得构造去一个类,然后在类里面构造一个方法出来。
也不需要将 主类的“XXX”名称 整的和 “XXX”.java 文件名一样。
Python是直译式的,所以甚至不像 C/C++ 有 main() 函数,所以我上面的例子才有 def main()这样的定义。
不喷了,看例子:
a=’abcdefg{0}’
a.format(“#dear#”) #’abcdefg#dear#’
a[2:6:2] #返回ce,即2~6字符分片,步长为2
然后,有人说Python里面是没有“数组的”。
什么叫没有数组,其实是有更强大的数据结构 —— 列表,元组等等。
L=[-17.5,’kilo’,49,’v’,[‘ram’,5,’echo’],7] #你在C/C++里面见过把整数和字符串混一起的数组嘛?
print(L.pop(0)) #返回-17.5
print(L) #返回[‘kilo’, 49, ‘v’, [‘ram’, 5, ‘echo’], 7]
其实列表就是一种强大的混合类型数组,我相信,只要你愿意,应该可以用 C语言 的 Struct 构造一个 List 出来。
所以,有这些NB的东西,还能不高生产力吗?
不多说,Python看起来简单,但是简单的只是Python的基础,说到Python高级编程,其实难度也是挺大的。
Python的类无构造函数,也不能 重载初始化函数__init__() ,因为Python有强大的字符串分析能力,所以这只是小case。
Python的类里面有一些特殊方法,诸如 __lt__(self,other):
class Point:
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def printx(self):
print(self.x,self.y)
def __lt__(self,other):
if self.x
实际上 __lt__(self,other) 就是对类的 < 号进行重载。看到这里,是否有似曾相识的感觉?
对!就是对 C++ 里面运算符重载的 Python 低难度实现!
然后,Python不像Java那样,Python和C++一样是支持多继承的,即一个儿子可以有几个老师!
我一直认为多继承才是完备的面向对象,才是对现实世界的真正模拟,所以Python基本具备了C++的大部分能力!
然后,什么成员函数修饰器不说,连类修饰器也有,还有就是,比如要你用Python标准库自己写个TCP Client和TCP Server进行交互也是比较吃力的,还有诸如等等……
然后呢,鶿想拿Python和么些语言进行对比一下,对,就拿他和JavaScript比吧。
有人觉得好笑,我拿Python和JavaScript比,我想做过JavaScript高级编程的程序员,还是会理解我的。
Python用它自己的理念实现了数据结构,面向对象,lambda……一系列完备功能。
虽然Python也能动态创建一个函数:
import math
code='''
def area_of_sphere(r):
return 4*math.pi*r**2
'''
context={}
context["math"]=math
exec(code,context)
area_of_sphere=context["area_of_sphere"]
area=area_of_sphere(5)
print(area)
#返回 314.1592653589793
Python还能:
list(map(lambda x:x**2,[1,2,3,4])) #返回[1, 4, 9, 16]
list(filter(lambda x:x>0,[1,-2,3,-4])) #返回[1, 3]
但是闭包和lambda还是没JavaScript那么原味(以下是JavaScript代码的函数字面量与闭包演示):
function funcObject(x,y,z){
alert(z(x,y));
}
function testfuncObject()
{
funcObject(3,4,function(x,y) {return x*y;});
}
testfuncObject(); #返回12
至于JavaScript的什么 “一次性对象” 啊,什么 “原型” 啊……(估计是从计算机诞生那天起也只有JavaScript特有的吧~
所以,在鶿所有的技能树中,鶿依旧认为JavaScript才是我所会的语言中最有创造性,最灵活,最松散的,是最接近Lisp的语言。
但是JavaScript由于特性太多,所以不像Python那么严谨,换句话说,就是JavaScript不好控制。
和 Python 的哲学 —— “用一种方法,最好是只有一种方法来做一件事” 相比。
JavaScript几乎无所不能,在JS里面,从没有百分之百的正确语法,也没有百分之百正确的结果!
好吧,不多扯了,以免引发口水战。
哦,说到技能树,如你所见,这是鶿两年半以来……:
这棵树已经完成了一些,但是并没有完全完成,如果不出意外,鶿在大学生涯还想再自学最后一门语言,大家猜猜,会是什么?
最后,放一个完整的Python3程序演示,这个小程序并不能完全体现Python的特性,但是起码可以体现Python的简洁与优雅吧:
将近一个月的消耗,鶿的魔法值也下降到了最低点,我要好好休息一阵子了。
I am often to blogging and i really appreciate your content.The article has really peaks my interest.I am going to bookmark your site and keep checking for new information.
太技术了(跪..
俺是看到代码就想屎星人www
一直不喜欢python2的utf8处理机制,还没了解3有没有这方面的变化.
@海晓 , 文件里面加一句:
#-*- coding: UTF-8 -*-
@海晓
@Mucid ,
不要再误导人了,Python3不用开头加UTF8标识,也没有Unicode字符串了。所有的字符都是原生Unicode.
python好东西~~~
@hit9 , 嗯^_^
我猜你的下一门语言不是ruby就是Haskell
@averainy , 明显是lisp啊~
学习学习了啊
真的强大呀,可是看不懂,
最后学lisp?
@freetstar , 了解~
@Mucid , 在 lisp 中文社区 等 乃
@nomaka , 鸭梨山大。。。
@Mucid , 咱 认识个 lisp 大神 以后 介绍给 乃, 哈!
@nomaka , 羞涩……都不好意思说自己想学lisp
@Mucid , 咱 Lisp 也不会的 说….
@nomaka , 所以Lisp是一种修行啊,修行!
你去哪了啊
@yetone , 喵呼~~
Mucid厉害~~怪不得这么少更新。我刚装了Ubuntu,以后多多指教啊~
@朵未 , 喵~~
@Mucid , 喵是啥意思啊?
对Python的缩进控制流程有极大的好感,这种迫使程序变得结构清晰易读的设定真是太棒了……
上C语言课的时候同学叫我帮忙改程序,第一件事就是把格式调整一下,缩进弄明白了……
@zodiacg , 仆的C++也是写得很整洁的说~~
@zodiacg , 那种乱七八糟的格式一定要用indent改掉……
围观技术帝,哥们你越来越强大了
@win8迷 , >_<
博客看起来很清爽啊,果然不是搞程序就是搞设计的人
@王会勇 , 是被程序搞的人
许久不见,你学会Python了。
@Tonebean , 好久不见~~
技术文,看不懂啊.