Python学习笔记——基础语法篇

1、Python初识(IDE环境及基本语法,Spyder快捷方式)

      Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,没有编译过程,可移植,可嵌入,可扩展。python

IDE

      1.检查Python版本:算法

       运行应用程序Terminal(win+R),输入cmd,进入界面后输入python,查看是否安装,未安装前往https://www.python.org/网址安装对应版本python。express

      2.IDE集成环境编程

       (1)Anaconda spyder官网下载连接:https://www.anaconda.com/download/json

百度云盘: Anaconda2 python2.7 连接:https://pan.baidu.com/s/1UNLhUlpW04y0AuZlglyQJA 密码:axd1数据结构

       (2)Pycharm:下载连接https://www.jetbrains.com/pycharm/download/    在安装完PyCharm后,还须要再安装python,不然在PyCharm的project interpreter中就没有可选项。Python (Windows环境配置),以下闭包

           a.在环境变量path中添加Python目录:"个人电脑"右键点击“属性”,进入“高级系统设置”点击“环境变量”,找到PATH,添加“;%python安装路径”,保存便可。app

           b.在命令提示框中(cmd) : 输入path=%path%;C:\Python,按下"Enter"。 注意:C:\Python 是Python的安装目录。dom

中文编码

       首行代码敲入# -*- coding: UTF-8 -*-或者#coding=utf-8才能够正确显示中文python2.7

spyder快捷方式:

  1. python -V           查看快捷方式
  2. Ctrl + 1               注释/反注释
  3. Ctrl + 4/5            块注释/块反注释
  4. Ctrl + L               跳转到行号
  5. F12                    断点设置 
  6. F5                      运行
  7. Ctrl + Y              反撤销       
  8. Ctrl + Z              反撤销   
  9. SHIFT + F12     条件断点
  10. Ctrl + Shift + W 关闭全部
  11. Ctrl +空格键      代码完成
  12. Tab/Shift + Tab  代码缩进/反缩进
  13. Ctrl +I               显示帮助
  14. python script.py 调用python脚本#!/usr/bin/python 被忽略,等同于注释。
  15. ./script.py           调用python脚本#!/usr/bin/python指定解释器的路径。
  16. reset 后得Once deleted...  输入y回车便可清除IPython变量。
  17. reset in/out         删除全部以前输入输入输出结果记录,同上操做。
  18. Ctrl+L                 清空IPython控制台的记录便可。
  19. clear                   清空控制台

代码格式

  1. 缩进:建议缩进适应四个空格,提升可读性。在程序中混合使用制表符和空格均可能致使难以解决的问题,可将文件中全部制表符转换为空格。注意:python对代码缩进要求十分严格,是一门很是优秀的语言,要配置好IDE的缩进。
  2. 行长: 建议每行不超过79字符。
  3. 空行:空行将程序的不一样部分分开,组织程序文件。

2、Python变量和简单数据类型、列表、元组、字典、集合

变量

  1. 命名:不能包含空格,只能由字母、数字(不可做为开头)和下划线组成。
  2.  不要将Python关键字和函数名用做变量名,即不要使用Python保留字用于特殊用途的单词。
  3. 要简短且具备描述性,慎用小写字母l(像数字1)和大写字母O(像数字0)。

数据类型

  1. 整数执行加(+)减(-)乘(*)除(/)运算。注意:在Python2中,整数除法的结果只包含整数部分,小数部分直接被删除(没有四舍五入,直接删除),要避免这种状况,务必确保至少有一个操做数为浮点数,这样结果也将为浮点数。
  2. 字符串:用引号括起来的一系列字符。(引号可单可双,单不可含撇号)
  •         str.title()       以首字母大写的方式显示每一个单词。
  •         str.upper()   所有大写
  •         str.lower()    所有小写
  •         str()              转字符串函数,避免类型错误
  •         +                   合并字符串
  •         str.rstrip()      删除字符串末尾空白
  •         str.lstrip()      删除字符串开头空白
  •         str.strip()       删除字符串两端空白

列表

由一系列按特定顺序排列的元素组成,用方括号([])来表示列表,并用逗号来分割其中的元素。

  1. 访问:列表名[下标],第一个列表元素下标为0,最后一个列表元素为-1。
  2. 修改:列表名[下标] = xxx。
  3. append(xxx),将元素xxx添加到列表末尾,而不影响列表中的其余全部元素。
  4. insert(num,xxx),将元素xxx插入列表第num个位置,剩下元素右移。
  5. del(num),删除第num个位置的元素,没法再使用。
  6. pop(),删除列表末尾的元素,并让你可以接着使用它,也可使用pop()来删除列表中任何位置的元素,只须要在括号中指定要删除的元素的索引便可。
  7. remove(),能够从列表中删除元素,也可接着使用它的值。
  8. sort(),对列表进行永久性排序,若需按与字母顺序相反的顺序排列列表元素,向sort()方法传递参数reverse=True。
  9. reverse(),反转列表元素的排列顺序,可再次调用后恢复到原来的排列顺序。
  10. len(),列表的长度。
  11. for循环对列表的每一个元素访问或者执行相同的操做。
  12. list(),方法range()生成一系列数字,建立数字列表时,可以使用函数list()将range()结果直接转换为列表,若将range()做为函数list()的参数,输出将为一个数字列表。使用range()可指定步长,eg,range(2,11,2)从2开始数,而后不断地加2,直到达到或超过终值(11)。
  13. 列表统计函数:min(),max(),sum()。
  14. 对列表进行切片使用,可指定要使用的第一个元素的索引和最后一个元素的索引加1,负数索引可返回离列表末尾相应距离的元素。

元组

(,,,,)不能修改的值,不可变的列表成为元组,不能修改元组的元素,能够给存储元祖的变量赋值。任意无符号的对象,以逗号隔开,默认为元组。

  1. 元组[下标],访问。下标1开始,-1取最后。
  2. 元组+元组,链接操做。
  3. del 元组,删除整个元组,没法删除元组元素。
  4. len(),元组元素个数。还有min(),max()方法。
  5. 元组*n,将元组复制n次。
  6. for x in 元组:,迭代。
  7. cmp(),比较两个元组元素。
  8. tuple(),将列表转为元组。

字典

字典式一系列键-值对{key:value,key:value,……},每一个键都与一个值相关,使用键来访问与值相关联的值,与键相关联的值能够是数字、字符串、列表乃至字典。

  1. 字典名['键名'],进行访问。
  2. 字典名['键名'] = xxx,添加或修改键对值。
  3. 字典名 = {},建立控字典。
  4. del 字典名['键对值'],删除字典中键对值。
  5. for 键,值 in 字典.items():,返回一个键-值对列表。即使遍历字典时,键-值对的返回顺序也与存储顺序不一样。Python不关心键-值对的存储顺序,而只跟踪键和值之间的关系。
  6. keys(),此方法并非只能用于遍历,它返回一个列表,其中包含字典中的全部键。按顺序遍历字典中的全部键:对方法keys()的结果调用函数sorted()。
  7. values(),遍历字典中的全部值,返回一个值列表,而不包含任何键。经过对包含重复元素的列表调用set(),可以让Python找到列表中独一无二的元素,并使用这些元素来建立一个集合。
  8. 嵌套:将一系列字典存储在列表中,或将列表做为值存储在字典中。字典列表型:多个字典放在一个列表;在字典中存储列表:在字典中将一个键关联到多个值时 ,均可以在字典中嵌套一个列表;在字典中存储字典:嵌套的字典结构但愿都相同时。

集合

{...,...,...},一个无序的不重复元素序列,建立一个空集合必须用 set() 而不是 { },由于 { } 是用来建立一个空字典。

  1. add()/update(),添加元素,参数能够是列表,元组,字典等,自动合并重复。
  2. remove(xxx),将xxx元素从集合中移除。
  3. len(),集合元素个数。
  4. clear(),清除集合。
  5. xxx in 集合,判断xxx是否存在于集合中。
  6. union(),两个集合的并集。
  7. pop(),随机移除集合元素。
  8. intersection()/intersection_update(),集合交集。
  9. difference(),集合差集。
  10. difference——update(),移除集合中的元素,该元素在指定的集合也存在。

