笔记|《简明Python教程》:编程小白的第一本python入门书

《简明Python教程》这本书是初级的Python入门教材,初级内容基本覆盖,对高级内容没有做深入纠结。适合刚接触Python的新手,行文比较简洁轻松,读起来也比较顺畅。
下面是我根据各个章节的内容进行的简要归纳,相关代码都已按照章节顺序进行命名。

基本介绍

  • Python特点:
    简单、易学、免费、开源、可移植性好、面向对象、可扩展、丰富的库等等。

如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。C,C++为编译型语言,变异后看不到源代码。

  • 编辑器的选择:
    强烈建议你学习使用VIM或Emacs,从长远看来它们对你是极其有帮助的。
  • 如何退出Python提示符:
    如果你使用的是Linux/BSD shell,那么按Ctrl-d退出提示符。
    如果是在Windows命令行中,则按Ctrl-z再按Enter。

基本概念

  • '#'符号右面的内容都是注释

  • 特殊形式的注释:
    源文件的头两个字符是#!,后面跟着一个程序,告诉你的Linux/Unix系统执行你的程序的时候,它应该运行哪个解释器。

  • 可执行的Python程序:
    在linux下,chmod命令用来改变文件的模式 ,给系统中所有用户这个源文件的执行许可。然后直接通过指定源文件的位置来执行程序。我们使用./来指示程序位于当前目录。

    $ chmod a+x helloworld.py
    $ ./helloworld.py
    Hello World
    
  • 设置环境变量的作用:
    能让程序在各个位置运行。运行时,系统会查找列在PATH环境变量中的各个目录,然后运行那个程序。

  • 显示PATH变量

    $ echo $PATH
    
  • 获取帮助
    运行help(str)——这会显示str类的帮助。str类用于保存你的程序使用的各种文本(字符串),按q退出帮助。

  • 三引号
    使用三引号('''或""")利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。

  • 特殊字符

    \'来指示单引号
    \\来指示反斜杠
    行末的单独 \ 表示字符串在下一行继续
    不需转义: 字符串加上前缀r或R来指定
    
  • 字符串是不可变对象
    这意味着一旦你创造了一个字符串,你就不能再改变它了。

  • 标识符的命名

    标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘_’)。
    标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字组成。
    标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。
    有效 标识符名称的例子有i、__my_name、name_23和a1b2_c3。
    无效 标识符名称的例子有2things、this is spaced out和my-name。
    
  • 逻辑行与物理行
    建议你坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。

  • 如何缩进
    不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我强烈建议你在每个缩进层次使用单个制表符或两个或四个空格。

运算符和表达式

严格来说,逻辑操作符的操作数应该为布尔表达式,但Python对此处理的比较灵活,即使操作数是数字,解释器也把他们当成“表达式”。

  非0的数字的布尔值为1,0的布尔值是0。空字符串为假,非空字符串为真。非零的数为真。
  • and操作符:
    只要左边的表达式为真,整个表达式返回的值是右边表达式的值。否则,返回左边表达式的值。

  • or操作符:
    只要两边的表达式都为真,整个表达式的结果是左边表达式的值;如果是一真一假,返回真值表达式的值。特别注意的是空值和0的情况,这时候返回的是右边的0或空值.

Python中代表False的值有:

  • 布尔型,False表示False,其他为True (false则不同)
  • 整数和浮点数,0表示False,其他为True
  • 字符串和类字符串类型(包括bytes和unicode),空字符串表示False,其他为True(注:'0'字符串零并不是False)
  • 序列类型(包括tuple,list,dict,set等),空表示False,非空表示True
  • None永远表示False
  >>> print '' or 5 or 0
  5

  >>> print 5 and 4
  4

位运算:
左移: 3<<1

0001(十进制1)
<< 3(左移3位)
= 1000(十进制8)

右移: 10>>2

1010(十进制10)
>> 2(右移2位)
= 0010(十进制2)

位与: 5&3

 0101(十进制5)
 AND 0011(十进制3)
 = 0001(十进制1)

位或: 5|3

0101(十进制5)
OR 0011(十进制3)
= 0111(十进制7)

位异或: 2^10

 0010(十进制2)
 XOR 1010 (十进制10)
 = 1000 (十进制8)

运算符优先级:

运算符    描述
**    指数 (最高优先级)
~ + -    按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % //    乘,除,取模和取整除
+ -    加法减法
>> <<    右移,左移运算符
&    位 'AND'
^ |    位运算符
<= < > >=    比较运算符
<> == !=    等于运算符
= %= /= //= -= += *= **=    赋值运算符
is is not    身份运算符
in not in    成员运算符
not or and    逻辑运算符

控制流

  • 在Python中有三种控制流语句——if、for和while。
  • break VS continue
    break语句是用来终止循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句。
    continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

注:如果你从for或while循环中终止,任何对应的循环else块将不执行。

函数

  • 形参与实参
    参数在函数定义的圆括号对内指定,用逗号分割。当我们调用函数的时候,我们以同样的方式提供值。函数中的参数名称为形参,提供给函数调用的值称为实参。
  • 局部变量
    当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是局部的。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。
  • global语句
    如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是全局的,使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
  • 使用默认参数值
    只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。
    赋给形参的值是根据位置而赋值的。例如,def func(a, b=5)是有效的,但是def func(a=5, b)是无效的。
  • 关键参数
    如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作关键参数——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。如: func(c=50, a=100)
  • return语句
    return语句用来从一个函数返回即跳出函数,从函数返回一个值 。
  • DocStrings
    Python有一个很奇妙的特性,称为文档字符串,它通常被简称为docstrings。它帮助你的程序文档更加简单易懂,你应该尽量使用它。
    文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。
    如果你已经在Python中使用过help(),那么你已经看到过DocStings的使用了!它所做的只是抓取函数的doc属性,然后整洁地展示给你。

模块

  • os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。

  • os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。

  • os.getenv()和os.putenv()函数分别用来读取和设置环境变量。

  • os.listdir()返回指定目录下的所有文件和目录名。

  • os.remove()函数用来删除一个文件。

  • os.system()函数用来运行shell命令。

  • os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。

  • os.path.split()函数返回一个路径的目录名和文件名。

    >>> os.path.split('/home/swaroop/byte/code/poem.txt')
    ('/home/swaroop/byte/code', 'poem.txt')
    
  • os.path.isfile()
    检验给出的路径是否是文件

  • os.path.isdir()
    检验给出的路径是否是目录。

  • os.path.exists()
    检验给出的路径是否真地存在。

  • from..import语句
    如果你想要输入所有sys模块使用的名字,那么你可以使用from sys import *语句。(避免使用)

  • 模块的name
    每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。这在一个场合特别有用——就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。

  • dir()函数
    你可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。

  • del
    这个语句在运行后被用来删除一个变量/名称。在例子del a中,你将无法再使用变量a——它就好像从来没有存在过一样。

数据结构

  • 字符串
    split函数的另外一个参数是规定作为分隔符的字符串。分隔符不显示在列表中。

        >>> string.split(song, 'ai')
        ['The r', 'n in Sp', 'n...']
    

    函数jion的功能和split正好相反,它是将列表连接成字符串。默认的分
    隔符是空格。

        >>> list = ['The', 'rain', 'in', 'Spain...']
        >>> string.join(list)
        'The rain in Spain...'
    
  • 列表:
    len(list)、list.append、list.sort、del list[0]

  • 元组:
    元组和字符串一样是不可变的,即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。

  • 字典:
    它们的键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
    赋值:d[key]= value
    删除:del d[key]
    迭代出每一项:for name,address in ab.items()

  • 序列:列表、元组、字符串都属于序列。
    序列的两个特点:索引操作符和切片操作符。

  • 引用:
    当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!

  • 字符串方法:
    in操作符用来检验一个给定字符串是否为另一个字符串的一部分。

  • find方法:
    用来找出给定字符串在另一个字符串中的位置,或者返回-1以表示找不到子字符串。

  • append:
    在列表的尾部追加元素,参数是插入元素的值。方法extend合并两个列表为一个。

面向对象编程

self:类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。
init方法: init方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化 。
类与对象的方法:类的变量 由一个类的所有对象(实例)共享使用。对象的变量 由类的每个对象/实例拥有。
继承:基本类的init方法专门使用self变量调用。

  • 类与对象
    类使用class关键字创建。类的域和方法被列在一个缩进块中。

  • self
    类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,
    Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。

  • 类的使用
    我们使用class语句后跟类名,创建了一个新的类。这后面跟着一个缩进的语句块形成类体。
    在这个例子中,我们使用了一个空白块,它由pass语句表示。接下来,我们使用类名后跟一对圆括号来创建一个对象/实例(实例化)。

  • __init__方法
    __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化 。
    注意,这个名称的开始和结尾都是双下划线。

  • __del__方法
    __del__它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。

输入输出

模式可以为读模式'r'、写模式'w'或追加模式'a'。
使用file类的write方法来写文件,最后我们用close关闭这个文件。
使用readline方法读文件的每一行。

异常

  • 处理异常
    我们可以使用try..except语句来处理异常。我们把通常的语句放在try-块中,而把我们的错误处理语句放在except-块中。

  • 引发异常
    你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。
    你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。

  • try...finally
    异常发生后有语句仍然执行。

python标准库

  • sys模块
    sys模块包含了与Python解释器和它的环境有关的函数。
    sys.argv变量是一个字符串的列表。特别地,sys.argv包含了命令行参数 的列表,即使用命令行传递给你的程序的参数。 如:sys.argv[0]、sys.argv[1]
    .pyc文件: 字节编译的文件 ,这些文件以.pyc作为扩展名。
    from..import语句: from sys import argv语句。
    模块的name:获取模块的名称。main为当前程序。
    制造你自己的模块:记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。
    dir():内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。

更多python内容

表生成式、单语句块、lambda语句
exec语句用来执行储存在字符串或文件中的Python语句

>>> exec 'print "Hello World"

eval语句用来计算存储在字符串中的有效Python表达式。

>>> eval('2*3')

assert语句用来声明某个条件是真的。当assert语句失败的时候,会引发一个AssertionError。

  • assert语句
    assert语句用来声明某个条件是真的。
    例如,如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。

书中的代码都整理在github上了.详见:https://github.com/Everfighting/A-Byte-of-Python.git

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 前言 ||| 第二章 使用ArcPy编写脚本 Python支持大部分在其他语言中出现的编程结构。在本章内容中,我们...
    muyan阅读 90,001评论 10 55
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,557评论 1 118
  • 教程总纲:http://www.runoob.com/python/python-tutorial.html 进阶...
    健康哥哥阅读 2,016评论 1 3
  • 啊 真是要崩溃真疯了现在我想死 智力的关系啊?真的脑子不对? 是? 少说话。少问事。少思考。做好手边的事。就这样。
    0920阅读 197评论 0 0
  • 第二十话 追踪 翌日。无论我们多么不期待这一天的到来,但是手表上的指针还是无情的向我们宣告着残酷的现实。 与前几日...
    邹航阅读 243评论 0 1