告诉执行操作的函数和返回的函数之间的区别

时间:2016-12-09 22:19:49

标签: python function

是否有一种简单的方法可以确定/记住哪些函数返回一个新对象,哪些函数对现有对象起作用。例如,program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, // Vcl.Forms, // uncomment to get an ERROR_BUSY Winapi.Windows; var hSaveDesktop, hDesktop: HDESK; begin hSaveDesktop := GetThreadDesktop(GetCurrentThreadId); Win32Check(hSaveDesktop <> 0); hDesktop := OpenDesktop('default_set', 0, True, GENERIC_ALL); Win32Check(hDesktop <> 0); try Win32Check(SetThreadDesktop(hDesktop)); try // -- finally Win32Check(SetThreadDesktop(hSaveDesktop)); end; finally Win32Check(CloseDesktop(hDesktop)); end; end. 作用于该实际对象,而list.append('new stuff')返回需要在某处分配的新字符串。

我永远不得不查找(或打开Python解释器以快速检查)哪些函数作用于哪些函数以及哪些函数返回。

3 个答案:

答案 0 :(得分:2)

没有完全可靠的方法,但有一些很好的启发式方法:

  • 如果一个对象是不可变的,那么它的所有方法都不会改变它,当然,即使那些像str.replace这样的方法确实发生了变异。
  • sortedset.intersection等带有形容词或名词的名称,通常会产生新的对象。
  • 如果一个对象是可变的,那么带有动词名称的方法通常会修改该对象。这可能是list.appendset.add
  • 之类的内容

不幸的是,不是每个人都选择好名字,所以我们有numpy.sort这样的东西,它产生NumPy数组的排序副本,实际上应该被称为numpy.sorted。最可靠的方法是检查文档或在解释器会话中测试它。

答案 1 :(得分:1)

这就是我通常做的事情,我打开python解释器并通过编写片段来尝试不同的事情。然而,有更多强大的方法可以在键入时显示元数据,例如,您可以使用PyCharm为您提供type hinting,它将告诉您正在尝试访问的对象中的可用函数以及所需的参数和返回提示。

答案 2 :(得分:0)

据我所知,不,没有比你描述的方法更简单的方法。

大多数人(包括我!)学习的方式是做更多的编程,记住常用的功能,并查看那些你不知道的手册:)