3、if语句、for和while循环(python无switch语句)

if语句

if语句的核心都是一个值为True或False的表达式。若是条件测试的值为True,Python就执行紧跟在if语句后面的代码;若是为False,Python就忽略这些代码。

1 if condition1:
2     statement1……
3 elif condition2:
4     statement2……
5 elif condition3:
6     statement3……
7 else:
8     statement4……
  1. ==,检查值是否相等(检查是否相等时不考虑大小写)。
  2. !=,检查是否不相等。
  3. <、>、≥、≤,比较数字。
  4. and,检查多个条件。
  5. in,检查特定值是否(不)包含在列表中。
  6. 布尔表达式(True/False)。
  7. 简单:一个测试一个操做。
  8. #if-else语句:else指定条件测试未经过时要执行的操做。
  9. #if-elif-else结构:依次检查每一个条件测试,指导遇到经过了的条件测试,执行紧跟的代码,并跳过余下的测试。
  10. #使用多个elif代码块也可省略else代码块。
  11. is 用来判断是否指向相同。

for循环

对列表中的每一个元素都执行相同的操做,编写是,对于用于存储列表中每一个值得临时变量,可指定任何名称。

1 for sth in sth:
2      sth

while循环

使用while sth循环进行数数或者条件测试,不断运行直到条件不知足或者终止。

while condition:
    statements……
  1. 标志:定义一个变量,用于判断整个程序是否处于活动状态。
  2. 使用break退出循环。
  3. 在循环中使用continue:要返回到循环开头,并根据条件测试结果决定是否继续执行循环。
  4. 避免无限循环:Ctrl+C,也可关闭显示程序输出的终端窗口。
  5. pass 不作任何事情,通常用作占位语句。

python没有switch语句,通常用if...elif...else语句替换

4、函数、异常处理

函数

带名字的代码块。def name:定义一个函数name,定义以冒号结尾。

  1. 三引号括起的文档字符串,Python用它来生成有关程序中函数的文档。
  2. 匿名函数lambda [arg1[,arg2,...,argn]]:expression,不能访问自有参数列表以外或全局命名空间里的参数。
  3. 全局变量(定义在函数外,能够在整个程序范围内访问)与局部变量(定义在函数内部的变量,只能在其被声明的函数内部访问)。调用函数时,全部在函数内声明的变量名称都将被加入到做用域中。
  4. 向函数传递信息:
  • 实参——调用函数是传递给函数的信息。
  • 形参——函数完成其工做所需的一项信息。
  • 位置实参——要求实参的顺序与形参的顺序相同(由于调用函数时,Python必须将函数调用中的每一个实参都关联到函数定义中的一个形参)。
  • 关键字实参——传递给函数的名称——值对,在实参中将名称和值关联起来了,无需考虑函数调用中的实参顺序,清楚地指明了函数调用中各个值得用途。
  • 默认值——给每一个形参指定默认值,在调用函数中给形参提供了实参时,Python将使用指定的实参值;不然,将使用形参的默认值。
  • return [表达式]——返回值语句将值(任何类型的值,包括列表和字典等较复杂的数据结构。)返回到调用函数的代码行。
  • 传递列表时,若要禁止函数修改列表,可函数传递列表的副本而不是原件,list_name[:]。
  • 传递任意数量的实参:函数使用一个形参*toppings,无论调用语句提供了多少实参,这个形参都将它们通通收入囊中。
  • import——可将函数存储在模块的独立文件中,用import导入到主程序,import容许在当前运行的程序文件中使用模块中的代码,使用as sth给模块指定别名。也可以使用from sth import sth,导入模块中的特定函数,使用as sth给函数指定别名。from sth import *导入模块中的全部函数。全部的import语句都应放在文件开头,除非在文件开头使用了注释来描述整个程序。

异常

