python速成指南-过程式python

发布时间:2020-09-20编辑:脚本学堂
第一节,过程式python,这里介绍python的类型系统,字典,循环结构,函数等。

python 的一个特点是不通过大括号 {} 来划定代码块,而是通过缩进。
如果和 C/C++ 类比的话,就是在左括号的地方不要换行,然后用一个冒号 (:) 替代, C/C++ 大括号内部的东西,缩进一个 tab 或者几个空格都可以(但需要保持一致),比如:
if (x < 2):
print 'x < 2'
elif (x > 2):
print 'x > 2'
else:
print 'bingo!'
print 'x = 2'
注意两点:一是 python 语句结尾处没有分号(;)作为结束标记。二是和 C/C++ 不同,没有 else if,而是用 elif 替代,相当于可以少打几个字符吧。

类型系统
比如 int,string 等,type() 可以返回数据的类型,如:
>>> type(1)
<type 'int'>
>>> type('123')
<type 'str'>

python 尽管在声明变量的时候不指定类型,但变量其实是有类型的,用 c++0x 的概念来表达的话,实际上 python 的变量好像都是 auto 的,类型自动根据赋值推导出来。所以这样:
name = 'ddh'
verb = ' is '
noun = ' good man'
sentence = name + verb + noun
没有问题,但:
name = 'cyberscorpio'
age = 32
sentence = name + age
就会引发异常,因为字符串和数字不能直接相加。

可以通过 int() 或者 str() 强转类型,如上一句改成: sentence = name + str(age) 就不会有问题了。

容器类型
python 提供好用的两个容器:list 和 dict。插句题外话,其实最好用的容器还是 PHP 提供的关联数组,一个数组就包括了 python 中 list 和 dict 的全部功能,实在是很赞。
list
类似 array 的概念,例如:
lst = list()
lst.append('123')
lst.append('456')
lst.append(1000)
print lst
for x in lst:
    print x, ' type is ', type(x)
注意 list 内的数据可以是不同类型的,这一点会很方便。上面的输出是:
>>> print lst
['123', '456', 1000]  # 注意这里是 list 的字面表示方法,如 lst = ['123', '456', 1000],lst 自动成为一个 list
>>> for x in lst:
...     print x, ' type is ', type(x)
...
123  type is  <type 'str'>
456  type is  <type 'str'>
1000  type is  <type 'int'>  # 这个是整型的数据

dict
类似于 std::map 的概念,当然,和 list 类似,dict 的 key 和 value 不要求是同一种类型。如:
dct = dict()
dct['name'] = 'cyberscorpio'
dct['age'] = 32
dct['sex'] = 'male'
print dct
for k in dct:
print k, ' is ', dct[k]
输出为:
>>> print dct
{'age': 32, 'name': 'cyberscorpio', 'sex': 'male'}  # 注意这里是 dict 的字面表示方法,如 dct = {'age':32, 'name':'cyberscorpio', 'sex':'male'},则 dct 自动成为一个 dict
>>> for k in dct:
...     print k, ' is ', dct[k]
...
age  is  32
name  is  cyberscorpio
sex  is  male

判断一个 key 是否在 dict 中:
dct = {'name' : 'ddh', 'age' : 32, }
if 'name' in dct:
print 'the dict has a name and we will delete it...'
del dct['name']

可以使用 del 删除这个 key。另外 if key not in dict 可以判断这个 key 是否 “不在” dict 中。

list 和 dict 均为某种对象,它们支持的方法 (method) 可以通过语言内置的 dir() 来获取,比如:
>>> dir(lst)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
比如 append(),insert(),sort() 什么的,都是 list 很常用的方法。而:
>>> dir(dct)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
has_key(),keys(),values() 等都是 dict 常用的方法。
用 dir('123') 则可以看到 string 支持的所有方法,总之还是比较方便的。

循环
简单的 for 循环,如:
fox x in 容器:
对 x 做操作
这是对容器进行枚举的很方便的做法。

其他的循环方式还有 while,如:
while <测试>:
循环体
注意在循环中我们仍然有 break, continue 等跳出或者继续循环的指令,和 C/C++ 是一致的。