分享一下同事写的 Python 代码, 看了前面三个函数我就有点蚌埠住了... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v24radiant
V2EX    分享发现

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

  •  
  •   v24radiant 2024-03-14 17:32:52 +08:00 3304 次点击
    这是一个创建于 647 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    前两个说了,就说一下最后一个函数。default 函数是多余的,返回值都不同,虽然根本执行不到那来, 除了 case1 和 default ,其他 case 都调了同一个函数,返回值也都是相同的,真正不同的也就是就是 state ,我都被搞蒙了。 其实后面那一段 if else 想做的就是如下逻辑:
    - 如果只有黑色,就啥也不做, state = 0
    - 否则就调用 cls_xx 函数,得到角度,再判断:
    - 如果红色多于绿色,state = 1
    - 否则 state = 2
    fatigue
        19
    fatigue  
       2024-03-14 18:50:42 +08:00
    给性能优化留出空间
    v24radiant
        20
    v24radiant  
    OP
       2024-03-14 18:51:36 +08:00
    v24radiant
        21
    v24radiant  
    OP
       2024-03-14 18:51:54 +08:00
    @fatigue 学到了学到了
    NoOneNoBody
        22
    NoOneNoody  
       2024-03-14 18:56:30 +08:00
    @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  
       2024-03-14 18:56:55 +08:00
    就是有点冗余,你们绩效不会是看代码的吧
    nagisaushio
        24
    nagisaushio  
       2024-03-14 18:59:56 +08:00 via Android
    像极了我写一次性的脚本,怎么快怎么来
    NoOneNoBody
        25
    NoOneNoBody  
       2024-03-14 19:03:22 +08:00   1
    @v24radiant #18
    我也说说这个多余的 defaut ,我以前也不写这些“多余”的
    直到做批量数据,跑一个十万数据,到 80%时报错中断了,前面几万个白跑了,追查就是其中一个数据异常,无法计算中间数据,导致后面报错
    然后我就加了个容错,十万能跑完,只是这个异常的数据无结果而已,其他都有结果,容错就是这句 defaut
    v24radiant
        26
    v24radiant  
    OP
       2024-03-14 19:05:40 +08:00
    @NoOneNoBody #25 兄弟你仔细看看这个 dafulat 跟其他 case 不一样,是没有返回值的如果跑到这里必定报错
    NoobNoob030
        27
    NoobNoob030  
       2024-03-14 19:07:15 +08:00
    挂我是吧?下班别走
    NoOneNoBody
        28
    NoOneNoBody  
       2024-03-14 19:07:18 +08:00
    typo: default
    zagfai
        29
    zagfai nbsp;
       2024-03-14 19:11:47 +08:00
    @c3de3f21 继承自 C 的灵活性
    v24radiant
        30
    v24radiant  
    OP
       2024-03-14 19:12:58 +08:00
    @NoOneNoBody #28 打快了
    NoOneNoBody
        31
    NoOneNoBody  
       2024-03-14 19:13:36 +08:00
    @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  
       2024-03-14 19:15:50 +08:00
    @v24radiant #30
    哈哈,我说的是我自己打错了,没想到你还先回复了,变成说你了,误解误解
    v24radiant
        33
    v24radiant  
    OP
       2024-03-14 19:18:29 +08:00
    @NoOneNoBody #31 python3.10 支持 match case 了,也可以不用这么麻烦
    28Sv0ngQfIE7Yloe
        34
    28Sv0ngQfIE7Yloe  
       2024-03-14 23:20:01 +08:00
    @tangtang369 看的难受 哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     895 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 18:49 PVG 02:49 LAX 10:49 JFK 13:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86