• python第一阶段:基础部分注意点


    1.格式化输出中的f-string,亦称为格式化字符串常量:f'{}'

    for i in li:
      if type(i) == str:
        print(f'"{i.lower()}"') # 这里的双引号是为了输出的是字符串,不加也行

    2.运算符

    执行顺序:() => not => and => or
    x or y:
      当x是非零,返回x
      当x是零,返回y
    and和or相反

    3.字典

    新增方式:
    dic = {'k1':'v1','k2':'v2'}
    dic.setdefault('k3', 'v3') #如果在字典中存在这个key,就不进行任何操作,不存在就进行添加
    #####################################################################################################################
    更新方式:
    dic1 = {'key':'value','name1':'dic1_value1','qqq':'111'}
    dic2 = {'火女':'安妮','火男':'布兰德','qqq':'222'}
    dic1.update(dic2) # 将dic2更新到dic1,如果两个字典中有相同的key时,dic2的k-v键值对会覆盖dic1的k-v键值对
    print(dic1) new_dic
    = dict(**dic1, **dic2) # 将dic1和dic2合并为一个新的字典。如果两个字典中有相同的key时会报错。
    print(new_dic)
    ####################################################################################################################
    查看方式:
    print(dic.get('k3', '没有这个值')) #没有这个value返回None,可以指定返回的内容
    ####################################################################################################################
    解构(解包):
    a, b = '12'  # 将后边解构打开按位置赋值给变量。支持:字符串、列表、元组
    print(a)
    print(b)
    ###################################################################################################################
    删除(循环删除要注意。列表和字典都不能在循环的时候进行删除. 字典在循环的时候不允许改变大小)
    dic = {'提莫':'冯提莫', '发姐':'陈一发儿', '55开':'卢本伟'}
    lst = []
    for k in dic:
        lst.append(k)

    for el in lst:
        dic.pop(el)
    print(dic)

    4.小数据池

    数字小数据池的范围  -5 ~ 256
    字符串中如果有特殊字符他们的内存地址就不一样
    字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致

    5.zip函数(个人感觉主要是对列表的处理)

    a = [[11, 22, 33], [44, 55, 66]]
    b = [[77, 88, 99], [88, 99, 10]]
    
    f = zip(*a, *b)
    lst = list(f)
    print(lst)
    for i in lst:
        print(i) # 打印的是元组

    6.深浅拷贝

    书读百遍其义自见。今天再看深浅拷贝,灵光一闪。彻底懂了这玩意。
    之所以存在深浅拷贝,最主要的就是共享内存这4个字。拷贝:原则上就是把数据分离出来,复制其数据,并以后修改互不影响。
    https://www.cnblogs.com/feifeifeisir/p/10426263.html,参考这个博主写的

     7.函数参数存放顺序

    顺序:位置参数, *args, 默认值参数, **kwargs
    形参的位置*,**: 聚合
    实参的位置*,**: 打散
    def chi(name, *food, location="北京", **kwargs):  # 参数名是food、kwargs:*表示位置参数动态传参 **表示关键字参数动态传参
        print(location)
        print(name + "要吃", food, '。这个的关键字动态参数', kwargs)

    lst = ["狗不理", "大麻花", "天津"]
    other = {'k1': 'v1', 'k2': 'v2'}
    chi("小伙", *lst, **other) # 这里加*号和不加可以分别看一下效果
    chi("小伙", *lst, good_food="狗不理", no_good_food="汉堡", drink="大白梨", ice_cream="巧乐兹")

     8.闭包

    闭包:在内层函数中访问外层函数的局部变量
      好处:
        1. 保护你的变量不受外界影响
        2. 可以让变量常驻内存
      写法:
    def outer():
        a = 10
        def inner():
            print(a)
        print(inner.__closure__)  # 如果打印的是None. 不是闭包. 如果不是None, 就是闭包
        return inner

    9.迭代器、生成器、装饰器

    迭代器和生成器参考
    https://www.cnblogs.com/muyuyingfeng/p/11040872.html
    迭代器:
    使用dir来查看该数据包含了哪些方法 用来遍历列表,字符串,元祖....这些可迭代对象 可迭代对象(Iterable):里面有__iter__()可以获取迭代器, 没有__next__() 迭代器(Iterator):里面有__iter__()可以获取迭代器, 还有__next__() 迭代器特点:
    1. 只能向前. 2. 惰性机制. 3. 节省内存.(生成器)
    ###############################################################################################################
    生成器:
    之所以要用生成器,就是为了解决大数据存储的占用内存的问题(数学界的各种穷举)。是一个特殊的迭代器,个人理解成一个手写的迭代器。
    特点:只能向前,惰性机制,节省内存
    生成器函数:如果一个函数有 yield 关键字,那么这个函数的返回值就是一个生成器
    生成器推导式:gen = (x for x in range(5)),此时的gen就是一个生成器
    使用for循环调用:
    for item in gen:
        print(item)
    使用next或者send调用:send不能用在开头或者结尾
    print(next(gen)
    ###################################################################################################################
    装饰器参考
    https://www.cnblogs.com/arvin-feng/p/11108799.html
    https://www.cnblogs.com/muyuyingfeng/p/11039986.html

    10.内置函数

    lambda sorted() filter() map()

    11.模块部分常用的多写写

    12.oop部分

    面向对象3大特性:封装、继承、多态
    1.封装:
      A.将相关功能封装到一个类中
      B.将数据封装到一个对象中
    2.继承:
    这里要注意一下super关键字。
    写法:super(子类, self).func
    使用的是C3算法。具体可以参考这篇博客 https://www.cnblogs.com/shengulong/p/7892266.html
    C3算法简单描述就是:从下往上找,从左往右找,从入度为0的开始找,最终返回的是一个列表
    3.多态:鸭子模型
    4.反射相关的4个:
    getattr # 根据字符串的形式,去对象中找成员。
    hasattr # 根据字符串的形式,去判断对象中是否有成员。
    setattr # 根据字符串的形式,动态的设置一个成员(内存)
    delattr # 根据字符串的形式,动态的删除一个成员(内存)

    13.网络编程部分:黏包、断点续传、tcp三次握手四次挥手、socket源码理解

    14.多线程:GIL锁、线程安全、计算密集型使用多进程,IO密集型使用多线程、生产消费者模型

  • 相关阅读:
    eval(data)和eval("("+data+")")的区别
    来自 119.*.*.*的回复: TTL 传输中过期
    小伙伴们,我们一起奋斗吧
    计算机专业学习课程推荐
    sysbench使用教程【转载】
    Docker学习笔记 — Docker私有仓库搭建【转载】
    Linux设置静态IP【转】
    聊一聊PV和并发、以及计算web服务器的数量的方法【转】
    Linux常用Shell脚本珍藏【转载】
    戏说云计算之PaaS,IaaS,SaaS【转载】
  • 原文地址:https://www.cnblogs.com/wangyadong/p/12734921.html
Copyright © 2020-2023  润新知