python函数的用法

时间:2018-07-06 12:53:43

标签: python

我是python /编程的新手。这是关于在python中使用函数的首要问题。

如果我有一个名为myList的列表。

  • (a)如果要对其进行排序,我会使用myList.sort()
  • (b)如果我要对其进行临时排序,则可以使用sorted(myList)

请注意,使用两个函数之间的区别是,一个函数是将函数应用于myList,另一个函数是将myList用作函数的参数。

我的问题是,每次使用函数时。

  • 我怎么知道该函数是否应作为要应用于对象的“动作”(在(a)中使用),或
  • 应该将一个对象作为参数传递给函数(在(b)中)。

我已经很困惑了很长时间。感谢任何解释。

谢谢。

3 个答案:

答案 0 :(得分:2)

list.sort和sorted(list)有两个大区别

  1. list.sort()对列表进行原位排序,这意味着它将修改 清单。排序的函数不会修改原始列表,但会返回 排序列表

  2. list.sort()仅适用于list(它是一种方法),但已排序的内置函数可以采用任何可迭代的对象。

请仔细阅读此useful documentation

答案 1 :(得分:1)

sort()是一个就地函数,而sorted()将返回一个已排序的列表,但不会就地改变您的变量。以下说明了区别:

l = [1, 2, 1, 3, 2, 4]
l.sort()
print(l) --returns [1, 1, 2, 2, 3, 4]

l = [1, 2, 1, 3, 2, 4]
new_l = sorted(l) 
print(new_l) -- returns [1, 1, 2, 2, 3, 4]
print(l) -- [1, 2, 1, 3, 2, 4]

如果要保持列表的原始顺序,请使用sorted,否则可以使用sort()

答案 2 :(得分:1)

只有sorted是函数-list.sortlist类型的方法。

诸如sorted之类的功能不仅适用于特定类型。例如,您可以获得排序的listset甚至是临时生成器。只有输出是具体的(您总是会得到一个新的list),而不是输入。

诸如sort之类的方法仅适用于保存它们的类型。例如,有一个list.sort方法,但没有dict.sort方法。即使对于方法名称相同的类型,切换它们也不明智-例如,set.copy不能用于复制dict

区分两者的一种简单方法是,函数位于常规名称空间(例如模块)中。另一方面,方法仅存在于类及其实例内部。

sorted     # function
list.sort  # method

import math
math.sqrt                # function
math.pi.as_integer_ratio # method

通常,Python通常将函数用于不可变动作,并将方法用于可变动作。例如,sorted提供了一个 new 排序列表,使旧列表保持不变。 my_list.sort()对现有列表进行排序,不提供新列表。

my_list = [4, 2, 3, 1]
print(sorted(my_list))  # prints [1, 2, 3, 4]
print(my_list)          # prints [4, 2, 3, 1] - unchanged by sorted
print(my_list.sort())   # prints None - no new list produced
print(my_list)          # prints [1, 2, 3, 4] - changed by sort