美文网首页生活不易 我用python@IT·互联网
笔记|《简明Python教程》:编程小白的第一本python入门

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

作者: everfight | 来源:发表于2017-08-22 11:35 被阅读462次

    《简明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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/rjgkdxtx.html