异常:即一个事件的发生,该事件将会在程序执行过程当中发生,影响程序的正常执行。

  1. 处理方式:try...except...else,try后的语句执行时发生异常,跳回try并执行第一个匹配该异常的except子句,异常处理完毕后经过整个try语句,执行else语句后的语句,finally语句是不论有无异常都将执行。
  2. 触发异常:raise[Exception[,args[,traceback]]],也能够触发用户自定义的异常。

5、用户输入、文件

用户输入

  1. input(“sth”),获取用户输入字符串,即让程序暂停运行,等待用户输入一些文本,获取后,能够将其存储在一个变量中,以方便使用。可将该提示存储在一个变量中,再将该变量传递给函数input()。
  2. 函数int()可将用户输入的数字字符串转换为数值表示。
  3. 求模运算符(%)将两个数相除并返回余数,不会指出一个数是另外一个数的多少倍,而只指出余数是多少。
  4. raw_input([prompt]) ,函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)。
  5. print(''),标准输出打印。

文件

  • open(),读取整个文件数据,返回一个表示文件的对象。函数接受一个参数:要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。指定一个变量将这个对象存储。
  • 关键字with,在不须要访问文件后将其关闭。也能够调用open()和close()来打开和关闭文件。但这样作时,若是程序存在bug,致使close()语句未执行,文件将不会关闭。未妥善地关闭文件可能会致使数据丢失或受损。若是在程序中过早地调用close(),会发现须要使用文件时它已关闭。因此让Python去肯定:只管打开文件,并在须要时使用它,Python自会在合适的时候自动将其关闭。
  • 方法read(),读取这个文件的所有内容,并将其做为一个长长的字符串存储,read()到达文件末尾时返回一个空字符串,而这个空字符串显示出来时就是一个空行。要删除末尾的空行,可以使用rstrip()。
  • 在Windows系统中,在文件路径中使用反斜杠(\)而不是斜杠(/),将绝对文件路径(将文件在计算机中的准确位置)。为确保在Windows中万无一失,应以原始字符串的方式指定路径,即在开头的单引号前加上r
  • 要以每次一行的方式读取文件,可对文件对象使用for循环。消除空白行使用rstrip()。
  • 建立一个包含文件各行内容的列表:readlines()从文件中读取每一行,并将其存储在一个列表中。
  • 读取文本文件时将其中的全部文本都解读为字符串。若是读取的是数字,并要将其做为数值使用,就必须使用函数int()将其转换为整数,或使用float()将其转换为浮点数。

  • 调用open()时提供了两个实参,第一个实参也是要打开的文件的名称;第二个实参(’w’)告诉Python,要以写入模式打开这个文件。打开文件时,可指定读取模式(’r’)、写入模式(’w’)、附加模式(’a’)——给文件添加内容而不是覆盖原有的内容和读取和写入文件的模式(’r+’),若省略了模式实参,Python将以默认的只读模式打开文件。
  • Python只能将字符串写入文本文件,要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式。
  • 写入多行,函数write()不会在你写入的文本末尾添加换行符,要让每一个字符串都单独占一行,须要在write()语句中包含换行符
  • split()以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。
  • 使用模块json来存储数据,可以将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。JSON(JavaScript Object Notation),json.dump接受两个实参:要存储的数据以及可用于存储数据的文件对象。使用json.load()加载存储在xxx.json中,并将其存储到变量xxx中。
  • 将代码划分为一系列完成具体工做的函数,称为重构。
  • 建立、删除、更改目录:os.mkdir("newdir")——在当前目录下建立新的目录;os.chdir("newdir")——改变当前目录;od.getcwd()获取当前目录;os.rmdir("dirname")——删除目录,删除以前,该目录下的全部内容应该被删除。

6、面向对象

类:用来描述具备相同的属性和方法的对象的集合。

对象:经过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

