跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 中给函数指定 attribute 是良好的实践吗?
未分類
25 3 月 2020

Python 中给函数指定 attribute 是良好的实践吗?

Python 中给函数指定 attribute 是良好的实践吗?

資深大佬 : raymanr 23

在看绘制决策树代码时候看到作者这么用, 这个稍微有点违反了我的感觉, 伪代码大概如下:

def plot_tree(tree):     fig_size = plot_tree.fig_size     offset = plot_tree.offset     plot_tree.offset = some_func(fig_size, offset)  # 这里给函数指定了 attr     for key in tree.keys():         if isinstance(tree[key], dict):             plot_tree(tree[key])         else:             plot_node(tree[key])                       def main():     tree = make_tree()     plot_tree.fig_size = size_func(tree)  # 这里给函数指定了 attr     plot_tree.offset = offset_func(tree)  # 这里给函数指定了 attr     plot_tree(tree) 

我觉得似乎把属性作为参数传递更符合大部分人阅读习惯?
还是我段位不够?

大佬有話說 (9)

  • 資深大佬 : ipwx

    这么写就是懒。本来写个类就完事了,非要搞 anti-pattern 。

    三个月以后看这个程序就是臭的没法修改的。

  • 資深大佬 : ipwx

    我见过好多论文代码。

    在 python 里面用 functional pattern 的一些高阶技巧(比如 monadic combinator )也就算了,就是掉书袋子难以理解,但是不看实现细节只看接口也不是不能看代码,反正是无副作用的。

    给函数赋予 context 然后自己里面用我也不是没见过,但是一般是外面套个函数,返回里面的函数。把外部函数的参数和局部变量当闭包和内部函数裹在一起而已,我也不是没在别的编程语言见过,比如 JS 。其实也是懒,不想写类,但是没有副作用,也能用,只不过没有 IDE 的智能提示而已。反正搞学术的一般也懒得学 IDE 。(虽然正经上 IDE 还是很香的)

    比如 https://github.com/openai/glow/blob/master/model.py#L141
    – – – –

    但是懒到这种程度我也没法说什么了,这个副作用太大了。主你要这么做,以后出了 BUG 调一天可别怪我没提醒你。

  • 主 資深大佬 : raymanr

    @ipwx
    我看到的这段代码是 2010 年的了, 也不清楚是不是那时候的个别情况.

    还有比如 if 判断和执行 写在同一行, 赋值变量使用 ; 在同一行多个赋值等情况

    我还正在一点点的边改边写自己的版本, 不过给函数指定 attr 这种我以前真的是想都没想过, 所以上来也求证下这个合适不

  • 資深大佬 : julyclyde

    前一年不是很流行所谓闭包么
    这就是

  • 資深大佬 : Vegetable

    我觉得不是, 但是可以这么用, 只有在某些很特殊的情况下才使用这种方式.
    比如

    https://docs.djangoproject.com/en/3.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

  • 主 資深大佬 : raymanr

    @julyclyde
    我一直以为闭包是指的用工厂函数生产函数的做法

    不过你这么一提我倒是想起来了, js 里面好像有利用 function 封装对象的操作

    如果一个 function 本身再给他指定一些 function 作为 attr , 好像是有那么点意思了

    啊, js 真是混乱邪恶

  • 資深大佬 : ipwx

    @julyclyde 这不是闭包。你看我给的连接才叫闭包。

  • 資深大佬 : julyclyde

    @raymanr 你这四个字真是总结的好

  • 資深大佬 : julyclyde

    @ipwx 好的,我看看你这个链接。多谢

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具