经过半个多月python基础的学习,对Python兴趣日益浓厚,每天在代码的海洋中遨游。以下是我的学习经验和小结。
第一天 1、解释器和编译器 编译型语言(c、c++等)跨平台性较差,需要通过编译器进行编译,生成可执行文件;解释型语言(python等)跨平台性高,但是运行速度相对较慢,通过解释器,解释一行执行一行。 python为后端语言,1、简单直观,2、开源,3、容易理解,4、适用于短期开发。 2、python属于完全面向对象的语言,强大标准库和第三方库。可扩展性:可以使用其他语言对核心代码C,C++等进行编写。 GitHub LeetCode刷题网站 3、三种执行环节 解释器,交互式,IDE集成开发环境 4、cd切换路径,mkdir创建文件夹,ls当年路径文件查看,touch创建文件 执行文件:python 文件名 ,编写文件:gedit 文件名 5、错误内容: (1)Nameerror:名称错误。 (2)Typeerror:类型错误。 (3)Indentationerror:缩进错误。 (4)Syntaxerror:语法错误。 (5)Keyerror:key值错误 6、解释器运行python (1)python解释器,官方python与python3 (2)CPython————官方版本的C语言 (3)Jpython————在java平台上运行 (4)IronPython————在.NET和Mono平台上运行 (5)PyPy————Python实现,支持JIT即时编译 7、交互式shell运行Python程序 直接在运行终端运行解释器,在Python直接输入python代码,即可执行。 适用于学习验证Python语法或者局部代码。 IPython一个python的交互式shell,i表示interactive,交互。 8、IDE集成开发环境
第二天 1、注释 单行注释#后需要加一个空格,行尾注释#需与代码间有两个空格。 多行注释,三引号括起来的内容。注释等级不同,导致多行注释有时候颜色不是灰色 。 注释:(1)不是越多越好,(2)对于复杂操作,应在操作开始前写上若干行注释, (3)对于不是一目了然的代码,应在其行尾添加注释,(4)不描述代码 2、算术运算符 //取整除,%取余数,**幂运算。 *可以用于字符串的拼接。 3、数据类型 数字型:整型(int)、浮点型(float)、布尔型(bool)(非0即真)、复数型(complex)。 非数字型:字符串(str)、列表(list)、元组(tuple)、字典(dict)。 计算时,True对应的数字为1,False对应的数字为0。 数字型变量之间可以直接计算。字符串之间使用+、*拼接字符串。 4、输入输出 input函数的输入全部认为是一个字符串。 转换数据类型。 布尔值True、False转换为字符串为“True”、“False”,字符串“True”、“False”转换为数字型为1,0。“0”,“1”字符串转换为布尔值时均为True。
第三天 1、格式化输出 %s作为占位符,输出字符; %d输出十进制整型,%06d表示输出的整数显示的位数,表示用0进行占位,占6位; %f输出浮点型,%.2f表示小数点后两位小数; %%输出%。 2、变量的命名 字母、下划线、数字;不能以数字开头;不能与关键字重名。 变量名需要两个或者多个单词组成时:1、每个单词都使用小写字母,2、单词之间使用下划线连接 小驼峰、大驼峰命名法。 3、if的判断的使用 4、逻辑运算符 与and,或or,非not。 a = 1,b = 2, a and b ---> 2 同真则返回最后一个真值 a or b ---> 1 返回第一个真值 5、if条件语句中,比较长的判断语句可以换行处理,换行后应再增加4个空格的缩进 random模块 import random Com = random.randint(1,3)表示随机1-3的整数。
第四天 1、计数要求:从零开始进行计数。 2、break、continue break某一条件满足时,退出循环,不再执行后续重复代码。终止该块循环。 continue某一条件满足时,不执行后续重复的代码。终止该次循环。 3、print(1,end=“”),end=“”保证print不换行输出。 print()默认end=“\n”即换行。 4、转义字符 \t:输出一个制表符,协助输出文本时在垂直方向保持对齐,最多可以补齐4位。 \n:输出一个换行符。 \\:输出 \。 5、封装 接口————类————函数,三级封装。 6、函数 def == define 定义函数
第五天 1、函数注释 def 下三引号进行注释,选中调用的函数时,control+j快捷显示注释(Windows版会control+k)。 2、实参,形参 形参:定义函数时,用来接收参数用的 实参:调用函数时,用来把数据传递到函数内部 3、return在使用时,当运行到return时,会返回到调用函数的位置,return下的代码不会被执行到。 4、模块 在模块中定义的全局变量、函数都是模块能够提供给外界直接使用的工具。 模块的命名:不能以数字开头,以数字开头无法导入模块。 pyc文件是由python解释器将模块的源码转换为字节码。 python在解释源程序时分为两个步骤: 1)首先处理源代码,编译成一个二进制代码 2)在对字节码进行处理,才会生成cpu能够识别的机器码 5、高级变量 list:index索引,list.index(“值”,begin,end)索引的开始和结束为止。
第六天 1、列表可以存储不同类型的数据,在实际场景中一般会存储相同类型的数据,可以迭代操作。 2、元组,定义后不可以修改。一个元素的元组,需加一个逗号。 3、字典,一行输入一对键值对 对字典的直接遍历,得到的是键key。 4、字符串: 1)判断类型:判断空白字符,判断是否只包含数字 isdecimal(只判断数字),isdigital(可以判断一些特殊的数字,unicode字符串,“\u00b2”表示个平方),isnumeric(还可以判断中文数字):均无法判断小数。 2)查找和替换 replace函数存在返回值,并没有对原字符串进行更改,是新创建了一个字符串。指定次数超过能替换的量时,并不会报错。
第七天 字符串操作: 1)大小写切换:5个 2)文本对齐:3个,ljust,rjust,center 3)去除空白符:3个,(l或者r)strip 4)拆分和拼接:5个 split:默认以空白字符进行拆分 join:“ ”.join(列表),以空格对列表的进行拼接。 5)切片 高级数据变量的公共方法 1)len、max、min(字典的大小比较,针对key键进行比较)、del、cmp 2)切片,有序数据均可以进行切片 3)运算符 4)完整的for循环语法 for 变量 in 集合: 循环代码 else: 没有通过break退出循环,循环结束后,会执行的代码 项目注释: TODO注释:#后面加TODO,即成为TODO注释,提示自己还应完成的功能。 # TODO(姓名/邮件) 需要完成的功能 程序是用来处理数据的,首先要思考一下存储数据的类型,已经定义好该存储数据的变量。
列表操作:append、extend、sort、remove没有返回值,pop存在返回值。 字典:update没有返回值 字符串:replace,upper,lower,title,join有返回值
第八天 1、名片管理系统 return:可以返回一个函数的执行结果,下方代码不会执行。如果return后面没有任何内容,表示会返回到调用函数的位置。 只有一个return会被执行一旦执行了某个return,函数也将被立即终止,其余return将不会再执行。 Linux上的shebang符号(#!) 2、变量进阶: 变量保存的是数据在内存中的地址,称之为引用。 变量的赋值本质是传递id地址。 可变类型:列表、字典 不可变类型:数字类型、字符串、元组 3、函数 局部变量: 函数执行结束后,函数内部的局部变量,会被系统回收。 局部变量的生命周期:被创建到被系统回收的过程。 全局变量:定义在函数外部的变量。 在函数内部不能直接修改函数全局变量 global可以定义一个全局变量。 但是,但是,但是:因为列表是可变类型,如果不加global的话,使用如使用append方法等去修改也会影响到全局变量里的b的值。 1、不可变类型全局变量,在函数内直接修改时,必须先用global声明,可变类型不需要 2、变量存储的实际上数据的引用,可理解为数据在内存中的地址,传递时,传递的也是数据的引用
第九天 函数、参数 全局变量命名前应增加g_或者gl_。 还用多个变量接受函数的返回值,变量个数与元组中的元素个数保持一致。 a,b=b ,a,交换两个数的值。 列表使用+=时,相当于调用了extend的方法,id地址不发生改变,就会发生改变。 缺省参数,某个参数给定一个默认值。缺省参数应该写在最后,出现多个缺省参数时,对某个指定缺省参数赋值时,写出参数名。 多值参数,*接受元组,**接受字典。(args = arguments,kwargs = keyword arguments),字典的key值不加引号。 元组和字典的拆包,需要增加 * 和 ** 。在传入多值参数时,有时候需要进行拆包。 递归,必须有一个出口,做出一个假设,上一级已经可以完成功能。以调用函数的地方 为界,上方为进入递归前调用,下方为递归后调用。 参数写的顺序,正常参数,缺省参数,*参数,**参数。 Lambda函数能接收任何数量的参数但只能返回一个表达式的值。
第十天 1、面向对象(OOP) 类和对象:类属性和方法,变量和函数。 满足类的三要素 1)类名的命名符合大驼峰命名法, 2)属性指的是具体有怎么样的特征, 3)方法指的是具体有怎么样的行为。 2、创建函数后,调用dir函数可以查看其内置函数。dir(function) %x:使用十六进制显示数字,%d:使用十进制显示数字。 给对象增加属性,不推荐在类的外面增加。 self:哪个对象调用方法,此时self指的就是该对象的引用。 __new__函数,在创建对象时被调用, __init__函数,在对象初始化时被调用。
序号 | 方法名 | 类型 | 作用 | 1 | __new__ | 方法 | 创建对象时,会被 自动 调用 | 2 | __init__ | 方法 | 对象被初始化时,会被 自动 调用 | 3 | __del__ | 方法 | 对象被从内存中销毁前,会被 自动 调用 | 4 | __str__ | 方法 | 返回对象的描述信息,print 函数输出使用 |
内存的地址使用十六进制保存。 使用 类名() 创建对象时,Python 的解释器 首先 会 调用 __new__ 方法为对象 分配空间__new__ 是一个 由 object 基类提供的 内置的静态方法,主要作用有两个: 1)在内存中为对象 分配空间 2) 返回 对象的引用 Python 的解释器获得对象的 引用 后,将引用作为 第一个参数,传递给 __init__ 方法 在每次使用 类名() 创建对象时,Python 的解释器都会自动调用两个方法: __new__ 分配空间,__init__ 对象初始化 __del__方法会在最后使用 注意:`__str__` 方法必须返回一个字符串
在现实开发过程中,先去开发被使用到的类。
第十一天 1、身份运算符 is,判断两个标识符是否引用同一个对象,判断id地址是否为同一个。 ==, 判断值是否相同。 python中针对None比较时,建议使用is判断。 2、私有属性、私有方法 属性名和方法名前加两个下划线,定义私有属性、方法。 对象的私有属性和方法只能在对象内部调用,无法再外部进行调用。 对私有方法处理方式:在名称前面加上_类名=>_类名__方法 __age私有属性在创建时,其实对象创建的名称为_Girl__age。 3、继承,子类拥有父类所有的数学和方法。 基类,父类。 派生类,子类。 重写: 对父类的方法进行重写,会覆盖父类中的方法。 扩展: 对父类方法进行扩展,重写中,super().父类方法,会调用原本来父类中封装的方法。 在python2中,对父类的扩写时只能调用,父类.方法名(self) 私有属性、方法不能由外界或者子类直接访问到。 多继承: 类名.__mro__:可以查看对象调用方法的顺序。(内置函数) 现在类中寻找,再根据继承的父类按顺序寻找。 面向对象开发三大特点:封装、继承、多态。 4、多态:不同的子类对象,调用相同父类方法,产生不同的执行结果。 1)以继承父类方法为前提 2)以重写父类方法为前提 5、每个对象都有自己独立空间,保存不同的属性 多个对象的方法,在内存中只有一份,在调用时,会传给该对象self。 (属性的获取机制,向上查找机制。在实例对象中未找到,会向上在类中寻找。)
第十二天 1、类方法 2、静态方法:既不需要访问类属性或调用类方法,也不需要访问实例属性或调用实例方法,可以封装为静态方法。 @staticmethod定义静态方法,且不需要传入self的参数。 调用静态方法:类名.方法名 3、单例模式 __new__方法,为对象分配空间,返回对象的调用。 __new__必须要有返回值,返回实例化出来的实例 __new__方法为静态方法。 4、异常 try…except…分支语句 else:未出现异常才会执行的代码,finally:无论如何,都会执行的代码。 异常传递性,会向调用的函数diaoyongdiaoyong 主动抛出异常 5、模块 from…import…/import…
第十三天 1、模块导入 从不同模块导入相同名字的函数,后导入模块会的函数会覆盖先导入模块的函数。 模块索引顺序:当前目录下导入模块——>系统目录下导入模块 模块名.__file__:返回模块的完整路径 内置函数:__name__:当前页执行时,得到__main__;在导入模块的位置执行,输出为导入模块的模块名。 2、包 包是一个包含多个模块的特殊目录,包的文件夹内必须有一个__init__的py文件。 要在外界使用包中的模块,需要在__init__.py中指定对外界提供的模块列表。 3、制作包 1)创建setup.py: 2)构建模块:python setup.py bulit 3)生成发布压缩包:python setup.py sdist 安装包:python setup.py install —perfix=指定路径
第十四天 1、导入包,python install 包名 卸载包,sudo rm -r 文件名 2、安装模块 python3中安装: sudo pip3 install 模块名 sudo pip3 uninstall 模块名 安装ipython: sudo pip install ipython 3、文件管理 文本文件(本质也是二进制文件)、二进制文件。 打开、读写、关闭文件的操作。 4、os模块 os.path.isdir(“文件名”) 如果为文件返回false,如果为目录返回true。 5、编码格式 python2默认ASCII,python3默认utf-8。 6、eval函数 将字符串当成一个有效表达式来,返回一个可以执行的type。 eval局限性:不要使用eval直接转换input的结果。 __import__(模块名).system(命令) 直接使用调用模块执行命令,执行成功返回0,执行失败,返回错误信息。 7、使用pygame pygame.init()初始化pygame pygame.quit()卸载pygame模块 pygame.rect(与x轴距离,与y轴距离,size)用于描述矩形区域,size(width,height) pygame.display.set_mode(tuple,flags,depth)初始化游戏显示窗口的宽和高,有返回值 使用后,需display.update()方法更新显示。
|