
Python基础
Python基础语法学习笔记
Jhinhua
这个作者很懒,什么都没留下…
展开
-
client 1
'''套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。端对端通信客户端----服务器端client serverTCP:面向连接 三次握手 保证数据不丢失 特点: 传输速度慢 SO...原创 2020-04-07 21:42:31 · 506 阅读 · 0 评论 -
协程greenlet+协程下载
''' 协程greenlet的不同人物之间的切换:'''from time import sleepfrom greenlet import greenletdef eat(): for i in range(5): print('正在吃第{}个馒头'.format(i + 1)) # sleep(0.6) g2.swi...原创 2020-03-25 23:24:34 · 331 阅读 · 0 评论 -
协程+猴子补丁
''' 协程: 微线程 进程》线程》协程'''from time import sleepdef eat(): for i in range(5): print('正在吃第{}个馒头'.format(i + 1)) sleep(0.6) yielddef listen(): for i in range(5...原创 2020-03-25 23:21:29 · 296 阅读 · 0 评论 -
线程间通信
''''''# 生产者import randomimport threadingfrom queue import Queuefrom threading import Threadfrom time import sleepdef producer(queue): print('开门营业了,欢迎光临!') foods = ['酸辣土豆丝', '西红柿炒鸡...原创 2020-03-25 23:17:52 · 118 阅读 · 0 评论 -
队列
''' queue队列: 先进先出 创建队列: queue = Queue() 队列存储: queue.put(xxx) 阻塞 满的时候 取值: queue.get(xxx) 阻塞 空的时候 如果给queue设置超时时间,到时间会抛出异常,如果抛出异常可以使用try。。。except 判断: full() empty()'''from ...原创 2020-03-25 23:16:45 · 154 阅读 · 0 评论 -
死锁
'''死锁: 两把锁 申请锁的顺序使用不当开发过程中使用线程,在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。尽管死锁很少发生,但一旦发生就会造成应用的停止响应,程序不做任何事情。避免死锁:1. 重构代码2. 使用timeout参数'''import timefrom threading import Lock...原创 2020-03-25 23:16:04 · 165 阅读 · 0 评论 -
线程锁
''' 线程锁 如果想保证共享数据的安全性,则需要添加Lock。(只要加锁则运算的速度就会变慢) 步骤: from threading import Lock 1. lock = Lock() 创建锁对象 2. 获取锁: lock.acquire() 默认是阻塞,可以设置阻塞超时时间 timeout=秒 释放锁: lock.r...原创 2020-03-25 23:13:30 · 352 阅读 · 0 评论 -
线程3
'''线程全局变量的共享问题? 所有的线程是共享全局变量的 就会造成数据的不安全 但是因为有GIL所有小的数据,运算还是安全的 但是运算量大的话,GIL会自动释放,就会造成数据的不安全。'''import threadingfrom time import sleep# 全局变量numbernumber = 0def task1(): global...原创 2020-03-25 23:12:38 · 105 阅读 · 0 评论 -
线程2
''' 创建线程方式: 1. Thread(target=xxx,args=(),kwargs={},name=xxx) 2. 自定义线程: class MyThread1(Thread): # 重写方法run() def run(self): xxxx 只要线程对象启动,则默认调用run方法 线程的...原创 2020-03-25 23:10:55 · 130 阅读 · 0 评论 -
线程1
''' 线程: 一个进程可以包含多个线程。 创建线程并启动线程 from threading import Thread 下面三个线程都是在一个进程中 一个进程中都会存在一个主线程,可以在主线程中启动子线程(Thread-1,Thread-2,...) 得到当前的线程: threading.current_thread()'''from threading impor...原创 2020-03-25 23:09:32 · 153 阅读 · 0 评论 -
进程3
'''进程间不能共享全局变量p1里面有一个number的全局变量100,p12里面有一个number的全局变量100,主进程里面有一个number的全局变量100,每个进程中都有一个100的number值,各自操作各自的,各个进程之间没有影响。'''from multiprocessing import Processfrom time import sleepnumber ...原创 2020-03-25 23:07:03 · 164 阅读 · 0 评论 -
进程2
'''Process类方法: start() 启动进程 join() 主进程让步 terminate() 中断进程 is_alive() 判断进程是否是活跃的 run()'''import osfrom time import sleepfrom multiprocessing import Processdef weichat(name):...原创 2020-03-25 23:05:37 · 115 阅读 · 0 评论 -
进程1
''' 运行一个程序:代码是自上而下加载按照顺序执行。 操作系统: 并发: 并行:你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。 --->顺序你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 ---> 并发你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。 ---->...原创 2020-03-25 23:01:22 · 142 阅读 · 0 评论 -
正则+简单爬虫
正则 '''只要使用量词:* + ? {} 贪婪模式*? +? ?? {}? 非贪婪模式贪婪模式:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式pattern 匹配字符串example,匹配到的结果就是”abbbbbb”整个字符串。非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配。如上面使用模式pattern 匹配字符串example...原创 2020-03-25 22:58:12 · 177 阅读 · 0 评论 -
正则2
# # 输入用户名和密码,# # 用户名:只能是字母,数字,下划线,而且不能数字开头,用户名的长度6位以上12位以下# # 密码: 必须是6位以上的纯数字# '''# \s : 空白字符# \b : 表示的是边界# \d : 表示的是数字# \w : 表示的是字母数字和下划线# 大写就是他们的反面## 注意在使用以上...原创 2020-03-25 22:53:07 · 146 阅读 · 0 评论 -
正则1
''' re 模块 正则表达式: regular Expression QQ: 5位-11位 纯数字 不能0开头 邮箱验证: fjkdkf@126.com 用户名: match(): 从字符串的开始进行匹配,如果开始都不能匹配成功,则不会继续向下搜索 其中: . 表示任意字符 [] 表示的是一个范围, 可以是[a-z],或者[abc] 但是只是...原创 2020-03-25 22:51:04 · 235 阅读 · 0 评论 -
异常3
try: first_number = int(input('输入第一个数:')) second_number = int(input('输入第二个数:')) # 除法运算 result = first_number / second_number print('除法计算的结果是:', result)except (ValueError, ZeroD...原创 2020-03-25 22:17:42 · 154 阅读 · 0 评论 -
异常2
''' try: 可能有异常的代码 except: 有异常则进入代码 finally: 无论是否有异常都会执行的代码 # xx.close() with open(...) as xx: xx.read() 连接数据库mysql,无论有没有问题都要执行关闭 try: .... finally: .......原创 2020-03-25 21:58:34 · 184 阅读 · 0 评论 -
异常1
''' 异常: 由于存在异常,程序就会中断。 所有的异常都是Exception的子类 异常处理: 1. try....except 语法: try: 可能发生异常的代码 except: 如果有异常则进入的部分,没有异常则不会进入执行'''try: number = int(i...原创 2020-03-25 21:57:43 · 131 阅读 · 0 评论 -
自定义模块
目录module01.py 模块1 模块2 module01.py # __all__只是对*导入起到了限制作用# __all__ = ['name', 'show', 'Calculate']print('--------------------->start')name = '模块'list1 = [1, 2, 3, 4, 5, 6]def sho...原创 2020-03-25 21:53:35 · 162 阅读 · 0 评论 -
单例
单例1 ''' 引入: is与== is 比较的是两个对象的地址 == 比较的是两个对象的内容,底层会调用__eq__魔法方法'''class Person: def __init__(self, name, age): self.name = name self.age = age def __eq__(sel...原创 2020-03-25 21:47:52 · 114 阅读 · 0 评论 -
面向对象练习
练习 # 定义一个工具类Util,其中有属性version表示版本,# 定义类方法:conn_db(dbname)表示要连接的数据库,里面打印“正在连接{}数据库...." time.sleep(1), “连接数据库成功”# 定义静态方法: select_data()表示要查询数据,需要先连接数据库再打印查询的数据是:xxx# import time### class Uti...原创 2020-03-24 23:07:06 · 153 阅读 · 0 评论 -
多态练习
练习 '''1).房子类 有户型,总面积和家具名称列表[] 新房子没有任何的家具 def __init__(self,hx,area): self.hx=hx self.area= area self.lists=[] 添加家具 add_furniture(self,furniture): ...原创 2020-03-24 23:05:39 · 232 阅读 · 0 评论 -
多态
多态 ''' 多态: 多种形态 在类的方法中,参数是一个父类的统称,可以接收该父类下的所有子类型。 在方法中使用isinstance(对象,类别)进行类别的判断 isinstance(对象,类别)函数的返回值是:bool'''class PetShop: def __init__(self, name): self.name = name ...原创 2020-03-24 23:04:30 · 99 阅读 · 0 评论 -
多继承+多继承搜索顺序
多继承 '''多继承: 一个类能否继承多个父类? python允许多继承 经典类: 旧式类 新式类: python3.x都是用的是新式类,使用的是C3算法 如何实现多继承? class 子类(父类1,父类2,父类3): pass 多继承的搜索顺序: 可以使用: 子类名.__mro__ 或者 子类名.mro...原创 2020-03-24 23:01:16 · 485 阅读 · 1 评论 -
继承练习
继承练习class Animal: def __init__(self, name, age): self.name = name self.age = age def run(self, km): print('每小时能跑{}km'.format(km)) def eat(self, food): ...原创 2020-03-24 22:59:38 · 142 阅读 · 0 评论 -
继承
1 ''' 继承: 父类 子类 语法: class 子类(父类): pass 默认的父类:object 目的: 提取公共的代码带父类中,子类使用的话则只需要继承父类 从而提高代码的可读性,将代码变的更加简练。'''# 父类class Person(object): def __init__(self, name, a...原创 2020-03-24 14:07:00 · 88 阅读 · 0 评论 -
封装+私有化封装
封装 '''面向对象: 封装,继承,多态1.将属性和方法封装到类中2.封装私有属性: 在类定义的时候,将属性私有化,并定义公有的set和get方法。封装私有化属性: 1. 对外隐藏属性,只能在类中访问属性 2. 可以对象私有属性的赋值和取值起到限制作用 3. 通过set方法赋值,通过get方法取值'''class Person: de...原创 2020-03-24 14:04:31 · 335 阅读 · 0 评论 -
私有化
私有化 ''' 私有化: * 属性私有化: __属性名 在类中添加__money: self.__money=money 底层:将__money进行改名: _Person__money self.__A=100 _类名__A =100 私有化: 1. 外界不能随机访问或者操作属性 2. 将访问或者操作的动作放到类中,放...原创 2020-03-24 14:02:19 · 136 阅读 · 0 评论 -
面向对象4(魔术方法)
魔术方法 '''魔法方法: __new____new__: 根据参数cls传递过来的类,来完成对象空间的创建'''class Dog: def __new__(cls, *args, **kwargs): new_obj = object.__new__(cls) print(new_obj) return ne...原创 2020-03-24 13:54:22 · 124 阅读 · 0 评论 -
面向对象3(方法)
'''方法: 1. 对象(普通)方法: 方法之间的相互调用,self.方法() 2. 类方法: 是属于类的(没有对象也可以调用) 类属性: 属性是属于类本身 类方法的定义: @classmethod def xxx(cls): -------> cls ~ class x...原创 2020-03-24 13:53:12 · 758 阅读 · 0 评论 -
面向对象2
对象访问 ''' self: 对象自身,在函数中的self参数,表示谁调用此函数,self就表示哪个对象 方法调用: 方法调用: 对象.方法名() | 要不要传参取决于类中定义方法的时候有没有定义除了self之外的参数 __init__'''class Person: type = '人类' # 方法 def eat(self): # s...原创 2020-03-24 13:50:21 · 102 阅读 · 0 评论 -
面向对象1
'''面向对象: 面向过程:根据业务逻辑从上到下写代码。 面向对象:将变量与函数绑定到一起,分类进行封装,每个程序只要负责分配给自己的分类,这样能够更快速的开发程序,减少了重复代码'''# 定义类:class Computer: # 属性: 特征的描述都是通过属性 id = '001' brand = '' price = '' weight ...原创 2020-03-24 13:47:54 · 132 阅读 · 0 评论 -
set数据结构
set数据结构 # set(集合)# 是⼀个⾮常有⽤的数据结构。它与列表(list)# 的⾏为类似,区别在于set不能# 包含重复的值。 这在很多情况下⾮常有⽤。例如你可能想检查列表中是否包含重复的元素,你有两个选# 择,第⼀个需要使⽤for循环,就像这样: some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']dupli...原创 2020-03-23 18:29:55 · 232 阅读 · 0 评论 -
Map+Filter+Reduce
Map # Map# Map会将⼀个函数映射到⼀个输⼊列表的所有元素上。# 这是它的规范: 规范map(function_to_apply,list_of_inputs)# ⼤多数时候,我们要把列表中所有元素⼀个个地传递给⼀个函数,并收集输出。⽐⽅说:items = [1, 2, 3, 4, 5]squared = []for i in items: squar...原创 2020-03-23 18:23:08 · 119 阅读 · 0 评论 -
生成器(Generators)
可迭代对象(Iterable) Python中任意的对象,只要它定义了可以返回⼀个迭代器的__iter__⽅法,或者定义了 可以⽀持下标索引的__getitem__⽅法(这些双下划线⽅法会在其他章节中全⾯解释), 那么它就是⼀个可迭代对象。简单说,可迭代对象就是能提供迭代器的任意对象。 迭代器(Iterator) 任意对象,只要定义了next(Python...原创 2020-03-23 18:05:47 · 174 阅读 · 0 评论 -
*args + **kwargs
目录*args **kwargs *args + **kwargs *args *args 的⽤法 *args 和 **kwargs 主要⽤于函数定义。 你可以将不定数量的参数传递给⼀个函数。 这⾥的不定的意思是:预先并不知道, 函数使⽤者会传递多少个参数给你, 所以在这个场景 下使⽤这两个关键字。 *args 是⽤来发送⼀个⾮键值对的可变数量的参数列表给⼀个函 ...原创 2020-03-23 14:53:31 · 136 阅读 · 0 评论 -
常用模块——time,datetime,calendar,uuid
time模块 ''' time模块: * time.sleep(秒) * time.time() 时间戳 time.localtime(seconds) ----》 得到一个元组(year=2019,month=12,...) time.asctime() 时间的默认表示方式 Wed Dec 25 14:46:30 2019 tim...原创 2020-02-25 17:16:32 · 142 阅读 · 0 评论 -
常用模块——math,random,os
math模块 '''math模块:数学模块 方便一些数据计算'''import mathprint(math.pi)r = 12.89636print(math.ceil(r)) # 13 向上取整print(math.floor(r)) # 12 向下取整print(math.factorial(4)) # 阶乘 4*3*2*1---> 24p...原创 2020-02-24 20:03:31 · 284 阅读 · 0 评论 -
文件操作——csv文件+内存操作
CSV文件写入 '''写:向csv中写入内容1.导入 csv 模块2.使用open打开要操作的文件,以写入模式打开 mode='w'3.通过csv.writer(stream) ---> writer对象4.使用writer对象向文件中写入内容:writerow(['','','']),writerows([[],[],[]])5.关闭'''import csv...原创 2020-02-20 19:51:12 · 1138 阅读 · 0 评论