PYTHON学习手册

一、指导方针

指导方针:IDE提示,哪里找,常用模块及命令

  1. Python标准库: 如builtins、math、datetime
  2. 菜鸟教程查用法
  3. IDE:自动补全tab、函数用法
  4. 命令行dir(builtins):查看库/类下所有的类、函数/方法和属性
  5. 命令行help(abs):查看库的说明、函数的使用、变量的操作
    关于dir和help的作用:分析 ('list' and 'len') in dir(builtins)和help(builtins.list)和help(builtins.len)

二、语法与常用库

(1)基础语法

a、数据类型、函数、面向对象

  1. 数字:3e-2,1+2j,常量pi,e
  2. 字符串、列表、元组:变量[头下标:尾下标:步长](ps:左闭右开)
  3. a=[]/{}/()/set();type(a):list/dir/tuple/set
  4. tuple的元素不能修改,但也可以*+
  5. list/dir/tuple/set推导式: []/{}/tuple()/{}
  6. isinstance()会认为子类是一种父类类型;type()不会认为子类是一种父类类型;
    isinstance(True, int)为True;
    type(True)==int为False
  7. 运算符:/,%,//;&,^,<<(位运算符把数字看作二进制来进行计算,集合运算);and,or,not逻辑运算符;in,not in成员运算符返回bool值;is,not is身份运算符
  8. is: 判断两个变量内存地址id是否一样。只有数值型和字符串型,并且在通用对象池中的情况下,a is b才为True;否则当a和b是int、str、tuple、list、dict或set型时,a is b均为False1
  1. ==: 判断两个变量的值是否相等。其中True为1,False为0.
  2. 函数的参数:必选参数,默认参数,*args可变参数tuple(调用时,在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去),**kw关键字参数,*,name1,name2命名关键字参数。
  3. 类:属性(类变量、实例变量:__init__里的self.变量名) 类变量定义在“类里方法外”的变量,是该类所有实例共享的变量,但是实例对象只能访问、不可修改类变量,类变量只能通过[类名.类变量名]进行修改,每个实例对象去访问同一个类变量[实例名.类变量名]都将得到相同结果。通过对象名引用变量,会先找有没有这个同名的实例变量,如果没有,引用到的才是类变量)和方法(类的方法第一个参数必须self‘或任意名字’,代表类的实例,而非类)、继承(多个基类、方法重写),私有属性和方法(双下划线开头,只能在类的内部使用),专有方法(双下划线开头结尾,魔术方法)
  4. if __name__ == '__main__':使该模块被另一个程序第一次引入时,其主程序不运行

b、语句

  1. assert语句2assert expression,不满足条件则直接触发异常,不必执行接下来的代码
  1. print语句:print(“%.2f”%(3.333))和print(“{:<8d.2f}”.format())
  2. break 语句: 可以跳出for和while的循环体且循环语句的else子句也不执行。
  3. del:删除
  4. lambda语句(匿名函数):lambda: [arg1[,argn]]:expression
  5. try:执行代码 except:发生任何异常时执行的代码 else:没有发生任何异常时执行的代码 finally:无论是否发生异常都将执行的代码
  6. with关键字系统会自动调用f.close()方法, with的作用等效于文件处理中的try/finally语句with open('./test_runoob.txt') as f: read_data = f.read()

