Python学习笔记(初识Python)

Python学习笔记(初识Python)

刚学Python不久,因为自己的工作主要是使用.NET,所以很多思考的东西都会和C#相关。特别是在理解上,总爱和C#比较进行看看有什么区别


Array 和Tuple
Tuple在Python中定义成不可变的List,我的直觉理解就是一个Array(但这个很奇怪,Python中有一个标准模块就是Array,暂时没用过,以后再具体分析吧)。
对于Tuple来说初始化的方式很奇怪
userid=1,2,3,4,5
或者
userid=(1,2,3,4,5)
两者得到的结果是一样的。想这种userid=1,2,3,4,5 C#是肯定通不过的,而这种做法反而像C#的int a,b,c,d,但这表示的定义多个int的数据类型。

没有了开始和结尾的“{}”
C#的函数,类的定义...等都会出现这个符号。Python改为以缩进和冒号的方式来代替代码块。写多了Python你会发现这确实是个很美的事情。因为C#编写时本身代码规范就强调要缩进。现在把{}都去掉了,少敲了不少键盘啦。

函数默认参数
发现这个也是很折腾人的东西。因为和C#的确有不少的区别
1:Python的函数可以定义默认值,这个感觉像MSSQL的存储过程
2:Python的函数还可以使用关键字参数
def Get(name,id,age)
    pass
Get(name='333',id=1,age=444)
引用《简明Python》中的说法
“这样做有两个 优势 ——一,由于我们不必担心参数的顺序,使用函数变得更加简单了。二、假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。”,这一点,的确比C#方便不少。


函数的可变参数
Python:
def fprintf(*args):
    for i in args:
        print i
fprintf(1,2,3,4,"ssss")
在C#中会这样定义
public static void UseVariableParameters(params int[] list) { for ( int i = 0 ; i < list.Length ; i++ ) { Console.WriteLine(list); } Console.WriteLine(); }
如果单纯从这上面看没什么优势,但Python 同时支持List、Tuple、Dictionary 作为参数一次传入。 List、Tuple的参数是以 *arg传入的。Dictinary是以**arg传入的。
args = [3, 6]
range(*args)
def parrot(voltage, state='a stiff', action='voom'):
d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
parrot(**d)
这个只能说Python的语法太灵活啦


For IN 形式的循环
这个也很有意思,我发现在Python中已经没有了以前学习的语言中的for(int i;i<cout;i++)这种形式了。使用了For i in range(10) 这种方式,的确是个进步。而且C#也通过Linq的方式模拟了这个实现

过滤类别语法
很Cool
[mapping-expression for element in source-list if filter-expression]
>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
>>> [elem for elem in li if len(elem) > 1]
C#的Linq现在也可以实现这个功能,但还是Python比较Cool ,和简单


and 和 or 的特殊性质
Python中and 和or 左右返回的不是bool而是相应的结果。
and 如果为假返回and左边的值,如果为真返回右边的值
or 返回第一个为真的值,如果都是假返回最后一个值
但这样确有一个C#没有的好相关,相当于一个二元操作符了。
在C#中经常这样写三元操作符和
string name;
name = String.ISNullOrEmpry(name)?String.Empty: "username is:" + name
而如果C#也支持Python的这种概念的话就可以简单写出
name = name and "username is :" + name
很希望C#能支持类似的语法


list对象的分片 (slice) 和 Copy
具体不多说,只是觉得比C#的list用起来方法,特别是希望.NET  以后可以支持这个语法
shoplist[:5] 返回序列的一段返回内的值
shoplist[:]返回整个序列的Copy

贵在坚持。
我记得C#也可以用For...in吧……
C#是foreach,和Python类似的功能。目前我的感觉,如果没有Linq的新方式。foreach是没有Python简洁的。
简明教程确实不错
恩,写的不错