是否有一种简单的方法可以确定/记住哪些函数返回一个新对象,哪些函数对现有对象起作用。例如,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解释器以快速检查)哪些函数作用于哪些函数以及哪些函数返回。
答案 0 :(得分:2)
没有完全可靠的方法,但有一些很好的启发式方法:
str.replace
这样的方法确实发生了变异。sorted
或set.intersection
等带有形容词或名词的名称,通常会产生新的对象。list.append
或set.add
。不幸的是,不是每个人都选择好名字,所以我们有numpy.sort
这样的东西,它产生NumPy数组的排序副本,实际上应该被称为numpy.sorted
。最可靠的方法是检查文档或在解释器会话中测试它。
答案 1 :(得分:1)
这就是我通常做的事情,我打开python解释器并通过编写片段来尝试不同的事情。然而,有更多强大的方法可以在键入时显示元数据,例如,您可以使用PyCharm为您提供type hinting,它将告诉您正在尝试访问的对象中的可用函数以及所需的参数和返回提示。
答案 2 :(得分:0)
据我所知,不,没有比你描述的方法更简单的方法。
大多数人(包括我!)学习的方式是做更多的编程,记住常用的功能,并查看那些你不知道的手册:)