(2)常用库

  1. os模块:chdir,getcwd,listdir,os.path模块(主要用于获取文件的属性:abspath,basename,dirname,join,split)
    functionusage
    os.getcwd()获取当前工作目录,也就是在哪个目录下运行这个程序
    os.path.abspath("train.py“)获取train.py这个文件的绝对路径
    os.path.abspath(__file__)只有当脚本执行时,获取当前脚本的完整路径
  2. builtins模块:里面有内置函数3,不需要写成builtins.function(),可直接使用。如len()\help()\dir()\list\dict\set\tuple
  1. keyword模块:包含对python关键字(如assert、break、global、nonlocal)进行操作的函数
  2. 内置模块的str类: capitalize,count,find,is系列如islower,join,len,lower,max,replace,split,swapcase,title,upper
  3. 内置模块的list类: list,append,count,index,remove,sort
  4. 内置模块的dict类:items(和item的区别),keys,values
  5. 内置模块的set类: add,update,remove
  6. math模块:ceil,fabs,modf,round,acos,degrees
  7. random模块: random,seed,shuffle,uniform
  8. copy模块:copy
  9. 内置io模块:open函数(r,w,a)返回TextIOWrapper修饰器,里面包含read,readline,write,close
  10. datetime模块:date.today
  11. typing模块:自带弱类型注解(type hints),如long,int,float,bool,str,list,tuple等:s: str = ‘abc’; def add(a: int=0) -> int。引入typing模块进行强类型注解,如List,Set,Iterator,Any,NoReturn,Sequence,Union等:def func(a: int, string: str) -> Union[int, str, [int, float]]
  12. re(正则表达式)4:compile,match(只匹配字符串的开始)/search(扫描整个字符串并返回第一个成功的匹配)/findall(以列表形式返回整个字符串中所有成功的匹配)/finditer(以迭代器形式返回整个字符串中所有成功的匹配),sub(将匹配到的数据进⾏替换,返回替换后的字符串)/subn(返回替换后的字符串和替换次数组成的元组),split(根据匹配进⾏切割字符串,并返回⼀个列表),参数细节
    (1)匹配单个字符: .(任意字符),[](里面列举的字符), [^](不在[]里面列举的字符),\d(数字),\s(空格),\w(字母数字下划线)。大写
    import re
    # re.match(正则表达式,字符串,标志位),从起始位置开始匹配,匹配失败返回none,成功返回一个匹配的对象,re.I表示忽略大小写
    result1 = re.match(".[hH]i[4-9]\d0\wbC","$Hi520abc123",flags=re.I)# result1为:<re.Match object; span=(0, 8), match='$Hi520abc'>
    result1.group()#使⽤group⽅法来提取数据: '$Hi520abc'
    
    (2)匹配多个字符(针对前一个\w字符或()分组): *(匹配可有可无),+(匹配至少1次),?(匹配0或1次),{m}(匹配m次),{m,n}(匹配m~n次)
    #匹配出⼀个字符串:该字符串的第⼀个字⺟为⼤写字符,后⾯都是⼩写字⺟并且这些⼩写字⺟可有可⽆
    re.match("[A-Z][a-z]*","AabcdeF")# <re.Match object; span=(0, 6), match='Aabcde'>
    
    #匹配出有效的变量名:字母或下划线开头,其后为字母数字或下划线
    [re.match("[a-zA-Z_]+[\w]*",name) for name in ["name1", "_name", "2_name", "__name__"]]
    # 输出:[<re.Match object; span=(0, 5), match='name1'>,
    #		 <re.Match object; span=(0, 5), match='_name'>,
    #		 None,
    #		 <re.Match object; span=(0, 8), match='__name__'>]
    
    (3)匹配开头和结尾: ^(匹配字符串开头),$(匹配字符串结尾)
    #匹配地址是163.com的邮箱:
    [re.match("[\w]{4,20}@163\.com$", email) for email in ["xiaoWang@163.comhi","xiaowang@qq.com","xiaoWang@163.com"]]
    # 输出:[None, None, <re.Match object; span=(0, 16), match='xiaoWang@163.com'>]
    
    (4)匹配分组: |(匹配左右任意⼀个表达式),()(将括号内字符串作为⼀个分组),\num(引⽤分组num匹配到的字符串),(?P<name>)和(?P=name)组合使用(前者用于给分组起别名,后者引⽤别名为name的分组匹配到的字符串)
    #匹配出0-100之间的数字:
    [re.match("[1-9]?\d$|100", number) for number in ["12","01","100"]]
    # 输出:[<re.Match object; span=(0, 2), match='12'>,
    #		 None,
    #		 <re.Match object; span=(0, 3), match='100'>]
    
    #匹配地址是163、126、qq.com的邮箱:
    [re.match("[\w]{4,20}@(163|126|qq)\.com$", email) for email in ["test@163.com","test@gmail.com","test@qq.com"]]
    # 输出:[<re.Match object; span=(0, 12), match='test@163.com'>,
    #		 None,
    #		 <re.Match object; span=(0, 15), match='test@qq.com'>]
    
    #使⽤group⽅法来提取数据,使用group(num) 或 groups() 来获取匹配到的内容,num的值为0~(正则表达式中()的数目,即分组数)
    #提取区号和电话号码
    ret = re.match("([^-]*)-(\d+)","010-12345678")#[^]表示不在[]里面列举的字符,^相当于取反操作
    print(ret.group())#等价print(ret.group(0)),输出:010-12345678
    print(ret.group(1))#输出:010
    print(ret.group(2))#输出:12345678
    print(ret.groups())#输出:('010', '12345678')
    
    #\num的使用:匹配出 <html><h1>www<h1><html>。下面的\1和\2分别代表第一个分组()和第二个分组()的内容
    [re.match(r"<(\w*)><(\w*)>.*<\2><\1>", str) for str in["<html><h1>www<h2><html>","<html><h1>www<h1><html>"]]
    #输出:[None, <re.Match object; span=(0, 23), match='<html><h1>www<h1><html>'>]
    
    #(?P\<name>)和(?P=name)的使用:匹配出 <html><h1>www<h1><html>。一个用于标记,一个用于在同一个正则表达式中复用
    re.match(r"<(?P<分组1>\w*)><(?P<分组2>\w*)>.*<(?P=分组2)><(?P=分组1)>", "<html><h1>www<h1><html>")
    #输出:<re.Match object; span=(0, 23), match='<html><h1>www<h1><html>'>
    

三、修复bug

  1. vscode中.py文件运行时os.getcwd()获取当前工作目录,而调试时获取当前工程目录。所以调试时加一行: os.chdir('./工程下的工作目录')
  2. 语法错误(SyntaxError)和异常(运行期检测到的错误,以不同的类型出现)

四、插件拓展

  1. ctrl+shift+p:调出命令板(vscode自带命令和插件扩展命令,也可以修改命令快捷键)
  2. vscode用markdown编辑时,插入粘贴板的图片:ctrl+alt+v或先ctrl+shift+p再paste image(利用了paste image插件)

五、记忆卡片

1.数字和常数
2.切片
3.空列表、集合、元组、字典
4.哪个元素不可修改
5.推导式
6.判断类型
7.运算符:算术、位、集合、逻辑
8.in, is, ==
9.ctrl+shift+p, ctrl+alt+v

1、函数的参数
2、类的属性/方法,继承; 魔术方法
3、只在当前模块运行: name
4、assert, print, break,else, del,raise
5、lambda, try, except, else, finally,with
6、global,nonlocal,end
7、SyntaxError和异常

1、builtins:len,help,dir,open(r,w,a),class list/tuple/str
  TextIOWrapper: read,readline,write,close
  str: capitalize,count,find,islower,join,max,
    replace,split,title,upper,lower
  list: append,count,index,remove,sort
  dict: keys,values,item
  set: add,update,remove
2、os: chdir,getcwd,listdir;
  path.abspath,basename,dirname,join,split
3、math: ceil,modf,fabs,round,acos,degree
4、random: random,seed,shuffle,uniform
5、copy: copy,deepcopy
6、datetime: date.today
7、typing:long,int,float,bool,str,list,tuple;List,Set,Iterator,Any,NoReturn,Sequence,Union


  1. https://www.cnblogs.com/CheeseZH/p/5260560.html ↩︎

  2. https://blog.csdn.net/qq_38973721/article/details/105813603 ↩︎

  3. https://docs.python.org/zh-cn/3.7/library/functions.html ↩︎

  4. https://blog.csdn.net/guo_qingxia/article/details/113979135 ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值