Python基础知识点

用户输入网址请求某网站的过程

浏览器本身是一个客户端,当你输入 URL 的时候:
1. 首先浏览器会去请求 DNS 服务器,通过 DNS 获取相应的域名对应的 IP
2. 然后通过 IP 地址找到 IP 对应的服务器后,要求建立 TCP 连接
3. 等浏览器发送完 HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包
4. 服务器调用自身服务,返回 HTTP Response(响应)包
5. 客户端收到来自服务器的响应后开始渲染这个 Response 包里的主体(body)
6. 等收到全部的内容随后断开与该服务器之间的 TCP 连接。

HTTPS实现原理

简单理解,https过程为:
1. 客户端先获取服务端给的公钥
2. 然后客户端实时生成随机数
3. 通过公钥加密提交给服务端
4. 服务端使用私钥对数据进行解密,得到随机数【公钥只能加密数据,不能解密数据(非对称加密)】
5. 然后告知客户端已经得到随机数(临时密钥)
6. 最后数据传输均使用该随机数(临时密钥)进行传输

https请求过程图


问:那为什么不直接客户端使用公钥加密数据,服务端使用私钥解密数据呢?

一方面是因为效率问题:
  非对称加密虽然安全,但效率太低。相反,对称加密虽然不够安全,但效率较高
  所以https本质上,就是通过非对称加密交换密钥,最终使用密钥进行对称加解密数据
还有一方面就是:
  如果直接使用公钥进行加密,一旦服务端的私钥泄露,那所有的通讯都将被解密,极其不安全

with字段

with 语句实现原理建立在上下文管理器之上,上下文管理器是一个实现 __enter__ 和 __exit__ 方法的类。
因此,在with后跟着的对象需要实现有__enter__和__exit__方法。

# 例子如下

class Test:

    def __enter__(self):
        return '调用__enter__'

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('销毁,调用__exit__')


if __name__ == '__main__':
    with Test() as t:
        print(f'得到:{t}')

# 打印结果:
# 得到:调用__enter__
# 销毁,调用__exit__

单例模式

import threading


class Test:
    _instance = None
    # 加锁目的是考虑多线程并发的情况,简单版本的单例无需相关代码
    _lock = threading.RLock()

    def __new__(cls, *args, **kwargs):

        if cls._instance:
            return cls._instance

        # 抢占锁,释放锁
        # 没有实例时调用父类new方法创建实例并保存起来,有实例则直接返回
        with cls._lock:
            if not cls._instance:
                cls._instance = super().__new__(cls)
            return cls._instance

获取一个对象的私有属性

class Test:

    def __init__(self):
        self.a = 111
        self.__b = 222

if __name__ == '__main__':
    test = Test()
    print(test.a)
    # 私有属性不能直接获取,如果非要获取,要时使用下面的:“_类名属性名”方式来获取
    # print(test.__b)
    print(test._Test__b)
    
    # 输出:
    # 111
    # 222

strip方法

用以移除字符串首尾指定的字符,默认值为空格或换行符
【注】只能移除字符串首尾,中间的并不能移除。传递参数时,移除首尾【包含的】字符

例:
    strs = 'abbacabb'
    print(strs.strip('ba'))
    输出结果:c

列表拼接【+】和【extend】

a = [1, 2, 3]
b = [4, 5, 6]

c = a + b
print(a, c) # 使用加号【+】拼接,结果:[1, 2, 3] [1, 2, 3, 4, 5, 6],a不变,新生成的c为拼接后新列表
d = a.extend(b)
print(a, d) # 使用extend拼接,结果:[1, 2, 3, 4, 5, 6] None,a改变,a为拼接后的新列表,没有返回值

字符串拼接【+】和【join】

运算结果都一样,区别在于:
    由于字符串是不可变对象,当使用“+”连接字符串的时候,每执行一次“+”操作都会申请一块新的内存。
    然后复制上一个“+”操作的结果和本次操作的有操作符到这块内存空间中,所以用“+”连接字符串的时候会涉及内存申请和复制;
    join在连接字符串的时候,首先计算需要多大的内存存放结果,然后一次性申请所需内存并将字符串复制过去。
    在用"+"连接字符串时,结果会生成新的对象,而用join时只是将原列表中的元素拼接起来。
    因此在连接字符串数组的时候会考虑优先使用join,join的效率优于直接相加。

python作用域

a = 1  # 全局作用域
def fn1():
  b = 2  # 函数作用域
  
  def fn2():
    c = 3  # 局部作用域

print(max)  # 内建作用域

python的魔法方法

# 创建实例相关
__new__    :创建实例最先执行
__init__   :new传递参数过来,初始化实例
__call__   :实例被调用时触发
__del__    :实例被销毁时触发

# 字符串相关
__str__    :返回字符串,可读
__repr__   :返回可以直接通过eval函数生成该实例的字符串
__doc__    :返回注释内容,函数也有注释内容

# 上下文管理
__enter__  :进入上下文时执行,设置环境、配置资源等
__exit__   :离开上下文时执行,释放资源、清理环境等

# 属性操作
__setattr__  :赋值操作触发,有则修改,没有则添加
__getattr__  :取值操作且没有值时,才会触发
__getattribute__  :只要【.】操作都触发,包括使用方法
__delattr__       :删除操作触发,没有报错

# []字典操作
__getitem__  :索引符号[]取值触发
__setitem__  :索引符号[]赋值触发
__delitem__  :索引符号删除触发

# 关系运算符
__gt__、__lt__    :大于、小于
__eq__ 、__ne__   :等于、不等于
__get__、__le__   :大于等于、小于等于

# 迭代对象
__iter__    :返回迭代对象(self)
__next__    :迭代返回下一个值

# 描述符
__get__    :获取属性,可以添加描述信息、操作等
__set__    :设置属性,可以添加描述信息、操作等
__delete__ :删除属性,可以添加描述信息、操作等
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容