正如经典的Automate the Boring Stuff with Python一书中所提到的,Python让你能够自动化琐碎的东西,让你专注于更多令人兴奋和有用的东西。以下是一枚小菇凉在学习python中的一些学习总结~如有问题请大佬多多指教啦,笔芯芯♥~
0x00 Python学习
1)学习方法
程序员小哥哥说:语言的学习都是大同小异的,先掌握其语言特性----语言特点、内置函数、变量相关规则、运算符、流程控制、基本算法等。本篇对语言特性做简单介绍。
项目式学习 | 通过一些练习来具象化Python的语法和概念,能够学以致用 |
编程思维 | 学习语言最好的书籍就是他的官方文档 |
利用help | 在使用某些库的时候,可以通过IDLE通过dir,help来查询使用方法 |
2)Python的优缺点
优点
简单易学,上手快
有丰富的库,便于调用
可扩展、可嵌入(嵌入C语言来优化)
免费开源、可移植
解释性语言(不需要事先编译)
面向对象、高层
缺点
运行效率略低
多线程支持欠佳
商业支持不足
代码不能加密(既是缺点又是优点)
无类型
3)Python的注释
单行注释 #
多行注释 """ 注释内容 """
注释快捷键 ctrl+/ (部分其他语言也适用)
4)内置函数(后有介绍~)
0x01 Python变量
1. 变量阐述
计算机的核心是CPU,程序运行在内存(内部存储器),变量在内存就像一个仓库,存储着各种各样数据的仓库,我们通过变量可以找到相应数据。 我们把变量比作一个盒子,里面存放着各种各样的数据(可存可改可读可写)。例如: a=10我们可以通过id(a)来查询a这个变量现在所在的位置。由于一个变量一次只能对应一个数值;而一个数值可以同时赋值给多个变量,所有我们以‘标签理论’来解释变量赋值这个问题(变量就像给数值贴标签)。 Python一切皆对象,首先我们来看:First:>>> list1=['a','b','c']>>> list2=list1>>> list2 ['a', 'b', 'c']>>> list1.append('d')>>> list2 ['a', 'b', 'c', 'd']>>> id(list1) 60660272>>> id(list2) 60660272
通过以上代码我们可以知道,变量 list1和 list2所对应的数值内随添加了 ‘d ’这个对象,但所对应的列表对象本身是没有改变的,所以我们列表['a','b','c']所对应的标签仍然是变量 list1 和 list2。
Second:>>> num1=1>>> id(num1) 2064409776>>> num2=num1>>> id(num2) 2064409776>>> num1=2>>> num2 1>>> id(num1) 2064409792 ===》边界位256(最后一个固定id的数,257的id随机)
通过以上代码,我们可以发现,num1=1 && num2=num1 时,num1和num2都被贴到了 1 上,但在num1的值改变时,num2未改变num1和num2对应的id和值都不同了。见下图:
以上两个是不同的:
①First中的list1这个大的对象里面包含很多不同类型的对象,所以再追加进其他对象后,不影响整个数组对象,list1和list2的id是不变的,二者内容也是相同的
②Second中的对象是1,但后面修改了num1的值,也就修改了其对象,但num2的值仍然是1,不受num1影响,二者内容不同,且num1的id改变了
2. 命名规则(Python的关键字,不可作为命名)==》关键字=保留字
>>> import keyword>>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
命名规则:小写_下划线_小写(除了类用大写开头)
3. 运算符优先级:(运算符部分和其他语言类似)
0x02 Python流程控制
1. 顺序结构
即程序按照其运行顺序和运算符优先级的顺序进行执行
2. 分支结构(选择结构)
即 if ,有条件为真和条件为假两种运算方式。
3. 循环结构
即 for 和 while 。for循环可以遍历任何序列的函数;while是当满足条件就可以一直执行。
4.其他语句
· break : 用于结束整个循环(类似于这个循环崩坏,结束循环)
· continue :结束本次循环(会继续运行下一次,相当于跳过这次循环)
· pass : 相当于占位符,什么都不执行(在待修改的程序框架中,可先用pass占位符占位,以免程序出错)
· else : 一般和 if 一起使用,选取满足条件时锁执行的代码块
0x03 Python字符串
1. 字符串定义 :
字符串是一种文本数据类型 ==》 单引号,双引号,三引号(在赋值时,三引号表示字符串)
2. 字符串运算符:
3. 字符串运算符的使用
>>> print("我好喜欢你%s"%'佳儿') ==》%s表示输出的是字符串我好喜欢你佳儿>>> print('你体重是%10.3f'%52.1314) ==》%10.3f 表示输出数值范围为小数点前十位后三位你体重是 52.131>>> print(r'I\nlove you') ==》r'I\nlove you' 中的 r 表示输出的是原始字符串I\nlove you
4. 字符串的切片
切片:(正常切片不能获取到end位置的值)a[start:stop[:step]] ===> 左闭右开(闭包)>>> a['abcds']>>> a[::-1]'sdcba'>>> a[::1]'abcds'
5. 字符串内置函数
①find() 描述
find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1。
语法
find()方法语法:
str.find(str, beg=0, end=len(string))
参数
· str -- 指定检索的字符串
· beg -- 开始索引,默认为0。
· end -- 结束索引,默认为字符串的长度。
返回值
如果包含子字符串返回开始的索引值,否则返回-1。 str.find(str,[beg[,end]]) ===> beg指的是索引,默认为0;end是结束索引,默认为字符串长度str.find('loveyou') ===> 'loveyou'.find('l') ===>0>>> 'abcdefg'.find('a',2,5) -1>>> 'abcdefg'.find('c',2,5) 2重载:使用不同参数得到不同结果>>> 'abcdefcccg'.find('c',2,5)2
②count() 描述
count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
语法
count()方法语法:
str.count(sub, start= 0,end=len(string))
参数
· sub -- 搜索的子字符串
· start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
· end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
返回值
该方法返回子字符串在字符串中出现的次数。
str.count(str,[beg[,end]])>>> 'abcdesssscccfg'.count('c',2,15)4
③replace()描述
replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
语法
replace()方法语法:
str.replace(old, new[, max])
参数
· old -- 将被替换的子字符串。
· new -- 新字符串,用于替换old子字符串。
· max -- 可选字符串, 替换不超过 max 次
返回值
返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。
str.replace(str,str[,max])>>> 'abcdesssscccfg'.replace('ccc','g')'abcdessssgfg'
④split()描述
split() 通过指定分隔符对字符串进行切片,若第二个参数 num 有指定值,则分割为 num+1 个子字符串。
语法
split() 方法语法:
str.split(str="", num=string.count(str))
参数
· str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
· num -- 分割次数。默认为 -1, 即分隔所有。
返回值
返回分割后的字符串列表。
str.aplit(str="",num=string.count(str)) ==> 字符串切片变成列表>>> 'abcdesssscccfg'.split('c',5)['ab', 'dessss', '', '', 'fg']
⑤strip() 描述
strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
语法
strip()方法语法:
str.strip([chars]);
参数
· chars -- 移除字符串头尾指定的字符序列。
返回值
返回移除字符串头尾指定的字符序列生成的新字符串。
str.strip([chars]) ==> 清除左右的字符str.lstrip([chars])str.rstrip([chars])>>> ' abcdes ssscccf g '.strip()'abcdes ssscccf g'
6. 字符串运算符
0x04 Python四种基本类型
1. 数据类型:
数据结构:相互之间存在一种或多种特定关系的数据或元素的结合。数据按照某种特定的结构存储。
· 列表:有序可变(增删改查) ===》 list[] 从0开始编号
增加方法有:insert 任意位置插入;append 在尾部追加;extend 列表拼接(a.extend([5,6,8,9]))
删除方法有:pop 将列表中的数据弹出并删除;remove 将列表中指定的数据删除,不显示出来
修改方法有:index 通过索引来进行修改
查询方法有:in 和 not in
排序方法有:sort方法是列表的元素按照特定的顺序排列;reverse方法是将列表逆置
· 元组:有序不可变(查) ===》 tuple()
· 集 合:无序唯一可变 ===》set{} 交集,补集 ,下标从零开始
在set中set.pop()内存储的是字符串的时候,随机弹出删除,存储的是元组或者列表,先排序在从左到右依次删除
(1, 2, 3, 4, 5, 6)>>> b.count(1)1>>> b.index(2)1
· 字典:无序可变 ===》 dict(key,value) {‘ ’:‘ ’;‘ ’:‘ ’}
键值对 ==》get一个不存在的,返回空;输出一个不存在的值,报错
info['id'] 查id ===> 可用于修改值
删除元素:pop(根据key值删除字典重点的元素);clear(清空字典中的数据,字典还在,元素没了)
keys(输出所有key)/values(输出所有value)/items(输出所有键值对)
>>> c={'a','b','c','d','e'}>>> c.add('f')>>> c{'e', 'c', 'd', 'a', 'f', 'b'}>>> c.pop() 'e'{'d', 'a', 'love', 'f', 'b'}>>> c.discard(1)>>> c{'a', 'love', 'f', 'b'}>>> d={'1','2'}>>> c.union(d){'love', 'f', '1', '2', 'b', 'a'}>>> c.difference(d){'f', 'b', 'a', 'love'}
2. Python字典包含了以下内置函数:
0x05 Python函数
1. 函数:
函数是组织好的、可重复使用的,用于解决代码重复性问题。(定义函数关键字是def)
def print_info():函数体fn() #调用函数
2. 不定长参数
有时可能需要一个函数能处理比声明时更多的参数,这些参数叫不定长参数,声明时不会命名
一个星号表示列表型的;两个星号表示键值对的
def functionname([formal_args,]*args,**kwargs):"函数——文档字符串"function_suitereturn[expression] #函数的返回值:return def test(a, b, *args):print(a)print(b)print(args)test(1,2,4,5,6)
3. 根据函数的参数和返回值,函数可以分为四种类型:
①无参数,无返回值的函数
②无参数,有返回值的函数
③有参数,无返回值的函数
④有参数,有返回值的函数
4.变量的作用域:
· 为避免变量名称发送冲突,所有python引入了命名空间的概念。
· 命名空间指的是名称到对象的映射,类似于字典,键名是变量的名称,值是变量的值
· 内部要改变全局变量,要global声明
· 闭包:函数内部包含一个函数,函数用函数的数据==》闭包函数--nonlocal(用外面的数据)
#nonlocal闭包函数def outer():num = 10def inner():nonlocal num # nonlocal关键字声明num = 100 print(num)inner()print(num)outer()
· 递归函数:函数自己调用自己
· 匿名函数:函数功能简短就可以使用匿名函数(可能只是用一次就不用了)
匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要声明匿名函数,则需要使用lambda关键字 ===》
lambda[arg1[,arg2,...,argn]]:expressing
奉上所有python的学习资料(视频和编程语言api文档的链接),后台回复“python学习包”,即可获得啦~~~