乐趣区

关于python:10个你必须知道的Python内置函数

1. reduce()
reduce() 是 functools 模块上面的一个函数,接管两个参数,一个是函数对象,一个是可迭代对象(比方 list),reduce 每次会把迭代对象中的下一个元素作用在函数上做累积计算,最初失去一个值。

来看个例子你就明确

# 创立函数
def add(a, b):
    result = a + b
    print(f"{a} + {b} = {result}")
    return result


from functools import reduce

result = reduce(add, [1, 2, 3, 4])
print("后果:", result)

输入

1 + 2 = 3
3 + 3 = 6
6 + 4 = 10
后果:10

执行过程:第一次将列表中的前两个数取出来作为函数 add 的参数,第二次将上一次函数 add 的返回值与列表的第 3 个数作为参数,依此类推,最初失去一个值。这就是 reduce 的作用。有点像万物归一的感觉。

当然,如果只是计算列表中的元素之和,大可不必绕这么大弯子用 reduce 来解决,间接用 sum 函数就能够解决。

result = sum([1, 2, 3, 4])
如果是计算列表中元素的乘积,python 并没有内置的函数间接计算,这时候咱们能够借用 reduce 来解决

def mul(a, b):
    return a * b

result = reduce(mul, [1, 2, 3, 4])
print("后果:", result)

输入

后果:24

或者应用 lambda 匿名函数

result = reduce(lambda a, b: a * b, [1, 2, 3, 4])

甚至能够间接应用 operator 模块下的乘法操作符函数

from operator import mul
result = reduce(mul, [1, 2, 3, 4])
print("后果:", result)

最初你会发现解法其实很多种,不过咱们应该记住 python 之禅外面那句话:

There should be one– and preferably only one –obvious way to do it.

用最合适的形式去做一件事

2. split()
split 接管一个参数,用于将字符串切割成列表,比方一段英文字符串依照空格切割就能够统计出单词的个数,

words = "python is the best programming language"
words = words.split(" ")
print(words)

输入

['column1', 'column2', 'column3']

3. enumerate()
enumerate 函数用于迭代列表等可迭代对象,它的应用场景个别呈现在你须要获取列表的下标地位时,咱们晓得间接用 for 循环去迭代列表时,是拿不到元素下标地位的,而 enumerate 就能够获取,否则你还得本人去定义一个索引变量。

words = ['python', 'is', 'the', 'best', 'programming', 'language']
index = 0
for w in words:
    print(index, w)
    index += 1
0 python
1 is
2 the
3 best
4 programming
5 language

应用 enumerate 函数,解决起来就更优雅了

for index, w in enumerate(words):
    print(index, w)
0 python
1 is
2 the
3 best
4 programming
5 language

4. map()
map 是一个与 reduce 函数对应的函数,Google 的 map/reduce 框架的思维其实就是从这两个函数借鉴而来的。map 函数用于把一个列表通过函数解决,映射成一个新的列表。例如给列表的每个元素做平方,将列表元素转换成字符串,失去一个新的列表。

result = map(lambda x: str(x), [1, 2, 3, 4])
print(list(result))
result = map(lambda x: x * x, [1, 2, 3, 4]))
print(list(result))

输入:

['1', '2', '3', '4']
[1, 4, 9, 16]

此外,map 函数还能够承受多个列表参数,使得多个列表合并为一个列表成为可能,例如,将两个列表雷同地位的元素相加失去一个新的列表

def merge(x, y):
    return x + y


result = map(merge, [1, 2, 3], [3, 2, 1])
print(list(result))

输入

[4, 4, 4]

5. getattr()
getattr() 返回对象属性对应的值,承受两个参数,第一个是对象,第二个是属性名,这个函数通常用户动静或者某个对象上面的某些属性的值,看例子:

class Foo:
    def __init__(self):
        self.a = 10


foo = Foo()

a = getattr(foo, "a")
print(a)

输入

10

你可能会问,我间接 foo.a 不就能够获取 a 属性的值了吗?失常状况是这样没错,如果是你在不晓得什么状况下要获取什么属性的值时,这时候 getattr 就能够派上用场了。初学者可能还体验不到,当你尝试去写些框架级的代码时,你要想起来有这样的函数能够应用就行。

6. slice
slice 是一个切片函数,切片操作你可能应用过,通过切片来获取列表的子集,例如:

s = [1,2,3,4]
>>> s[1:3]  # 获取列表 s 中第 1 到第 3 之间的元素组成的子列表 

“1:3” 其就是 就是 slice(1:3) 函数的缩写形式,前者就像是语法糖

s = [1, 2, 3, 4]
print(s[slice(1, 3)])

通常理论利用过程中,间接用语法糖的写法就能够,没必要用 slice 函数进行切片,然而你至多应该晓得 slice 是怎么用的。

7. sorted()

sorted 函数应该日常代码中,算是一个高频函数了,用于将列表等可迭代对象进行排序,它不会扭转原列表的程序,而是返回一个新的列表。默认依照升序排列

nums = [4, 5, 6, 3, 1]

print(sorted(nums))

输入

[1, 3, 4, 5, 6]

如果想要降序排列,则须要指定第二个参数:

reverse=True

nums = [4, 5, 6, 3, 1]
print(sorted(nums, reverse=True))  # [6, 5, 4, 3, 1]

sorted 函数的弱小之处远不止如此,因为你还能够自定义排序规定,比方参加比拟是一个自定义的类 Student,我须要依照 Student 外面的年龄 age 进行排序,这时候咱们须要自定义排序因子函数

def my_sort_key(s):
    return s.age


class Student:
    def __init__(self, age):
        self.age = age

    def __str__(self):
        return f"Student({self.age})"


s1 = Student(12)
s2 = Student(2)
s3 = Student(30)

new_list = (sorted([s1, s2, s3], key=my_sort_key))
for i in new_list:
    print(i)

输入:

Student(2)
Student(12)
Student(30)

8. format
format 函数已经字符串格式化最罕用的函数,应用也是非常简单,但自从 f 字符串呈现之后,format 的性能逐步被取代,然而 3.6 之前还是能够常见到该函数的利用场景。

s = "{} is first name"
print(s.format("liu"))

如果须要占位符比拟多搞不清秩序的话,能够给每个占位符一个名字,这样就不拍对不上地位了

s = "{first_name} is first name"
print(s.format(first_name="liu"))

9. join()
join 也是比拟罕用的一个内置函数,它能够将列表对象用指定的字符作为元素之间的连贯,转换为字符串。

words = ['python', 'is', 'the', 'best', 'programming', 'language']

print(" ".join(words)) # 用空格连贯 python is the best programming language

10. type
type 我认为是 python 最难了解的一个内置函数了,老手可能认为 type 就是一个用来查看某个对象的类型是什么,例如:

print(type(10)) # <class 'int'>
print(type([])) # <class 'list'>
print(type("s"))#  <class 'str'>

它的另一个作用是能够用 type 来创立类,个别状况下,咱们都用关键字 class 来定义一个类,而 type 也能够用来创立类

>>> Person = type("Person", (), {"live":True})
>>> Person
<class '__main__.Person'>

第一个参数 Person 是类的名字,第二个参数用来指定父类是谁,第三个参数是这个类的类属性有哪些。下面这段代码等价于:

>>> class Person:
...     live = True
...
>>> Person
<class '__main__.Person'>

最近整顿了几百 G 的 Python 学习材料,蕴含新手入门电子书、教程、源码等等,收费分享给大家!想要的返回“Python 编程学习圈 ”,发送“J”即可收费取得

退出移动版