基本概念

  1. 实例化:根据类来建立对象,可按需求根据类建立任意数量的实例。
  2. 在Python中,类——首字母大写的驼峰命名法且定义括号为控,实例——小写的名称,在类中可用一个空行来分隔方法,在模块中,使用两个空行来分隔类。
  3. 类中的函数称为方法;_init_()是一个特殊的方法,每当你根据类建立新实例时,Python都会自动运行,在这个方法的定义中,形参self必不可少,还必须位于其余形参的前面,由于调用这个方法来建立实例时,将自动传入实参self。每一个与类相关联的方法调用都自动传递实参self,它是一个指向实例自己的引用,让实例可以访问类中的属性和方法。
  4. 访问属性与调用方法:句点表示法。eg.dog.name,dog.sit()
  5. 类中的每一个属性都必须有初始值,哪怕这个值是0或字符串,但设置默认值时,在方法_init_()内指定这种初始值是可行的,若是对某个属性这样作了,就无需包含为它提供初始值的形参。
  6. 内置属性:__dict__(类的属性,有类的数据属性组成),__doc__(类的文档字符串),__name__(类名),__module__(类定义所在的模块),__bases__(类的全部父类构成元素,包含一个由全部父类组成的元素)。
  7. 销毁(垃圾回收):对象一旦被建立就建立一个引用计数器,这个引用计数变为0时,适当时候被回收。__del__析构函数在对象销毁时调用。

    垃圾回收
    1.小整数[-5,256)对象池将整数对象提早建立好,位于该区间的对象不会被回收。但定义2个相同的字符串时,引用计数为0,触发垃圾回收。
    2.每个大整数,均建立一个对象。
    3.单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁。

    GC垃圾回收——发现并处理不可达的垃圾对象
    垃圾回收 = 垃圾检查+垃圾回收
     import gc后is_enable() = True启动自动垃圾回收。
    经常使用函数:
    1.gc.set_debug(flags)设置gc的debug日志,通常设置为gc.DEBUG_LEAK
    2.gc.collect(generation)显式进行垃圾回收,能够输入参数,0表明只检查第一代的对象,1表明检查一,二代的对象,2表明检查一,二,三代的对象,若是不传参数,执行一个full collection,也就是等于传2,返回不可达对象的数目
    3.gc.gwt_threshold()获取的gc模块中自动执行垃圾回收的频率。
    4.gc.set_threshold(threshold0[,threshold1,[,threshold2]])设置自动执行垃圾回收频率。
    5.gc.get_count()获取当前自动执行垃圾回收的计数器,返回一个长度为3的列表。
    引用计数机制(因为解决不了循环引用问题)为主,分代收集两种机制为辅的策略。
    分代:对象在建立的时候,放在一代中,若是在一次一代的垃圾检查中,该对象存活下来,放到第二代,同理,二代进入三代。
    1.引用计数+1:对象被建立;对象被引用;对象被看成参数传入到一个函数中;对象做为一个元素,存储在容器中。
    2.引用计数-1:对象的别名被显示销毁;对象的别名被赋予新的对象;一个对象离开它的做用域;对象所在的容器被销毁,或从容器中删除对象。
    3.查看一个对象的引用计数:sys.getrefcount(xxx)

  8. 重写:父类方法的功能不知足需求,可在子类重写父类的方法。__init__(self[,args])、__del__(self)、__repr__(self)、__str__(self)、__cmp__(self,x)。
  9. __foo__: 定义的是特殊方法,通常是系统定义名字 ,相似 __init__() 之类的。_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能容许其自己与子类进行访问,不能用于 from module import *。__foo: 双下划线的表示的是私有类型(private)的变量, 只能是容许这个类自己进行访问了。
  10. 类属性与方法:
    ***xx:公有变量
    ***_x:单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类能够访问。
    ***__xx:双前置下划线,避免与子类中的属性命名冲突,没法在外部直接访问。
    ***__xx__:双先后下划线,用户名字空间的魔法对象或属性。
    ***xx_:单后置下划线,用于避免与Python关键词的冲突。 
    ***经过 name mangling(名字重整)如:_Class__object机制就能够访问private了。
    属性property
           1.私有属性添加getter和setter方法
           2.使用property升级setter和getter方法,至关于把方法进行了封装,开发者在对属性设置数据的时候更方便。
           3.直接在第一个get类方法前面@property,再在set方法前面@get类方法名的属性setter方法。
  11. 传递对象:可更改(mutable):list、dict和不可更改(immutable):strings、tuples、numbers。
  12. 继承
  • 一个类继承另外一个类时,它将自动得到另外一个类的全部属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的全部属性和方法,同时还能够定义本身的属性和方法。不容许实例化的类访问私有数据,但可使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性。
  • 建立子类的实例时,Python首先须要完成的任务是给父类的全部属性赋值,子类的_init_()须要父类施以援手。
  • 定义子类时,必须在括号内指定父类的名称。
  • super()是一个特殊函数,帮助Python将父类和子类关联起来,父类也称为超类(superclass)。
  • 让一个类继承另外一个类后,可添加区分子类和父类所需的新属性和方法。
  • 可将类的一部分做为一个独立的类提取出来,将大型类拆分红多个协同工做的小类。

