初学基础python记录
1.对于python来说,最重要的就是缩进。相当于其他语言的{}中括号。
2.转义快捷等 alt+p和alt+n来复制上下一行。变量使用时得先赋值,且大小写敏感,遵循变量命名规则。Python还允许用r''
表示''
内部的字符串默认不转义。Python允许用'''...'''
的格式表示多行内容。
3.在程序前面可以导入模块:import 模块。import random
4.运算优先级 int()强制转换成int,float()强制转换成浮点,str()强制转换成字符串类型。在python中/是实际的除法。//是老式除法(int // int 得到的还是int),**是幂运算 3 ** 2 = 3的2次方,幂运算的优先级,跟—号时,-3 ** 2 = -(3**2),3 ** -2 = (3)的-2次幂
5.python三元操作符,x if 条件 else y 。当条件为真的时候,取x,当条件为假的时候取y。small = x if x>y else y。
6.assert 断言关键字。当这个关键字后面的条件为假时,程序就会自动抛出AssertError异常。
7.for循环:语法: for 目标 in 表达式: range()函数:语法:range([start,]end[,step=1])。表示从一个数到另一个的数字序列,默认步长为step=1,从0开始。
循环体
while循环:语法 :while 条件:
循环体
注:python没有do~while循环语句,是用while(无限循环)+break来代替。
8.列表:语句:list[a,2]。把任何数据类型的的放在一起(打了激素的数组)。append函数:列表名.append(待添加的元素),这个只能加一个附加的意思,如果里面添加的是列表的话,就是一个列表作为主列表的子元素。extend函数:列表名.extend([多个元素])。能添加多个元素进去,只要是弄成一个列表一起添加进去是扩展的意思。insert函数:列表名.insert(位置,元素),在指定位置插入一个元素到列表里面去,如果里面添加的是列表的话,就是一个列表作为主列表的子元素,元素相应的右移动。remove函数:你列表.remove(元素名),移除列表中的元素。也可以用del函数:del (列表[索引])删除。pop方法:pop(索引) ,返回从列表中删除的元素,有返回值,默认从最后一个元素开始。index方法:index(元素名),返回该元素的索引。count函数:count(元素),计算列表中元素的个数。reverse()函数:对列表逆序。sort(func,key,reverse)函数:对列表排序,前两个参数默认,后面是否逆序,是没有返回值的,用内置函数sorted()可以排序任何,返回一个以列表为容器的返回值。对列表复制一定要列表[:]
9.元组:语句:tuple(1,数据),上了枷锁的列表,元组是不可以变的,可以添加。添加:temp=temp[:2]+("数据",)+temp[2:],就是拆开了插进去。
10.字符串:字符串的切割:string.split(','):就是以,来切割这个字符串。字符串可以当做一个列表一样来经过索引取值str[2:3]。
11.序列:list()把一个可迭代对象转化成列表: a = list()。tuple()把一个可迭代对象转换成元祖:b = tuple()。max()返回序列或者集合中的最大值。成员资格操作符in not in 可以看一个对象是否在列表中
12.函数:语法:def functionname(parameter): 函数体, 参数的初始化:def functionname(parameter=初始值):函数体,收集参数:def functionname(*parameter,exp):函数体,就是把一组参数放在列表里面,如果是跟其他参数混用的话,在使用的时候要用关键字。用的时候可以直接输入多个参数如:def functionname(1,"哈哈",exp=1):函数体。函数文档:functionname.__doc__。对函数进行介绍,在后面时候某个陌生函数时可以这样来看这个函数的意义。函数(function)有返回值,过程(prodedure)没有返回值。
内嵌函数和闭包:在一个函数里面再定义一个函数就叫内嵌函数,这个内嵌函数只能在主函数里面调用,内部函数对他所在的空间(上一级函数)的变量进行 了引用就叫做闭包。对局部变量修改时就会屏蔽全局变量。
推导式:
- 列表推导式:
13.lambda表达式:对函数进行简单话的表示。定义:名称 = lambda 参数 : 函数内容,g = lambda x,y : 2*x + 1+y。
filter函数:定义:过滤出条件需要的元素来,filter(条件(真),范围),list(filter(lambda x : x%2,range(10))) = [1,3,5,7,9] .
map函数: 定义: 映射范围内的每一个元素,将范围中的每一个元素都带到条件中去运算。map(条件,范围),list(map(lambda x : x*2,range(10))) = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
reduce函数:定义:将范围内的元素累加。reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])=15
zip函数:zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。zip((x,y,z),(1,2,3)) = [(x,1),(y,2),(z,3)]
14.递归:函数调用自身,且有一个明确的返回值来停止这个调用。递归递归,归去来兮,分治思想——汉诺塔问题
15.字典:映射类型,定义:dictionary = {‘2’:‘货’,2:‘倍’,3:'快闪'}。应用的时候,直接输入前面的名称,如 dictionary['2'] = 货。使用工程函数dict()时,在后面赋值,第一种:里面是列表或者元组,dictionary1 = dict(((key,value),(key,value))),第二种:直接关键字=值,dictionary2 = dict(key = 'value',key = 'value')
内建函数:dictionary.fromkeys(s[,v]):通过对已经存在字典通过关键字来创建一个新的字典,dictionary.fromkeys((2,1),num) = {2:num,1:num}
dictionary.keys():取出字典的全部key,dictionary.values():取出字典的全部值。dictionary.items():取出字典的所有项。
dictionary.get(key,'错误时返回的内容'):通过key获得字典的value,如果不存在就打印后面的出来。dictionary.clear():清空字典包括内存。
dictionary.copy():不同于=,是全拷贝,重新分配内存。ditionary.pop(key):通过key来返回相应的values。
dictionary.popitem():无参数,返回随机的一组项.dictionary.setdefault(key[,val]):通过key加入一个项,后面参数可选,位置随机
dict1.update(dict2):用dict2去更新dict1,如果有重合的key,则更新values,没有重合则添加进去。
16.集合:在{}中不存在映射关系的类型。{1,3,2},集合里面的元素都是唯一的,但是是无序的。内建函数:a =set(元素),集合.add()添加,集合.remove()移除,a = frozenset(元素)得到一个不可变的集合
17.文件:打开文件open(‘路径’,mode='打开模式rt'),其他参数可以默认。文件的打开模式:
文件对象方法:
18.模块1:OS(文件操作系统):
19.模块2:pickle(泡菜坛子):import pickle 通过模块写入:pickle.dump('源文件','打开的文件'),打开文件要用f = open('dir','wb'):二进制读写模式。
通过模块读出,pickle.load('打开的文件'),打开文件要用f = open('dir','rb')。
20.异常:
try: 程序主体 except Exception[as name]: 出现异常(Exception)时应该处理的代码
try: 程序主体 except Exception[ as reason]: 出现异常(Exception)时应该处理的代码 finally: 始终会执行的代码
finally用在必须要做的语句,比如文件打开了就要关掉。try中出现异常,程序会去except中找处理异常,异常处理完毕,控制流就通过整个try语句
主动引出异常:raise Exception(‘某种异常’)
21:else跟with:else可以跟在多个语句,如while ,for,if 等后面来表示另一种情况:
def is_susu(number): number = int(number) count = number//2 while count>1: if number%count == 0: print("最大约数是%d"%count) break count -= 1 else: print("这个数是素数")
with语句一般用在一些事先需要设置,后面需要清理的工作。如文件的操作:
try: with open('something.txt') as f: except TypeError as reason: print('出错啦,错误是' + str(reason))
22.easygui:就是python的一个图形用户界面模块。使用时引用进来:
import essygui as g
对于所有函数而言,前面两个参数是,消息跟标题。还可以使用关键字参数大。中文版详解
23.对象。00:obeject oriented 面相对象。封装,继承,多态。封装:对外部隐藏工作细节。继承:子类自动共享父类之间的数据和方法的机制。如继承到list,那么在实例化得到的结果就可以用list的属性。多态:在不的类中可以用同一个名称。 __init__()方法不应该返回除了None之外的任何对象
OOP:面向对象编程 OOA:面向对象分析 OOD:面相对象设计
在python中只要在变量或者函数的名字前面加上'__'那么这个变量就会从公有变成私有的了,不过是伪私有的,可以用__类__变量名来访问
类:
继承: class sonclass(fartherclass),外面的子类会继承括号里面的父类。注意:如果子类定义与父类重名的方法、变量,则会自动覆盖父类的
当在子类中要重写父类的方法时(一般是__init__()),可以引用父类未绑定的方法,或者使用super()即super().__init__() (推荐用这个)
使用super()能有效避免多重继承带来的菱形继承(python通过c3算法来改变miro)
多重继承: class Childclass(Parentrclass,Parentrclass1,Parentrclass2),尽量避免使用,注意:基类永远出现在派生类后面,如果有多个基类,基类的相对顺序保持不变
组合:把横向关系(没有关系)的几个类实例化组到一个类中。
绑定:在python中要将类实例化了才可以用,这就是绑定的概念。
函数相关的BIF:
issubclass(class,classinfo):如果前面是后面的子类则返回True,类本身是自己的子类,后面的类,可以是元组,元组里面有多个类。
isinstance(object,classinfo):检查前面的这个实例是不是属于后面这个类 hasattr(obeject,name):检查这个实例是不是有后面这个属性,是话返回True
getattr(object,name[,default]):获取一个属性,有的话就返回该属性的值,没有报错(也可以是默认的)
setattr(object,name,value):给实例设置一个属性和值 delattr(obeject,name)删除属性
property(fget = None, fset = None, fdel = None ,doc = None):把类中设置好的属性(方法)设置成一个属性。
24.修饰符:@,解释器读到这一行就把下面的函数或者参数当作修饰符后面的函数或者类的参数,一般用于切片操作:日志插入,性能测试,事务处理等。三个内置修饰符,staticmethod,classmethod,property,把类中定义的实例方法变成静态方法,类方法,属性。
闭包:在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一 组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性
25.魔法方法:前后都加了'__',__init__()方法没有返回值。如果定义的类继承了不可变类型(str等)时,就要对__new__()重写
26.描述符:就是把某种特殊类型的类的实例指派给另一个类的属性
28.定制容器:如果希望定制的容器是不可变的话,只需要定义__len__()和__getitem__()两个方法。
如果定制的容器是可变的话,除了__len__()和__getitem__()还要__setitem__()和__delitem__()方法
29.迭代器:用iter()来获取一个容器的迭代器。再用next()来得到下一个元素。
30.生成器:yield生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束。
就是遇到暂停需时可以从原来的地方继续,生成器是迭代器的一种特殊状态,也是一种特殊函数。
注意:生成器没有办法使用return来返回值。
31.模块:就是更高级的封装,就是程序。容器 -> 数据的封装,函数 -> 对语句的封装,类 -> 方法和属性的封装。
命名空间:使用封装时要先申明命名空间
模块的导入有三种方式:1:import 模块名 2: from 模块名 import 函数名 3:import 模块名 as 别名
32.爬虫:三大库:urllib.request (主要是获取网址的库)、urllib.parse(主要是解析网址的库)、
urllib.request.Request(url,data,header),data可以附带数据是一个dict要先urllib.parse.urlendcode(data).encode('utf-8')才可以用。header带一
个头部到网址中是dict可以隐藏浏览器,也可以是add_header(key,value)。得到的json字符串要通过json.loads解析后才能用。
代理:步骤1:参数是一个字典{'类型':'代理ip:端口号'} :proxy_support =urllib.request.ProxyHandler({})
步骤2:定制、创建一个opener:opener = urllib.request.build_opener(proxy_support)
步骤3:安装opener:urllib.request.install_opener(opener)(可以一直用代理)或者:openr.open(url)(临时特殊用)
33.Scrapy框架:
1.创建一个Scrapy项目 2. 定义item容器:item是用来保存爬到的数据的容器,跟字典类似,但是有特殊的保护机制避免拼写错误导致的未定义字段错误
3.编写爬虫:用于从网站爬取数据的类,包含一个原始的url,已经怎么分析网页链接怎么爬去内容,怎么提取item。
4. 存储容器
Selector选择器:
xpath():传入xpath表达式,返回该表达式所对应的所有节点的selector list
css():传入CSS表达式,返回该表达式所对应的所有节点的selector list
extract():序列化该节点为Unicode字符串并返回List
re():根据传入的正则表达式筛选出数据,返回unicode字符串list列表。