python学习
存放各种常用python函数库
qq_18891081
这个作者很懒,什么都没留下…
展开
-
python 名称空间和作用域
名称空间:存储变量的内存位置作用域:变量可以产生作用的区域原创 2021-10-08 19:29:20 · 40 阅读 · 0 评论 -
python 文件的一个小操作
从表格里抽取数据,换个方法表示序号 部门 人数 平均年龄 备注1 python 30 26 困难2 Linux 26 30 困难3 运维部 20 24 困难转为{'序号': '1', '部门': 'python', '人数': '30', '平均年龄': '26', '备注':原创 2021-10-07 21:44:27 · 49 阅读 · 0 评论 -
python字典的删除
字典的删除,在循环字典时,删除字典里的数据,是会报错正确的做法是,将删除的键值存在列表中,循环列表,删除字典。mi = {"a": "a", "b": "b"}lst = list(mi.keys())for k in lst: mi.pop(k)print(mi)得到结果{}...原创 2021-10-07 18:34:09 · 412 阅读 · 0 评论 -
python 函数的返回值类型
函数,如果只返回一个元素,则返回值类型为该元素的类型def kk(): return 1print(type(kk()))<class 'int'>但是,如果返回的是多个元素,则返回的类型是元组def kk(): return 1,2,3print(type(kk()))<class 'tuple'>意味着无法对返回的元素进行直接修改。当然,如果没有返回值,则返回None...原创 2021-10-08 14:54:08 · 2933 阅读 · 0 评论 -
python 在函数里对全局变量进行更改
python里,函数无法对全局变量进行直接更改,如果强行更改会报错。a = 3def kk(): a = a + 1 print(a)kk()报错UnboundLocalError: local variable 'a' referenced before assignment此时,使用 global,告诉函数,可以更改全局变量的值a = 3def kk(): global a a = a + 1 print(a)kk()此时函数正原创 2021-10-08 19:51:25 · 3095 阅读 · 0 评论 -
python *和**的区别
*和 **:在形参:聚合,把位置参数聚合成元组,把关键字参数聚合成字典在实参:打散,把可迭代对象转化成位置参数,把字典转化成关键字参数原创 2021-10-08 19:00:07 · 52 阅读 · 0 评论 -
python 闭包
闭包:内层函数使用外层函数的局部变量,不能修改,如果要强行修改,则看在函数里修改全局变量和局部变量闭包的作用:1.让一个变量常驻内存2.保护变量不被修改原创 2021-10-08 20:22:51 · 34 阅读 · 0 评论 -
python 函数名
Python里的函数名的本质是变量名,可以被赋值,也可以给别的变量赋值,做参数传递,做返回值。原创 2021-10-08 20:19:57 · 369 阅读 · 0 评论 -
python里的decode 和 encode
在python里用什么方式编码,就要用什么方式解码。采用的编码方式:utf-8,gdks = "中国"tmp = s.encode('utf-8')tmp1 = tmp.decode('utf-8')原创 2021-10-06 14:29:55 · 71 阅读 · 0 评论 -
python 函数的默认参数的坑
python 函数的默认参数如果是可变数据类型,在以后的操作中,会被共享。def kk(m = []): m.append('www') print(m)kk()kk()输出结果:['www']['www', 'www']原创 2021-10-08 15:27:11 · 46 阅读 · 0 评论 -
python is 和 ==的区别
对于 字符串 和 数字is 和 == 一样 都是判断是否相等对于字典和列表,is 是判断存储的内存地址是否相等"=="是判断存储的内容是否相等原创 2021-10-07 18:47:24 · 53 阅读 · 0 评论 -
python 迭代器
可迭代对象:列表,元组,字符,集合可迭代对象通过 __ iter __ 拿到迭代器 iterator,之后通过__next__完成逐步迭代。lst = [1, 2, 3, 4]it = lst.__iter__()print(it.__next__())print(it.__next__())print(it.__next__())print(it.__next__())打印结果:1234此时,不能再继续到下一个元素不然,会报错。 print(it.__next__(原创 2021-10-09 09:58:25 · 39 阅读 · 0 评论 -
python里列表里的删除问题
在python里,对于元素的删除,不能直接删除,否则会造成删除不干净。例如,删除头部两个字母为12的元素lst = ["123", "1234", "12345", "111", "133", "131423"]for num in lst: if num.startswith("12"): lst.remove(num)print(lst)预期的结果应该是['111', '133', '131423']但是,实际得出的结果是['1234', '111', '13原创 2021-10-07 18:24:03 · 321 阅读 · 0 评论 -
python 文件操作
文件打开f = open(文件地址, mode = 打开方式, encoding= 编码方式)f是句柄,连接程序和文件的桥梁文件地址有绝对地址和相对地址:1.绝对地址,该文件在电脑中存储的位置,例如”C:\Users\DELL\Desktop\test(2).doc“,记得要在地址前加r,表示里面的字符不用转义,防止因为转义字符文件打不开写好后如下所示:f = open(r"C:\Users\DELL\Desktop\test(2).doc", mode = "a", encoding="ut原创 2021-10-07 20:43:17 · 85 阅读 · 0 评论 -
python 装饰器
装饰器:可以在不改变原来代码的基础上,给函数添加新的功能# 装饰器函数def wrapper(f): def inner(): # 装饰函数之前的部分 print("I am the former") #被装饰函数 f() # 装饰函数之后的部分 print(('I am the later')) return innerdef add(): prin原创 2021-10-09 08:31:39 · 57 阅读 · 0 评论 -
python pickle模块
序列化:把对象转化成二进制文件,方便传输存储反序列化:把二进制字节转化为对象利用pickle模块里的函数1.dumps: 把对象(数据)转化为字节import picklelst = [1, 2, 3, 4, 5]# 将lst转为二进制t = pickle.dumps(lst)print(t)输出:b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'2.loads:把字节转为对象(数据)t = b'\x80\x03]q\x00(K\x01K\原创 2021-10-17 20:38:05 · 52 阅读 · 0 评论 -
python 内置函数sort
sort(排序元素,key = 排序规则, reverse = True(从小到大) Fasle(从大到小))lst = [{"id": 1, "name": '盖伦', "age": 18}, {"id": 2, "name": '杰斯', "age": 16}, {"id": 1, "name": '压缩', "age": 19}]# key 是排序的规则制定res = sorted(lst, key=lambda dic: dic["age"], reverse=Tr原创 2021-10-15 21:56:43 · 67 阅读 · 0 评论 -
python 各种推导式
列表推导式的基本语法:[结果 for循环 if条件]lst = [f"k * {i}" for i in range(1, 11) if i % 2 == 1]print(lst)输出:['k * 1', 'k * 3', 'k * 5', 'k * 7', 'k * 9']字典推导式:{key : value for循环 if}lst = ["a", "b", "c"]di = {lst[i] : i for i in range(len(lst))}print(di)输出:{'原创 2021-10-09 12:39:44 · 59 阅读 · 0 评论 -
python 递归深度
import sysprint(sys.getrecursionlimit())输出:1000由此可得默认的最大递归深度为1000但是,在实际操作时,递归深度到不了1000下面测试:def fun(cnt): print(cnt, end=" ") fun(cnt + 1)fun(1)最后到998就截止了。当然,可以人为更改递归深度。import sysprint(sys.getrecursionlimit())#更改递归深度为2000sys.setrecu原创 2021-10-15 22:27:03 · 219 阅读 · 1 评论 -
python 内置函数filter
filter(筛选函数, 筛选对象)之后要用迭代器不断地取出对象#筛选出lst里能整除3的数,之后,返回迭代器。lst = [1, 323, 43, 6435, 54, 2452, 4352]f = filter(lambda x : x % 3 == 0, lst)print(type(f))it = iter(f)while True: try: print(next(it)) except StopIteration: brea原创 2021-10-15 22:07:41 · 185 阅读 · 0 评论 -
python 生成器
生成器函数:1. 里面有yield2. 生成器函数在执行的时候,实际上是创建一个生成器出来3. 必须使用__next__()来执行一段代码,会自动地执行到下一个yield结束4. yield也是返回的意思,可以让一个函数分段执行5. 当后面没有yield之后,再次__next__()会报错 StopIteration6. 还可以适用send(),往yield结束的位置向函数传值生成器代码:def robor_produce(): for i in range(10):原创 2021-10-09 12:29:26 · 49 阅读 · 0 评论 -
python hashlib模块 md5加密
进行md5加密。import hashlib# 创建md5对象, 正常的默认加密方式容易撞库,解决的方法:加盐obj = hashlib.md5('12121'.encode(('utf-8')))# 把要加密的信息传递给objobj.update("6666".encode('utf-8'))# 从obj中拿到密文mi = obj.hexdigest()print(mi)输入账号,密码,对密码进行md5加密后存储再test.txt。后将账号,加密后的密码存储在test.txt里im原创 2021-10-17 22:17:39 · 604 阅读 · 0 评论 -
python 内置函数
一、作用域相关1.globals:查看全局作用域里的内容a = 10def func(): a = 10print(globals())打印结果:{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000205433B9240>, '__spec__':原创 2021-10-15 20:46:30 · 94 阅读 · 0 评论 -
python 汉诺塔问题
汉诺塔问题:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。解决办法:1.将 n - 1个铜块从A经过C移动到B2.将最底下的铜块从A移动到C3.将 n - 1个铜块从B经过A移动到Cdef hon原创 2021-10-17 16:06:45 · 1972 阅读 · 2 评论 -
python 对于程序异常的处理
1.try…except…:处理异常try: print(1 / 0)except FileNotFoundError: print("出错了")finally: # 无论程序执行的结果怎么样,都会执行这一步,运用在处理数据库时,及时退出数据库 print("程序执行结束")对于无法预料的错误,还是会出现报错信息。程序执行结束Traceback (most recent call last): File "C:/Users/DELL/PycharmProjects/原创 2021-10-18 18:59:24 · 2537 阅读 · 0 评论 -
python 生成n位随机数
# 生成数字def rand_num(): return str(random.randint(0, 9))# 生成大写字母def rand_upper(): return chr(random.randint(65, 90))# 生成小写字母def rand_lower(): return chr(random.randint(97, 122))# 生成n位随机验证码def rand_verify_code(n=4): lst = ["rand_num"原创 2021-10-17 19:59:17 · 1915 阅读 · 0 评论 -
python random模块
random模块用于生成随机数。import randomprint(random.random()) #[0, 1]之间的随机小数print(random.uniform(5, 9)) #输出[5, 9]之间的随机小数print(random.randint(5, 9)) #随机输出[5, 9]之间的整数输出:0.086656242837248388.6558291059071159同时,可以随机取出列表,元组里的元素import randomlst = ["上单", "中单",原创 2021-10-17 20:03:41 · 60 阅读 · 0 评论 -
python json模块
1.json是一种数据交互的数据格式2.来自于前端3.json可以和python互相转换4.dumps: python数据结构转为json格式的数据import jsondic = {"id" : 1, "age": 21, "name": "盖伦", "LOGGING":True,'Remark':None}# ensure_ascii=False 确保中文不会被转为ACSII码s = json.dumps(dic, ensure_ascii=False)print(s, type(s))原创 2021-10-17 21:29:30 · 44 阅读 · 0 评论 -
python datetime模块
now()当前的系统时间计算时间差from datetime import datetime# 输出当前时间print(datetime.now())# 得到一个时间 年月日时分秒t1 = datetime(2018, 1, 2, 12, 12, 14)t2 = datetime(2019, 1, 2, 12, 12, 12)# 求两个时间的差值dif = t2 - t1# 将时间的差值转为秒print(dif.total_seconds())输出:2021-10-17 18:原创 2021-10-17 19:22:04 · 64 阅读 · 0 评论 -
python time模块
一般使用time模块1.让程序休息n秒,可以在爬虫时,有效地降低访问频率。import timeprint("Let's go")# 让下一个程序暂停3s再执行time.sleep(3)print("oh!")2.简单的时间差计算,计算代码段的执行时间。import timea = time.time() # 当前的系统时间,从 1970年1月1日0点0分0秒开始到现在经过了多少秒for i in range(10000): print(i)b = time.time()原创 2021-10-17 18:20:47 · 41 阅读 · 0 评论 -
python 匿名函数
为了解决一些简单的需求而设计的一句话函数。fn = lambda a, b: (a + b, a - b)print(fn(1, 2))打印结果:(3, -1)lambda 表示的是匿名函数,不需要def来声明,一句话就可以声明一个函数语法:函数名 = lambda 参数 : 返回值注意:1.函数的参数可以有多个,多个参数之间用逗号隔开2.匿名参数不管多复杂,只能写一行,且逻辑结束后直接返回数据3.返回值和正常函数一样,可以是任意数据类型匿名函数并不是一定没有名字,这里前面的变原创 2021-10-15 18:12:08 · 61 阅读 · 0 评论 -
python 利用product找数组里数字的所有可能的集合
import itertoolsnums = [1, 2, 3, 4]# 生成 2^n 个集合for mask in itertools.product([True, False], repeat=len(nums)): sub = [] # 根据得到的集合,把数字填进去 for i in range(len(nums)): if mask[i]: sub.append(nums[i]) print(sub)原创 2021-10-17 12:49:31 · 154 阅读 · 0 评论 -
python 递归查看文件夹里的文件
#导入文件操作模块import os# 定义递归访问文件的函数readdef read(path,ceng): # 访问path路径下的文件或文件夹 lst = os.listdir(path) # 打印每一层的文件或文件夹 for name in lst: # 拼接名称,得到绝对路径,判断该文件是否符合是文件夹 real_path = os.path.join(path, name) # 如果是文件原创 2021-10-17 15:26:35 · 282 阅读 · 0 评论 -
python 爬取17k网址的个人书架内容
import requestssession = requests.session()data = { 'loginName': 账号, 'password': 密码}# url = 'https://passport.17k.com/ck/user/login'resp = session.post(url, data=data)resp1 = session.get('https://user.17k.com/ck/author/shelf?page=1&appK原创 2021-11-02 22:46:44 · 378 阅读 · 0 评论 -
20s内爬取百度西游记
import requestsimport reimport timeimport asyncioimport aiohttpimport aiofiles# 对指定的url内容进行读取到文件的操作async def get_content(title ,page_url): async with aiohttp.ClientSession() as session: async with session.get(page_url) as resp:原创 2021-11-11 16:50:52 · 242 阅读 · 0 评论 -
python 线程池和进程池
python可以自己建立线程池,和进程池,而且可以自己进行调度,大大提高了程序的运行效率。线程池的写法:from concurrent.futures import ThreadPoolExecutor# 需要放到线程里的函数def fn(name): for i in range(100): print(name, i) if __name__== '__main__': # 初始化一个容量为50的线程池 with ThreadPoolExecu原创 2021-11-10 13:49:57 · 427 阅读 · 0 评论 -
python爬取猪八戒网的内容
from lxml import etreeimport requests# 爬取页面def get_page(url): resp = requests.get(url) resp.encoding='utf-8' return resp.text# 从页面中提取所需要的信息def get_info(s): html = etree.HTML(s) divs = html.xpath('/html/body/div[6]/div/div/div[3]/d原创 2021-11-02 18:31:55 · 605 阅读 · 0 评论 -
python logging模块
logging模块主要用来生成日志,记录报错信息,方便处理import loggingimport logging# filename: 文件名# filemode: 文件访问的格式# format: 数据的格式化输出,最终在日志文件中的样子# 时间-名称-级别-模块:错误信息# 名称如果不给出,默认为root# datefmt: 时间的格式# level: 错误的级别权重,当错误的级别权重大于等于level的时候写入文件loggin原创 2021-10-18 20:36:12 · 48 阅读 · 0 评论 -
python traceback模块
在通过try…except捕获到异常后,用traceback模块记录异常到日志里。import tracebackimport logging# 建立日志logging.basicConfig(filename='d.txt', format='%(asctime)s - %(filename)s - %(levelname)s - %(module)s : %(message)s', datefmt='%Y-%m-%d原创 2021-10-18 20:47:31 · 287 阅读 · 0 评论 -
python re模块
re模块包含对于正则表达式的运用的函数。重点知识:findallfinditersearch(?P正则)group()import retest = "我今年18888岁, 有4个爱好"# # 1.从一个字符串中提取到所有的数字# lst = re.findall('\d+', test)# print(lst)# # 2.判断一句话中是否有数字,搜索数据常用# # search的特点:匹配字符串,匹配到第一个结果就返回,不会匹配多个结果# res = re.searc原创 2021-10-24 09:26:14 · 67 阅读 · 0 评论