Python零基础教程:内置函数详解

1 ,filter(function, sequence):

对sequence中的item依次执行function(item),将执行结果为True的item做成一个filter object的迭代器返回。可以看作是过滤函数。

str = ['a', 'b','c', 'd']
  
def fun1(s):
    if s != 'a':
        return s
  
  
ret = filter(fun1, str)
  
print(list(ret))# ret是一个迭代器对象      

2, map(function, sequence)

map()函数,可以将一个函数映射到一个可以枚举类型上面。对sequence中的item依次执行function(item),将执行结果组成一个List返回
另外map也支持多个sequence,当然这也要求function支持相应数量的参数输入。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
str = ['a', 'b','c','d']
  
def fun2(s):
  
    return s + "alvin"
  
ret = map(fun2, str)
  
print(ret)      #  map object的迭代器
print(list(ret))#  ['aalvin', 'balvin', 'calvin', 'dalvin']
>>> def cube(x): return x*x*x
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
>>> def cube(x) : return x + x
 
>>> def add(x, y): return x+y
>>> map(add, range(8), range(8))
[0, 2, 4, 6, 8, 10, 12, 14]

对sequence中的item依次执行function(item),将执行结果组成一个map object迭代器返回.
map也支持多个sequence,这就要求function也支持相应数量的参数输入:

def add(x,y):
    return x+y
print (list(map(add, range(10), range(10))))
##[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

3,reduce(function, sequence, starting_value)

对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用.

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from functools import reduce
  
def add1(x,y):
    return x + y
  
print (reduce(add1, range(1, 101)))## 4950 (注:1+2+...+99)
  
print (reduce(add1, range(1, 101), 20))## 4970 (注:1+2+...+99+20)

对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和,示例如下:

>>> def add(x,y): return x + y
 >>> reduce(add, range(1, 11))
(注:1+2+3+4+5+6+7+8+9+10>>> reduce(add, range(1, 11), 20)
(注:1+2+3+4+5+6+7+8+9+10+20

4,lambda

它允许你快速定义单行的最小函数(其本质就是函数),类似C语言中的宏,可以用在任何需要函数的地方,示例如下:

>>> g = lambda x: x * 2
>>> g(3)
6
>>> (lambda x: x * 2)(3)
6

普通函数与匿名函数的对比:

#普通函数
def add(a,b):
    return a + b
  
print add(2,3)
  
   
#匿名函数
add = lambda a,b : a + b
print add(2,3)
  
  
#========输出===========
5
5

匿名函数的命名规则,用lamdba 关键字标识,冒号(:)左侧表示函数接收的参数(a,b) ,冒号(:)右侧表示函数的返回值(a+b)。

因为lamdba在创建时不需要命名,所以,叫匿名函数

5,int64和int的区别?

int是Python的基本类型,而int64是numpy中引入的一个类,即numpy.int64;

使用numpy模块中的numpy.sum()方法得到的结果是Int64,而使用默认的sum()得到的结果是Int类型。

下面代码中,虽然执行结果a和b的数值都是6,但是类型不同。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import numpy as np
# a 的类型是int64
a = np.sum([1,2,3])
# b 的类型是int
b = sum([1,2,3])

int64不会报除0的错误(事实上numpy中的其他类型也不会报错,比如float64等);而int会报除0错误(其他基本类型也会,比如float等)

6,sorted函数

对sequence进行排序,直接看例子:

>>> s = [('a', 3), ('b', 2), ('c', 1)]
 
>>> sorted(s, key=lambda x:x[1])
s = [('a', 3), ('b', 2), ('c', 1)]

更多例子:

>>> l = ['foo', 'bar', 'far']
>>> map(lambda x: x.upper(), l)
['FOO', 'BAR', 'FAR']
>>> filter(lambda x: 'f' in x, l)
['foo', 'far']
>>> map(lambda x: x.upper(), filter(lambda x: 'f' in x, l))
['FOO', 'FAR']
>>> reduce(lambda a, b: a * b, xrange(1, 5)) # 计算 1*2*3*4 = 24
24

7,序列解包(for x,y in zip(keys,values):)详解

序列解包是一个非常重要和常用的一个功能,使用序列解包可以用非常简洁的方法完成复杂的功能。增强代码的可读性,减少代码量。

zip函数接受多个(包括0个和1个)序列作为参数,返回一个tuple列表。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
a, b, c = 1, 2, 3
print(a, b, c)
  
test_tuple = (False, 3.5, 'test')
d, e, f = test_tuple
print(d, e, f)
  
x, y, z = map(str, range(3))
  
print(x, y, z)  

输出结果为:

1 2 3
False 3.5 test
0 1 2

7.2 序列解包也可以用于列表和字典

字典的话默认是对“key” 进行操作,如需对“key”----“value” 进行操作则需要使用字典的items()方法进行操作。“value” 进行操作的话就使用values进行操作。

#列表进行解包
a = [1, 2, 3, 5, 6]
b, c, d, f, g = a
print(b, c, d, f, g)
  
print('---------------------------')
  
#字典进行解包
test_dicts = {'a': 'x', 'b': 1, 'c': 3}
  
q, w, e = test_dicts
r, t, y = test_dicts.items()
i, o, p = test_dicts.values()
  
print(q, w, e)
print(r, y, t)
print(i, o, p)

输出结果:

1 2 3 5 6
---------------------------
a b c
('a', 'x') ('c', 3) ('b', 1)
x 1 3

7.3 用序列解包同时遍历多个序列

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
list_1 = [1, 2, 3, 4]
list_2 = ['a', 'b', 'c']
  
for x, y in zip(list_1, list_2):
    print(x, y)

结果:

1 a
2 b
3 c

7.4 Python3.x和Python2.x在zip函数的区别

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
#注意:Python3.x和Python2.x这里的差别
#Python3.x
xyz = list(zip(x, y, z))
#Python2.x
#xyz = zip(x, y, z)
print(xyz)
#输出结果:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
posted @ 2022-10-07 20:27  I'm_江河湖海  阅读(2)  评论(0编辑  收藏  举报