Python_Share_Mol_002

Python_Share_Mol_002

@(我的分享)[python]

按照惯例,扯闲篇

我就不知道你们咋想的,真是闲得蛋疼,来看我分享的文章。
讲真,到现在为止,我都不知道我可以分享什么干货出来,只能停留在扯蛋的境界。

扯完了就进入正题了

python是一门面向对象的脚本语言。我更愿意对比的方式来分享这门新语言。
最开始,我想用js或shell这些脚本语言来对比。但是看了一些python以后,发现这三种语言不能类比。比如js是纯脚本语言,而且还有点嵌入式的意思(尽管只是嵌入到html中)。而shell和操作系统结合得又太紧密。所以,最后还是选择C#来做为类比语言。

最大的原因,就是这两种语言都是面向对象的。

我觉得我不用再去分享什么是面向对象了,这样显得我太low了。我尽量把两种语言不太一样的地方都分享出来,当然,我不想分享太基础的。比如 print这种基础函数的用法。

坑1:

不得不说,C#的语法实在是太优雅了,最明显的地方,就是大括号的用法。我们可以很方便地把一个代码块放到一对大括号中。比如像这样:

if(李老板发财了)
{
	label1:李老板就请大家吃饭;
	李老板要买个空调;
}
else
{
	goto labe11;
}

但在python里面,没有这样优雅的写法。python里面的代码块使用缩进来表示,它看起来像是这样:

if 李老板发财了:
	李老板要请大家吃饭
	李老板要买个空调
else:
	李老板要请大家吃饭
	李老板要买个空调

这样的写法一定会让很多C#出身的程序员头疼的。因为你一不小心就可能把代码块写错了。(上面的代码还告诉我们,python 没有goto这样反人类的语句,)
如果你非要把两句代码写在一行,那么两句代码中用“;”分隔。

坑2:

python中的变量是 没有 类型的。不信?你看:

molAge=33
print(molAge)
molAge="hello world"
print(molAge)

定义molAge这个变量的时候,前面没有任何类型修饰。在js中,好赖还有个var告诉我们,这是个变量,而在python中,毛都木有。
这还不是最奇葩的。
正如上面例子中你所看到的,molAge初始化是整型的,而第二次赋值的时候,它就变成字符串了,就像去了趟泰国一样。
当然,我不建议你们给变量赋不同类型的值,因为这里面会引发“值传递”和“引用传递”的坑。

亮点1:

你们肯定要吐嘈了,人家明明是语言特性,非要把这些特性说成是坑。
没错,确实是语言特性,但是对于你们来说,这些地方是需要注意的。因为C#的固有思路和写法,会让你不自觉地掉进这些坑里面。
总说人家有坑也不太好,下面的这个特性,体现了python写法简单,功能强大!
背景:
我们有一个字符串数组:
strArr=["python","入门","很","简单","为啥","大家","不","跟风","?"]
目标:
获取字符串数组中,从第2个元素到第5个元素的所有元素

// C#写法
var strArr =new string[] { "python", "入门", "很", "简单", "为啥", "大家", "不", "跟风", "?" };
StringBuilder container = new StringBuilder();
for (int i = 2; i < 6; i++)
{
    container.Append(strArr[i]);
}
Console.WriteLine(container.ToString());
strArr
# python 
strArr =[new string["python", "入门", "很", "简单", "为啥", "大家", "不", "跟风", "?" ]
print(strArr[2:6])

可以看到,python的写法非常简单,而且这是标准的python语法。

C#出身的程序员的坏习惯

我想,大部分C#出身的程序员,一定习惯于使用try...catch(exception e)来捕获并处理异常吧。这其实是一个非常不好的习惯。
我们在捕获异常的时候,一定要清楚我们捕获的是什么异常。比如是李老板找对象时出现404的异常?还是李老板指针为空的异常。
python里提供了很多类型的异常供我们使用。
如果你还接触了其它语言(非微软系语言,如java...),这些语言也都是需要捕获一个特定的异常,而不是捕获exception基类异常。

总结

我大概把python的语法看了一遍,加上自己搭建环境和敲代码验证,大概是一整天的时间。总体来说,python语法不难。

posted @ 2017-09-05 09:29  飞荷扬菊  阅读(314)  评论(0)    收藏  举报