python语言特点
Repetition is the mother of all learning重复是学习之母。
** 易于上手,难于精通。注重格式的语言,它的设计哲学:优雅、明确、简单。最主要的是开源。
不需要强制的分号,不需要强制的花括号,利用缩进(四个空格)来表示结构,python没有switch可以用字典或elif来替代。
常见错误提示:indentasionError就是错误的缩进引起的。
断行或续行\或()。
开发环境:IDE,集成开发环境
thonny,thonny.org下载
pycharm、
jupyter notebook、
vscod
变量与运算符
- 命名规则: 不能使用数字开头,可以使用字母、下划线
- 名称要有意义
- 不能使用系统关键字;
- 区分大小写,建议两个单词之间用下划线连接。
- 变量类型
值类型(不可改变):int 、str、tuple(序列)
字符串占位,%d,%s。
字符串方法:find(),split(),join()
引用类型(可改变):list、set、dict
列表与元组:元组不可改变,列表可改变(重写)
列表的方法:增、删、改、查
python里没有真正意义上的常量,形式上的常量建议用大写字母来表示。
3.运算符
算术运算符:**乘方
赋值运算:没有自加(++)、自减(--)
关系(比较)运算:结果产生一个布尔值;列表或元组进行比较时,当一样多元素时比较后面的。
逻辑运算(and 与、or或 、not非):比较和结果都是bool类型的,int float类型0被认为是false,其它的非空被认为是true。
成员运算:in; not in
身份运算:is ; is not;isinstance;对象的三个特征:id,value,type
位运算符:把其他进制的数当作二进制的数运算。按位与& |
分支、循环、条件、枚举
表达式,是由运算符和操作数组成的序列
and 运算符优先级高于or,not > and >or, 同级运算从左到右执行(左结合),有赋值运算符(=)的是右结合,逻辑运算符优先级最低。
IDE (集成开发环境):pycharm、vscode、sublime,
使用IDE优势:智能感知;断点调试。
包、函数、循环、作用域
循环:while、for
while的条件不能是个常量,在递归条件下可以使用while。
for循环用于遍历或循环序列、集合或字典。end = ‘’不换行。continue终止一个然后继续。for in遍历。
rang()生成器,三个参数要以设置起始值和步长。
编程的追求:高性能、封装(可复用)、抽象
python是用包和模块组织它的项目的。
包,文件夹,必须包含一个init.py文件,可以批量导入,可以好好利用。
模块,文件
- 类 一个模块定义一个类
函数
变量
命名空间:包.模块,如seven.c6,在模块中可以定义和实例化类。
引入模块要注意:入口文件只可执行一次;避免循环导入
- import 模块 as 重新命的名字;
- from module import 变量/ *
-- all模块的内置变量 ,可以定义导入的具体变量--
.pyc是python解释文件,建议每行代码个数不超过80个,如果想要换行的话可以在想要换行的后面加上一个\或者利用括号强行换行。
函数
round(number,digits),number是小数,digits要保留的位数,可以执行四舍五入。
作用:
1.功能性
2.隐藏细节
3.避免重复
文件IO
open(filename,mode)文件操作,mode分为r/w。
seek\close\write
定义
函数:def functionname(参数1,参数2),解释型语言先定义后调用,调用时直接用函数名(参数)的形式。
help(函数)查看内置函数
1.必须参数
2.关键字参数,在调用时明确把变量指定给哪个参数
3.默认参数,将默认值赋给形参。
调用
定义完之后要调用。
python之禅,import this
掌握好函数参数运用是学好函数的一个重要途径。
return返回值:
- 有返回值(return),可以返回多个值,中间用逗号隔开,遇到return函数终止,后面的语-句是不会被执行的。
- 没有return
- 默认return None。
序列解包:给两个以上变量同时赋值,接收返回值时要用有意义的名称。
a = 1
b = 2
c = 3
a,b,c = 1,2,3
参数
形参、实参
- 必须参数
- 关键字参数
- 默认参数
args代表任意个参数,*KW代表关键字参数。
可以明确指定参数赋值给哪个参数,必须传递的参数与默认参数不能交叉存放,比如(name,teache,age = 18,school = "小学')
面向对象
类(class)
定义
类是现实世界或思维世界中的实体在计算机中的反应。
类将数据和数据的操作封装在一起,包括行为(方法)与特征(数据成员),类的最基本作用就是封装代码。
封装变量、函数,一个模块里可以编写多个类,类里编写函数必须加一个参数self,类只负责去描述或刻画,不负责去执行,执行要放在类的外面。
类就像是一个模板,它可以产生很多个对象。
1.数据(变量)
局部变量不会覆盖全局变量,局部变量作用域就在函数内部。
global(全局变量)关键字。
- 类变量
- 参数,
想使用类变量就需要用 “self.变量名”来调用。self参数代表就是实例,而不是类。
dict、all、class类是python内部变量,先在实例变量中找,然后在类中寻找同名变量。
可以通过class函数在实例方法中访问类变量
2.方法(函数)
方法与函数区别:方法是设计方面的一个说法,是面向对象的一个概念;函数是面向过程的一概念。没必要严格区分。
- 实例方法。
init(self)
实例方法的最大特点就是它的第一个参数必须是self ,与实例相关联的方法。
构造函数可以看作一个特殊的实例方法。
在实例方法中访问类变量的方法是self后面加一个class内置函数。 - 类方法
@classmethod增加一个装饰器
def 方法名(cls)
类方法的主要作用就是用来操作和类相关的变量。对象也可以调用类方法,但不建议这么做。
-静态方法
@stadicmethod装饰器
3.构造函数
init(self):不能强制返回一个特定的值,只能返回一个None。
作用
就是让你的模板生成不同的对象,初始化对象的特征,它是一个特殊的实例方法。
当你实例化一个对象时,它会自动调用你的构造函数。
一般是初始化对象的特征。
类实例化(对象)
实例化以后就是对象,一个类可以产生多个对象,类就像一个模板。
变量 =类名()
4.成员(变量和方法)的可见性
类变量的更改不应该通过直接访问该类的变量形式,而是通过方法来改变。
public公开的
private私有的,加双下划线__
python可以通过点的形式为实例动态添加一个新变量。
面向对象的三大特性
- 继承性:避免重复的对象和重复的方法,子类可以直接继承父类的类变量。子类调用父类时self参数也需要传递,实例化时不需要传递self,不推荐子类调用父类的方法。开闭原则
super关键字:可以指代父类,既可以调用构造函数也可以调用普通方法;子类方法可以与父类方法同名,优先调用子类的方法。
-
封装性
-
多态性
正则表达式与JSON 、xml
- 正则表达式
特殊的字符系列,帮助我们检测一个字符串是否与我们设定的相匹配,快速检索或替换文本,由元字符和普通字符表示。
import re导入模块
正则表达式的灵魂在于规则,常用于爬虫和数据处理。
元字符(概括字符集):“\d”表示数字,“\D”表示非数字;\w单词字符,\W非单词字符;\s空白字符,\S非空白字符。
字符集:[]出现在中括号里的字符是或关系,^表示取反操作。a-f,-表示范围。
匹配单词:[字母]{3,6},用花括号表示数量。默认是贪婪(尽量选择大数)模式。非贪婪模式,非贪婪模式是在数字后面加?问号。
数量界定:*匹配0次至无限多次+匹配1次至无数次;?匹配0次或1次。
边界匹配:首尾加上^ &;
括号():表示组,小括号内部表示且关系,只取括号内的字符。
第三个参数(flag):匹配模式分re.I(忽略大小写)、re.S(匹配所有符号),点号匹配除了换行符以外的所有符号。
内置函数:
- re.sub函数可以替换字符串,简单的可以用replace替代,一共包含四个参数,(count)0表示无限次替换。
参数里可以传递函数。 - re.findall('',字符串变量)返回所有符合的字符。
- re.group()方法可以遍历所有字符,将匹配结果返回。0号返回所有组。
- re.groups()
- re.match函数,从字符串首字母开始匹配。
- re.serch函数,搜索整个字符串,直到找到第一个字符串。
JSON
一种轻量级数据交换格式,一种规则、规范,并不是一种语言。{字符串1:字符串2}象是字典,json数据是两种语言中的中间数据类型。
JSON VS 、xml,非常适合跨语言数据交换,也更适合移动开发。
- 易于阅读
- 易于解析
- 传输效率高
import json
内置方法:json.loads()
json序列化:json.dumps()
json对象,在javascript中的叫法;json字符串,符合json格式的字符串。
python的高级语法与用法
枚举
本质上也是一个类,在 类下面定义一个个的常量。大写表示常量。
使用:from enum import enum
1.枚举优势:枚举下面的常量是不可以改变的,对常量有一个保护功能。
获取枚举值.value,名称.name
枚举可以用for循环遍历。
2.比较:不支持大小比较,可以等值比较,可以进行身份比较。
3.注意事项:枚举值是可以相同的,数值相等就相当于另一个别名。
可以用numbers.items()获取标签及值。
intenum可以强制限定枚举的值为数值型。
进阶 函数式编程
开发包和类库并不是所有人都需要,python 一切皆对象。
一般是命令式编程,python也是。
函数式编程,可以使你的代码更简洁。lisp语言是函数式编程的鼻祖。
函数可以赋值给一个变量,也可以作为另一个函数的参数。
过多的使用全局变量是一个非常糟糕的行为。
-
闭包
由函数及在定义时的环境变量组成的一个整体。实质是函数加环境变量,意义在于保存一个现场环境。
局部变量不会影响外部变量的,nonlocal强制声明它不是一个局部变量。
闭包是函数式编程的一种应用,与面向对象式编程是两种不同的思维方式。 -
匿名函数
-
lambda :表达式,冒号后面只能是表达式,不能是代码块。比如不能是 a = x+y这样的。
三元表达式:条件为真时的结果 if 条件表达式 else 为假时结果。
可以赋值给一个变量,然后调用。 -
map类:两个参数,一个function,一个是list。相当于执行一个for循环。
lambda和map,只能让你的代码更加简洁。 -
reduce(lambda,序列,初始值),是一个函数。连续计算,连续调用lambda进行运算。
-
filter过滤(lambda表达式,参数2)
-
装饰器
time 模块,时间戳(总秒数)
开闭原则,对修改是封闭的,对扩展是开放的。体现AOP思想。
语法塘,用@符直接调用,作用是保持代码的完整性,保证调用时的简单。
装饰器参数(args,*kw)。
一个函数可以增加多个装饰器。
一类接口是开放的,一类是受保护的。
urllib内置库,request方法,实例方法要有个self参数。
爬虫
逐步进行数据精确化提取的过程
断点调试
必须要学会断点调试
vscode中按F5单行,F10下一行,F11进入某个函数内部
选择父级标签、闭合标签进行正则表达。
1.正则表达式进行数据筛选
2.数据精炼:strip()python内置函数,去除空格。
3.业务处理:sorted(参数,key=,reversed(倒序))python内置排序函数
rank,下标
两个网站:beautifulsoup、scrpy爬虫网站
注意:爬取数据时容易造成IP被封,只能用代理IP
代码规范化
- 模块注释:多行字符串'''在模块内部写,单行在代码上面写。
- 善于利用空行。
- 行数控制,在5-30行之内。
杂记
- 字典映射代替switch结构,可以用字典的get方法访问,不建议用下标的方式访问字典。
- 列表推导式
[操作(返回值),for循环]
set、dict都可以被推导
遍历字典for需要用两个形参,中间用逗号隔开。
- None,空,不等于空字符串或空列表,不等于False。值和类型都不相同,空本身是一个对象,python一切皆对象。
len(长度)和bool(布尔)方法
网友评论