内容主要参照b站《 黑马程序员python教程,8天python从入门到精通,学python看这套就够了》,链接: https://www.bilibili.com/video/BV1qW4y1a7fU?p=1&vd_source=b0665a83555604d15c1cecb7c0cfebfa
部分内容资料来自互联网,后续博客会不断完善知识点
高阶技巧
闭包
全局变量有被修改的风险
定义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数成为闭包
"""
演示python的闭包特性
"""
# 简单闭包
defouter(logo):
# 这里面在开始时候输入了,因此内部的logo被定义了
definner(msg):
print(f"{logo}{msg}{logo}")
# 返回的是函数
returninner
# 利用fn1来 接受函数
# 因为返回的是inner函数
fn1=outer("程序员")
# 将fn1对应的inner(已赋值来处理)
fn1("hi")
# 重新修改其中的参数必须再次调用
fn2=outer("大王集团")
fn2("say-hello")
nonlocal使用
defouter2(num1):
definner2(num2):
# 分清num1位置不同对于函数内和函数外变量是不同的
# nonlocal声明的变量不是局部变量, 也不是全局变量, 而是外部嵌套函数内的变量。
# 用在两个函数之间的
nonlocalnum1
num1+=num2
print(num1)
returninner2
fn22=outer2(10)
fn22(10)
fn22(200)
fn22(1000)
202201220
进程已结束,退出代码0
总结
装饰器
装饰器其实也是一种闭包,其功能实不破坏目标函数原有的代码和功能的前提下,为目标函数增加新功能
改变函数内调用的函数
下面是底层原理的演示
语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换,可以提高开发编码的效率。
@outer的用法就是很想装饰器,在不动原有代码的基础上增加新的功能
本质上还是增加了新功能
设计模式
编程中除了面向对象外,还有很多其他的套路,比如单例和工厂
单例模式
在一个单独文件中单独定义其中的单例对象
工厂模式
将对象放到大的对象中, 然后在其中具体来设置
多线程与并行处理概念
线程是归属与进程的,一个进程可以开启多个线程,执行不同的工作,是进程的 实际工作最小单元(进行实际的工作者)
操作系统中可以运行多个进程,即多任务运行
一个进程内可以运行多个线程,即多线程运行
进程、线程
进程之间是内存隔离的
并行执行
线程其实也可以并行执行
比如一个py程序,其实可以做到
一个线程在输出:你好
一个线程在输出:hello
多线程编程
import threading
threading.Thread(sing)
# 通过设置来多线程启动
sing_thread.start()
dance_thread.start()
元组的输入过程中要带入( , )
# 即使是空的也要带
网络编程
服务端开发
进程之间想要进行网络通信需要socket
它是 数据的搬运工
socket服务端编程
主要步骤:
创建socket对象
绑定socket_server到指定IP和地址
服务端开始监听端口
接受客户端连接,获得连接对象
注意:accept接受的是一个 二元元组
客户端连接后,通过recv方法,接受客户端发送的消息
通过conn(客户端当次连接对象),调用send方法可以回复消息
conn(客户端当次连接对象)和socket_server对象调用close方法,关闭连接
借助网络服务助手来进行网络调试
客户端开发
利用socket_client.connect对象来连接
正则表达式
基础匹配
正则表达式定义:检索、替换哪些符合某个模式(规则)的文本
if,else 用来判断格式太困难了
python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配
match
search
findall
match
match:是从开头进行匹配
search
搜索整个字符串,找出匹配的,从前往后,找到第一个后, 就停止,不会继续向后
findall
找到全部的,不管开头的限制
总结
元字符匹配
正则最强大就在于元字符匹配规则
通配符是 文本值中代替未知字符的特殊字符,可方便使用类似但不相同的数据查找多个项目。
主要有星号(*)和问号(?)
用来模糊搜索文件
r 使得语言成为普通字符
importre
s="asfhasjfas ## @@ python !! 6666 itccast3"
# 下面的部分不能增加空格,否则会多搜索内容
result=re.findall(r'[a-zA-Z0-5]',s)
print(result)
r='^[0-9a-zA-Z]{6,10}$'
^表示匹配字符串开头
$表示匹配字符串结尾
不要带上空格
+表示匹配前一个规则的字符出现1至无数次
\w-表示匹配单词字符及-
r='^[\w-]+(\.[\w-]+)*@(qq|163|gmail)([\.w-]+)+$'
1.字符串的r标记表示,字符串内转移字符无效,作为普通字符使用
递归
递归在编程中很重要
递归:即方法(函数)自己调用自己的一种特殊编程写法
deffuc():
if...:
func()
return...
pass
pass语句。它被用作 尚未实现的(但将来想实现)函数、循环等的 占位符, 不执行任何操作。
利用调试来研究递归思想
端点的设置很关键
递归的关键,进入的函数来记录相关的内容, 不相关的设置条件来退出
递归一定要设置好退出条件
总结
未来学习路线
依据视频中基础涵盖的知识来对内容进行对应学习,织网一样