Python 板


LINE

※ 引述《keitheis (无)》之铭言: : ※ 引述《sheauhei ( )》之铭言: : : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : : 这说法个人有点其他想法,算借题发挥吧 :p : : 如果指的是上述例子为了绕过import exception的问题, : : 而延迟了import的时间点, : : 这本身做法就是有问题的...可以说是来乱的阿 orz : : 不过,在一般性来讲,个人建议是: : : "尽可能延迟module import的时间点,至到需要用到它。" : : 一个平常的例子就是, : : 如果只有在某个function中需要用到某个module, : : 那最好在function的local namesapce去import, : : 而不要在global namespace import。 : : 简单的例子 : : main.py: : : import a : : ... : : def executeA(): : : a.func() : : a.py: : : import b : : def func(): : : b.xxx() ... : : b.py: : : .... : : 在这个例子中,executeA()这个function, : : 可能从头到尾都不会被执行到, : : 但是却因为它,从main.py开始执行时, : : 就一路从a.py 一直到 b.py, : : 甚至更多的module都被import进来。 : : (如果你目前在做的专案有上千个module, : : 你就会知道这恐怖了 囧...) : 嗯嗯,受教了! : 就效能为上而言我想这是可以认真考虑的 : 但就专案维护容易度而言,要找出一个程式用了(相依)哪些模组 : 我个人偏好,如 PEP 8 所推荐的,直接看档案开头容易 : 然後遇到哪里有效能问题,再来小心地处理 : 除非一开始就是在写效能导向程式(如 yyc XD) : 否则太早最佳化是万恶之源?XD : : 建议是: : : main.py: : : def executeA(): : : import a : : a.func() : : a.py: : : def func(): : : import b : : b.xxx() ... : : b.py: : : ... : : 除非executeA()被执行到, : : 不然a.py 和 b.py 乃至於其後会用到的module : : 都不会被load到。 : : --- : : 这原则的另个好处(?), : : 就是可以刚好绕过原原po的那种 : : a import b, b import a问题.... orz 藉这个标题请几位高手 review 一下我的做法。 我的 python 是自学的,所以可能做法很奇怪… 如果一段程式码还不到 class 的层次的话,我会在 function 里 加注,也会在档案的开头部份写明引入的 module。像这样: import someModule import anotherModule funcA(): #import someModule blah blah blah... funcB() #import anotherModule blah blah blah... 这样的目的有二: 1). 我随时可以把 funcA() 整段程式复制以後贴到别的地方用, 只要把其内的第一行解注就行了。 2). 在 trace code 的时候,很方便就知道这个 funcA() 用到的 的 module 名称是什麽。 这样很「不简洁」,但在维护可读性的前提下(因为我记性很差, 两天没碰,就忘了自己写什麽了),不知道有没有更好的做法呢? 谢谢 pw. --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.224.123.80
1F:推 juiz:我的 code 里全都是 in function import 这种 anti pep8 :) 10/24 19:44
2F:→ buganini:我觉得in function import以locality的角度来看是比较好 10/24 21:47
3F:→ buganini:也比较不会删code的时候忘了删之类的…但其实这个问题, 10/24 21:49
4F:→ buganini:或是要列举depencendy的需求,应该都可以用IDE或其他工具 10/24 21:50
5F:→ buganini:才是 10/24 21:50
6F:→ buganini:不过如果是要自动移除没用到的import这不好作,要 10/24 21:51
7F:→ buganini:grep import倒是很容易,所以我其实比较支持in function 10/24 21:51
8F:→ buganini:import 10/24 21:51
9F:推 keitheis:同意…不过懒得改,不一致性还是架构上的大敌 10/25 01:08







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP