[学习笔记_读A Byte of Python]

软件和网站开发以及相关技术探讨
回复
头像
highwind
帖子: 1362
注册时间: 2008-09-05 23:31
系统: LinuxMint17

[学习笔记_读A Byte of Python]

#1

帖子 highwind » 2014-02-22 4:48

白纸一张,先养成好习惯:http://docs.python.org/dev/howto/doanddont.html

首先说明,以下说的都是一个菜鸟的体验,当然也欢迎老鸟指正啊。
Part0,起因:
以前遇到点问题都是到网上一通乱找,虽然用各种各样命令拼凑起来也能满足很多需求,但是总归感觉很零碎。尤其在这个帖子viewtopic.php?f=21&t=455544提问的时候,觉得非得再学点新的东西不可。
这不,python3正流行,赶紧动手吧,不然到时候python又升级啦。选什么教程好呢?新手就从老黑三的A Byte of Python(建议下载pdf看,代码字符比较完整)学起吧,国内也有翻译的,
还可以参看http://docs.python.org/3.3/tutorial/
Part1,编译器IDE:
虽然老黑三又盛赞了一番vim,可我可不想绕大圈子,再说这不是有PyCharm嘛,社区版免费,妥妥的,总归比配置一个vim要省事多了。
对于vim的补充:自从自己开始动手写了以后,再回忆之前听说过的vim的一些功能,觉得只有写程序时才能体现出vim的优势,比如在某一范围(对大多数程序来说就意味着某几行)做特定替换 --》 想想在某个函数内替换某个变量的名称。
Part2,阅读教程中。。。
注意点:
1.
  1. 代码: 全选

    ""

    代码: 全选

    ''
    作用完全一样哟,不过可以用来相互逃避转义,猜猜

    代码: 全选

    '"Isn\'t," she said.'
    返回的是什么?;
2.
  • 三引号不是

    代码: 全选

    "' #NOT 2+1
    而是

    代码: 全选

    ''' 或者 """
    可以用来包裹多行(而且里面随便用其他单或双引号),但是怎么再写一个三引号在里面呢,用

    代码: 全选

    \'''
    (还没查过,不知道是只转义了第一个单引号,还是把三个引号一起转义了?);
3.
  • 格式方法举例,这几种方法还蛮有意思的

    代码: 全选

    "{0:.17}".format(1/3)
    有时候浮着浮着就不对了哈,想起以前一个银行欺诈事件,不过round的时候用decimal先看看比较稳妥,否则四舍五入有时候并不一定是你以为会得到的结果;

    代码: 全选

    "{0:->16}".format('youku') 
    这个用来生成分割线不错哈,<是左对齐,^是居中,可惜没找到向下的箭头,不然还可以凑合一个两端对齐:)

    代码: 全选

    "{author} wrote {book}".format(book='Hamlet',author='Shakespeare')
4.
  • print不换行的办法,下面可以显示成ab,中间没有新行,因为尾巴已经被自定义空了;

    代码: 全选

    print("a",end="")
    print("b",end="")
5.
  • 定义变量标识符的时候ASCII或Unicode字符,下划线,数字都行,不能是什么-呀,>呀;
    中文好像是可以的唉!不信你试试(不过小心中英文符号):

    代码: 全选

    色="空"
    print(色)
6.
  • 逻辑行还是物理行,简而言之老黑三的意思是尽量一行行来,别花里胡哨地用分号;在一个物理行写多个逻辑行的东西,比如

    代码: 全选

    i = 5; print(i);
    他认为就不是好习惯,不过偶尔用\(就是那个转义符老朋友)断断章喘口气就很好,比如

    代码: 全选

    s = 'This is a string. \
    This continues the string.'
    print(s)
    而且不仅限于字符串哦,其他地方也能用哒;
7.
  • 缩进,行首空格不要随便加,该对齐对齐,一个tab等于四个space
8.
  • 运算符,加减乘除,大小判断就不说了,**幂指运算,//求除数,%求余数,<<,>>,&,|,^,~都是用来二进制运算的,布尔运算就直接and,or,not;
9. 10.
  • 控制流,句段后面记得用冒号:,switch在python里没有,不过后面说会有别的实现形式。循环的最后可选的else句段,要break/continue对其的执行区别;
11.
  • 函数,声明时def开头冒号结尾,含默认值的参数只能出现在无默认值参数之后, *添加元组参数,**添加字典参数,不含默认值的关键字参数可以“藏”在带*/**的参数后面。为函数添加说明支持__doc__非常方便其他人查询,不过好像只支持第一段注释;
12.
  • 模块,这个就得一步步来啦,多看多用吧,老黑三建议为了阅读方便尽量不要使用from法import模块,用__name__是不是__main__判断模块独立性;
13.
  • 数据结构,这得搞搞清楚
13.1
  • 列表,方括号[]包裹,.sort用来排序但没有返回值,.append用来添加,但是删除得用别的方法;
13.2
  • 元组,建议用圆括号()包起来方便阅读,与列表比感觉更像个“硬”数据块,它是不可变的,在定义单元素元组时记得加个逗号,但多元素的话最后一个逗号就无所谓了;
13.3
  • 字典,用花括号{}包裹,索引词是唯一且不可变的,内容则无所谓,不过字典里的条目不可排序,所以定义前自己先得想好,in可以用来查询条目是否存在。需排序输出可以看这里:http://blog.csdn.net/fhd001/article/details/6898076;
13.4
  • 序列,列表,元组,字符串都是序列,负数可以从后往前取值,如果用索引分割的话,冒号后面那个位置是不取的,这个有点像range(),多个冒号可以用来设置取值步长;
13.5
  • 集合,用([])包裹,元组化的列表???,这个作交并集运算正好;
14
  • 指向,复制列表类的数据时得用索引分隔符[:],不然就只是同时指向而不是真正的复制了;
--暂歇--
15
  • 类和对象这个要在实践中慢慢体会啦;

16
  • try, except, finally,一般用于错误控制,with语句则可以更简化地实现这个功能;
17
  • 标准库:os,sys,urllib,json;
18
  • 更多库:Module of the Week系列;
19
  • python里面居然可以快速交换两个变量值,用

    代码: 全选

    a,b = b,a
    ;
20 21
  • lambda语句?还不懂;
22
  • 列表解析,这代码减少量好厉害啊;
23
  • 可以用*,**前缀为函数添加元组,列表形参,元组的for循环看起来还不是特别好理解;
24
  • exec按字符串执行python语句,eval按字符串执行python表达式;
25
  • assert应当慎重使用,多数时候用于捕获异常;
-------------------------------------------------去看看大侠们写的程序,了解下各种模块啦-------------------------------------------------

--------------------------------------------------Python3 和 2 的不同----------------------------------------------------------------------
Python3中:print要加()
Python3中:raw_input改为input
------------------------------------------------------------------------------------------------------------------------------------------------
回复