V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v24radiant
V2EX  ›  分享发现

分享一下同事写的 Python 代码, 看了前面三个函数我就有点蚌埠住了...😂

  •  
  •   v24radiant · 235 天前 · 2688 次点击
    这是一个创建于 235 天前的主题,其中的信息可能已经有所发展或是发生改变。

    34 条回复    2024-03-14 23:20:01 +08:00
    scguanzhong
        1
    scguanzhong  
       235 天前
    图挂掉啦
    28Sv0ngQfIE7Yloe
        2
    28Sv0ngQfIE7Yloe  
       235 天前
    没写过 py ,请问这是 py 的固定格式吗?一个括号换行一个不换

    hidder
        3
    hidder  
       235 天前
    好啊,原来是你小子泄露公司项目🧐
    tangtang369
        4
    tangtang369  
       235 天前
    @Morii 没有强制要求 直接一行都行
    v24radiant
        5
    v24radiant  
    OP
       235 天前 via Android
    @scguanzhong 没有吧 我这边是正常显示的呀
    v24radiant
        6
    v24radiant  
    OP
       235 天前 via Android
    @Morii 并不是的😂 我也不知道咋想的
    v24radiant
        7
    v24radiant  
    OP
       235 天前 via Android
    @hidder 又没有敏感信息🐶
    gnakzz
        8
    gnakzz  
       235 天前
    学过别的语言且刚接触 python 的话也不容易写出来
    apake
        9
    apake  
       235 天前
    应该是算法工程师写的
    NoOneNoBody
        10
    NoOneNoBody  
       235 天前
    没搞清想说的点在哪里
    jinxjhin
        11
    jinxjhin  
       235 天前
    没怎么写过 Python ,前两个函数有什么问题吗?
    c3de3f21
        12
    c3de3f21  
       235 天前   ❤️ 1
    这是要使用变量决定调用哪个函数吗?学到了。。。。。。。。
    gaeco
        13
    gaeco  
       235 天前
    所以这个有啥问题
    v24radiant
        14
    v24radiant  
    OP
       235 天前
    @jinxjhin 第一个是每次传进来相同的 gamma 值的时候都会算一个 table ,第二个是函数 makedirs 这个函数本身就是支持路径存在不创建的😂
    ohayoo
        15
    ohayoo  
       235 天前
    兄弟不妨明说,到底是啥子问题让你觉得写的不好
    NoOneNoBody
        16
    NoOneNoBody  
       235 天前
    除了有点“罗唆”,看不出毛病
    只是第一个既然用了 numpy 就无需 for 了

    @c3de3f21 #12
    这是 python 实现 switch 的常见写法,字典+if
    特别是当序列要每个元素做处理,但每个元素可能调用的处理方法不同,可以归一到一个闭包或 lambda ,然后使用 map 或 apply 一次处理,这样转为并发也容易
    SteinsGate
        17
    SteinsGate  
       235 天前 via Android
    挂我是吧,下班了别跑
    v24radiant
        18
    v24radiant  
    OP
       235 天前
    @gaeco
    @ohayoo

    前两个说了,就说一下最后一个函数。default 函数是多余的,返回值都不同,虽然根本执行不到那来, 除了 case1 和 default ,其他 case 都调了同一个函数,返回值也都是相同的,真正不同的也就是就是 state ,我都被搞蒙了😂。 其实后面那一段 if else 想做的就是如下逻辑:
    - 如果只有黑色,就啥也不做, state = 0
    - 否则就调用 cls_xx 函数,得到角度,再判断:
    - 如果红色多于绿色,state = 1
    - 否则 state = 2
    fatigue
        19
    fatigue  
       235 天前
    给性能优化留出空间
    v24radiant
        20
    v24radiant  
    OP
       235 天前
    v24radiant
        21
    v24radiant  
    OP
       235 天前
    @fatigue 学到了学到了😂
    NoOneNoBody
        22
    NoOneNoBody  
       235 天前
    @v24radiant #14
    第一个传 gamma 算 table 也不算大问题,只是没有优化而已,但计算这个 table 消耗不大,也可以不优化
    因为 gamma 往往是初始参数,gamma_table 属于中间变量,对于其他用户,肯定是传 gamma 进去的,而不是 table ;所以保持参数为 gamma 便于以后复用时的理解
    如果处理的图片极多(过万张),我写的话会把 table 抽出来做个 cache ,如果千张左右没必要,保持易读性更好

    “If exist_ok is False (the default), an FileExistsError is raised if the target directory already exists.”
    makedirs 默认是会报错的,不过 exist_ok=True 可以避免
    我看这种写法更像是写成闭包,这样可以批量 apply ,便于向量化或者并发

    PS:这些函数倒是很像是 AI 写出来的
    SenLief
        23
    SenLief  
       235 天前
    就是有点冗余,你们绩效不会是看代码的吧😁
    nagisaushio
        24
    nagisaushio  
       235 天前 via Android
    像极了我写一次性的脚本,怎么快怎么来
    NoOneNoBody
        25
    NoOneNoBody  
       235 天前   ❤️ 1
    @v24radiant #18
    我也说说这个多余的 defaut ,我以前也不写这些“多余”的
    直到做批量数据,跑一个十万数据,到 80%时报错中断了,前面几万个白跑了,追查就是其中一个数据异常,无法计算中间数据,导致后面报错
    然后我就加了个容错,十万能跑完,只是这个异常的数据无结果而已,其他都有结果,容错就是这句 defaut
    v24radiant
        26
    v24radiant  
    OP
       235 天前
    @NoOneNoBody #25 兄弟你仔细看看这个 dafulat 跟其他 case 不一样,是没有返回值的😂如果跑到这里必定报错
    NoobNoob030
        27
    NoobNoob030  
       235 天前
    挂我是吧?下班别走
    NoOneNoBody
        28
    NoOneNoBody  
       235 天前
    typo: default
    zagfai
        29
    zagfai  
       235 天前
    @c3de3f21 继承自 C 的灵活性
    v24radiant
        30
    v24radiant  
    OP
       235 天前
    @NoOneNoBody #28 打快了😂
    NoOneNoBody
        31
    NoOneNoBody  
       235 天前
    @v24radiant #26
    dict.get 没找到 key 时,返回指定 default 值

    他应该写错了
    我写的话应该是
    if ...: choice=something
    elif ...
    else: pass
    return switch.get(choice, default)()

    把 switch.get(choice, default) 抽到 if..else..外面
    NoOneNoBody
        32
    NoOneNoBody  
       235 天前
    @v24radiant #30
    哈哈,我说的是我自己打错了,没想到你还先回复了,变成说你了,误解误解
    v24radiant
        33
    v24radiant  
    OP
       235 天前
    @NoOneNoBody #31 python3.10 支持 match case 了,也可以不用这么麻烦
    28Sv0ngQfIE7Yloe
        34
    28Sv0ngQfIE7Yloe  
       235 天前
    @tangtang369 看的难受 哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:34 · PVG 11:34 · LAX 19:34 · JFK 22:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.