• 那些年用Python踩过的坑


      👉引言💎

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
    热爱写作,愿意让自己成为更好的人…


    在这里插入图片描述

    铭记于心
    🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

    一、基础常识类

    1 关于map 与 lambda表达式
    • map(函数,可迭代对象(列表等)),返回map对象,可用list转换成列表,可用for in便遍历

    • 当使用map时只是封装了一个map对象,此时并没有进行运算,需要list( )转换时才会运算

    在这里插入图片描述

    函数体或者lambda表达式中 创建局部变量与 全局变量重名,则函数体内会以新创建的 局部变量为准

    在这里插入图片描述

    • Lambda表达式还可以结合自定义函数使用(除了与map外)

      def con(args):
          x1min,x1max,x2min,x2max,x3min,x3max = args
          cons = ({'type':'ineq','fun':lambda x : x[0] - x1min},\
              {'type':'ineq','fun':lambda x:-x[0] + x1max},\
              {'type':'ineq','fun':lambda x:x[1] - x2min},\
              {'type':'ineq','fun':lambda x:-x[1] + x2max},\
              {'type':'ineq','fun':lambda x:x[2] - x3min},\
              {'type':'ineq','fun':lambda x:-x[2] + x3max})
          return cons
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    2 全局变量 global
    t=1
    global tt=1
    此时 t与tt都是全局变量
    
    但是
    def test():
      t=2
      global tt=2
    此时t为局部变量,tt则是全局
    下面 print(t)print(tt)正确 
    
    函数体内使用全局变量的方法是
     index =0
     def t():
       global index
       index+=1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 海象运算符的优先级是低于关系运算符的

    • 小数精确运算模块decimal

      import decimal
      print(decimal.Decimal('111.111')+decimal.Decimal('222.222'))
      
      333.333
      
      • 1
      • 2
      • 3
      • 4
    • 类型转换: int( ),str( )等

    • if else的几种写法

      msg = "大于" if a > b else "小于"
      print('大于') if a > b else print("小于")
      msg = ("a小于b", "a大于b")[a > b]
      msg = {2: '=2', 1: '=1', 3: '=3'}[b - a]
      
      
      • 1
      • 2
      • 3
      • 4
      • 5

    二、bug与问题细节类

    • 如果出现莫名其妙的问题,可以关闭python环境重新打开,比如上次 Pillow的grab 截图时出现 什么XCB不支持,结果重开pycharm就好了

    • 对于非列表与字典,numpy库等copy后更改不会影响到原副本但是对列表等可迭代对象却只是浅拷贝(一维表的时候复制的是值,不会对原表造成影响,但如果是二维表,则会拷贝其中一维表的内存地址,这时候如果对其中的值操作会使原表受到影响),深拷贝只能用deepcopy(需导入copy模块)

    • 类中调用类的方法一定要加self,并且向方法传递实参的时候无需传self

    • python中可用r’\\'解决 编程语言中字符串使用 正则表达式 需要用\\\\表示 \的问题

    • re findall方法会 返回匹配到的所有字符串,如果正则表达式里有 捕获,那么只返回匹配到的字符串的 捕获的组

    • 单独赋给一个字符串时r这些标志符才生效

      在这里插入图片描述

    三、技巧类

    • 循环体中不需要使用自定义变量的话,可用_代替

    • python中else if 为elif;对不可变类型重新赋值,会指向一片新的空间,原空间会被抛弃(权限被系统收回)

    • for 变量 in 可迭代对象(字符串或序列) 即以循环方式将可迭代对象中的元素依次取出

    • print()自动换行,但是可以在()里语句后加入end =’ ’ 即为用空格代替换行,='\t’即为用\t 代替

    • decode方法是将字节数组 解码为字符串,然后encode是将字符串 编码成字节数组

    • Natsort自然排序模块

    • x = eval(input('input x: ')) eval()将输入作为表达式运算

    • set()去重,Counter 对字符串(列表)进行计数追踪,

    • a, b = map(int, input().strip().split())

    • del关键字 删除的是 变量本身,而不是其引用的数据,也就是 使用del a,再引用a则会报错

    • 内置函数 enumerate(list) 可取下标 len()计算长度

    • import 的包没有用到 会呈现灰色,但是也是已经导入了的,只是没用到而已(所以最好优化导入,避免产生包冲突)

    • type() 返回数据结构类型(list、dict、numpy.ndarray 等)

    • dtype 返回数据元素的数据类型(int、float等)

    • astype() 改变np.array中所有数据元素的数据类型]

    • print(line, end=‘\r’)打印一行消失一行

    • 字典对值排序:sorted(dic.items(),key=lambda x: x[1]),逆向的话 如果是数值 可以 -x[1/0]

      如果有多个值,取其中几个降级排序,则可以用 operator.itrmgetter (整数序列,表示要取得下标) 获得

    🌹写在最后💖
    路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹在这里插入图片描述

  • 相关阅读:
    Win10电脑经常发出叮咚声音怎么关闭
    透视投影函数的图像
    Android中球体碰撞代码分享-kotlin,入门版
    什么是基于角色的访问控制 (RBAC)?示例、好处等
    分享一个清理工具栏和插件的小工具
    一篇文章带你掌握主流服务层框架——SpringMVC
    2311rust,到74版本更新
    消费电子 SIC462ED SIC463ED DC/DC 稳压器 参数 应用
    centos7升级openssl_3
    基于DotNetty实现自动发布 - 实现一键打包发布
  • 原文地址:https://blog.csdn.net/runofsun/article/details/126575847