核心编程

1.迭代器:迭代访问集合元素并记住遍历位置的对象,只前不退。

1)可迭代的对象(可直接做用于for循环的对象)
一类是集合数据类型:int、tuple、dict、set、str等。
二是generator,包括生成器和带yield的generator function。
2)使用collections模块的Iterable对象放在isinstance(对象,Iterable)中,判断一个对象是不是Iterator对象。
3)迭代器:能够被next()函数调用并不断返回下一个值的对象。
4)iter()函数,生成器都是Iterator对向,但list、dict、str可迭代,但不是Iterator。用iter()函数能够将其变为Iterator。

2.闭包:有权访问另外一个函数做用域中变量的函数。
1)函数引用
2)函数内部在定义一个函数,而且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称为闭包。

3.装饰器:自己是一个函数,目的是在不改变待装饰函数代码的状况下,增长额外的功能,装饰新的返回值是已装饰的函数对象。
1)@函数名表示,必定会执行装饰,不是等到调用时才装饰。装饰先装饰最里层即代码最后的装饰器先装,调用则相反。
2)有参数的函数装饰要注意装饰器内部定义的方法必须带有一样数量的形参。多参使用(*args, **kwargs)接收。
3)有返回值的函数装饰要在装饰函数调用中用接收值返回。 
4)带有参数的装饰器,可以在运行时有不一样的功能。

4.python动态添加属性和方法
1)使用types.MethodType(method, type)绑定后赋值给属性再调用该属性方法便可。
2)静态方法或者类方法直接赋值给对象属性便可调用无需绑定。
3)对属性采用__slots__定义,实例只能对这些属性进行赋值,不能对其余属性赋值。但只对当前类实例起做用,对集成的子类是不起做用的。

5.生成器:一边循环一边计算的机制——generator
1)生成方式:将列表生成方式的[]改成()。
2)在函数中用yield语句能够将函数变为生成器。将该函数变为生成器对象后进行迭代取出。
3)可使用next(xx)方法或者xx.__next__()获取值,只要yield语句不从新调用其值就不会改变。
4)xx.send(some)发送值做为yield的值(可是必须是生成器已经启动的状况下)。

6.类装饰器:把类当成装饰器放在函数前进行装饰。装饰时调用类的__init__方法,装饰完的函数被调用时调用类的__call__方法。

元类(魔法,较难用到):
1.class建立的类也是一个对象,能够在运行时动态的建立它们,就像其余任何对象同样。
2.type(“类名”,由父类名称组成的元组(针对继承的状况,能够为空),包含属性的字典(名称和值))
3.使用xxx.__class__能够查看建立者。
4.定义类时添加__metaclass__属性,就选定了系统建立该类的元类。

7.经常使用的标准库builtins 内建函数默认加载os 操做系统接口sys Python自身的运行环境functools 经常使用的工具json 编码和解码JSON对象logging 记录日志和调试multiprocessing 多进程threading 多进程copy 拷贝time 时间datetime 时间和日期calendar 日历hashlib 加密算法random 生成随机数re 字符串正则匹配socket 标准的BSD Socket APIshutil 文件和目录管理glob 基于文件通配符搜索

相关文章
相关标签/搜索