分享一下同事写的 Python 代码, 看了前面三个函数我就有点蚌埠住了... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
v24radiant

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

  •  
  •   v24radiant Mar 14, 2024 3506 views
    This topic created in 776 days ago, the information mentioned may be changed or developed.

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

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

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

    前两个说了,就说一下最后一个函数。default 函数是多余的,返回值都不同,虽然根本执行不到那来, 除了 case1 和 default ,其他 case 都调了同一个函数,返回值也都是相同的,真正不同的也就是就是 state ,我都被搞蒙了。 其实后面那一段 if else 想做的就是如下逻辑:
    - 如果只有黑色,就啥也不做, state = 0
    - 否则就调用 cls_xx 函数,得到角度,再判断:
    - 如果红色多于绿色,state = 1
    - 否则 state = 2
    fatigue
        19
    fatigue  
       Mar 14, 2024
    给性能优化留出空间
    v24radiant
        20
    v24radiant  
    OP
       Mar 14, 2024
        21
    v24radiant  
    OP
       Mar 14, 2024
    @fatigue 学到了学到了
    NoOneNoBody
        22
    NoOneNoBody  
       Mar 14, 2024
    @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  
       Mar 14, 2024
    就是有点冗余,你们绩效不会是看代码的吧
    nagisaushio
        24
    nagisaushio  
       Mar 14, 2024 via Android
    像极了我写一次性的脚本,怎么快怎么来
    NoOneNoBody
        25
    NoOneNoBody  
       Mar 14, 2024   1
    @v24radiant #18
    我也说说这个多余的 defaut ,我以前也不写这些“多余”的
    直到做批量数据,跑一个十万数据,到 80%时报错中断了,前面几万个白跑了,追查就是其中一个数据异常,无法计算中间数据,导致后面报错
    然后我就加了个容错,十万能跑完,只是这个异常的数据无结果而已,其他都有结果,容错就是这句 defaut
    v24radiant
        26
    v24radiant  
    OP
       Mar 14, 2024
    @NoOneNoBody #25 兄弟你仔细看看这个 dafulat 跟其他 case 不一样,是没有返回值的如果跑到这里必定报错
    NoobNoob030
        27
    NoobNoob030  
       Mar 14, 2024
    挂我是吧?下班别走
    NoOneNoBody
        28
    NoOneNoBody  
       Mar 14, 2024
    typo: default
    zagfai
        29
    zagfai  
       Mar 14, 2024
    @c3de3f21 继承自 C 的灵活性
    v24radiant
        30
    v24radiant  
    OP
       Mar 14, 2024
    @NoOneNoBody #28 打快了
    NoOneNoBody
        31
    NoOneNoBody  
       Mar 14, 2024
    @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  
       Mar 14, 2024
    @v24radiant #30
    哈哈,我说的是我自己打错了,没想到你还先回复了,变成说你了,误解误解
    v24radiant
        33
    v24radiant  
    OP
       Mar 14, 2024
    @NoOneNoBody #31 python3.10 支持 match case 了,也可以不用这么麻烦
    28Sv0ngQfIE7Yloe
        34
    28Sv0ngQfIE7Yloe  
       Mar 14, 2024
    @tangtang369 看的难受 哈哈
    About     Help     Advertise     Blog     API     FAQ     Solana     5185 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 79ms UTC 08:50 PVG 16:50 LAX 01:50 JFK 04:50
    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