python 速成指南

上传人:碎****木 文档编号:220862345 上传时间:2021-12-09 格式:DOCX 页数:10 大小:26.42KB
返回 下载 相关 举报
python 速成指南_第1页
第1页 / 共10页
python 速成指南_第2页
第2页 / 共10页
python 速成指南_第3页
第3页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《python 速成指南》由会员分享,可在线阅读,更多相关《python 速成指南(10页珍藏版)》请在金锄头文库上搜索。

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

2、型系统比如 int,string 等,type() 可以返回数据的类型,如: type(1) type(123)python 尽管在声明变量的时候不指定类型,但变量其实是有类型的,用 c+0x 的概念来表达的话,实际上 python 的变量好像都是 auto 的,类型自动根据赋值推导出来。所以这样:name = ddh verb = is noun = good mansentence = name + verb + noun没有问题,但:name = cyberscorpio age = 32sentence = name + age就会引发异常,因为字符串和数字不能直接相加。可以通过 in

3、t() 或者 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 lstfor x in lst:print x, type is , type(x)注意 l

4、ist 内的数据可以是不同类型的,这一点会很方便。上面的输出是: print lst123, 456, 1000 # 注意这里是 list 的字面表示方法,如 lst = 123, 456, 1000,lst 自动成为一个 list for x in lst:.print x, type is , type(x).123type is456type is1000type is # 这个是整型的数据dict类似于 std:map 的概念,当然,和 list 类似,dict 的 key 和 value 不要求是同一种类型。如:dct = dict()dctname = cyberscorpio d

5、ctage = 32dctsex = male print dctfor k in dct:print k, is , dctk输出为: print dctage: 32, name: cyberscorpio, sex: male # 注意这里是 dict 的字面表示方法,如 dct = age:32, name:cyberscorpio, sex:male,则 dct 自动成为一个 dict for k in dct:.print k, is , dctk.age is 32name is cyberscorpio sex is male判断一个 key 是否在 dict 中:dct =

6、name : ddh, age : 32, if name in dct:print the dict has a name and we will delete it. del dctname可以使用 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,ge

7、tattribute,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() 什么的,都是

8、 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, iter

9、values, keys, pop, popitem, setdefault, update, valueshas_key(),keys(),values() 等都是 dict 常用的方法。用 dir(123) 则可以看到 string 支持的所有方法,总之还是比较方便的。循环简单的 for 循环,如:fox x in 容器:对 x 做操作这是对容器进行枚举的很方便的做法。其他的循环方式还有 while,如: while :循环体注意在循环中我们仍然有 break, continue 等跳出或者继续循环的指令,和 C/C+ 是一致的。函数函数定义:def 函数名 (参数列表):函数内容值得注意

10、的是,函数中变量默认是 local 的,如果要访问全局变量,那么需要在函数中声明其为 global 的,如:bar = 0 def foo ():global bar bar = bar + 1print str(bar)参数列表这里面颇有玄机,python 具备和 C+ 相同的两种参数列表结构,就是 (var1, var2) 和 (var1, var2=default value) 这两种,但除此之外呢,和 C/C+ 的 类似,python 还有两种针对不定参数个数的独门武功,举例说明:def foo (*params):if len(params) = 0:print no paramet

11、er # 如果调用方式为 foo() 则进入这里elseprint params # 如果调用方式为 foo(1, 2, 3, 4) ,则这里输出为 (1, 2, 3, 4) ,params 是一个 tupledef bar (*params):if len(params) = 0:print no parameter # bar()elseprint params # bar(name=ddh, age=32) , 则这里输出为name : ddh, age : 32 ,params 是一个 dict。对于 * 这种方式,调用函数的时候,必须指定参数的名称和值,名称不需要带引号,但进入函数以

12、后,自然成为同名的字符串,如上可见。Python 所有的变量(不仅仅是传参)都是基于引用的,但是 python 的对象分为两种,一种叫 immutable,还有一种叫 mutable,区别在哪里呢?后者具有方法来改变自己,比如list.append() 等,而 str 就是 immutable 的,也即,所有的 str 方法都不能改变自己(比如 str.replace() 是返回一个被替换过的 str,原来的 str 不变)。这样的话,我们这么来看:def foo (s):s = 456name = 123 foo(name)首先,name 本身不是对象,它是对一个 str 且内容为 123

13、的 str 对象的引用。其次,在foo 函数中, s 是对同一个对象的,引用,而不是对 name 的引用。那么可以断定:1. 对 s 的改变无法影响到 name,因为 name 并未被引用进来。2. s= 456只是把 s 换成了对另一个内容为 456 的 str 对象的引用,无法改变之前那个 123 的 str 对象。3. 因为 str 不提供改变自己的方法,所以, foo 函数无法改变 name 所指向的对象的值。这么来看的话,immutable 对象创建出来之后就不能变了,比如:s = 123s = 456这里第一句,s 指向一个内容为 123 的 str 对象,第二句,s 指向一个内容为 456 的 str 对象。第一句中的对象,没有被任何人引用了,之后会被 “废料收集” 程序废掉,但我们不能改变它的内容。另:参见附录一 对 python 中引用问题的再思考。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号