Python/ target=_blank class=infotextkey>Python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好了可以大大提高代码效率。
•面向过程:将一个大问题分成若干个小问题进行逐一的处理•函数式编程:是将编程语言的函数和数学意义的函数相结合,如y=2*x+1相当于
def func(x):
return 2 * x + 1
•面向对象:将事物的本质通过建立一系列模型来体现出事物的本质和特征
•函数接收的参数可以是另一个函数的函数名•在函数的返回值中包含于一个函数名
•将列表[1, 2, 3, 4]中的每个元素进行加10
方法1:
list01 = [1, 2, 3, 4]
def func(x):
return x + 10
def add_num(function, array):
res = []
for i in array:
res.Append(function(i))
return res
print(add_num(func, list01))
方法2:
list01 = [1, 2, 3, 4]
def add_num(function, array):
res = []
for i in array:
res.append(function(i))
return res
print(add_num(lambda x:x+10, list01))
使用map()函数:
list01 = [1, 2, 3, 4]
print(list(map(lambda x:x+10, list01)))
运行结果:
[11, 12, 13, 14]
map()函数的用法: map(处理方法, 可迭代对象)
功能: 对可迭代对象中的每个元素按照指定的处理方法进行操作,最后以迭代类型输出,可将其转换为相应的数据类型进行输出
•将列表[{class:101, name:zhang},{class:102, name:li},{class:201, name:wang},{class:202, name:zhao}]中的年级是一年级的删除
方法1:
def func(x):
return x[class][0]
def class_list(function, array):
new_list = []
for i in array:
if function(i) != 1:
new_list.append(i)
return new_list
print(class_list(func, student_list))
方法2:
def class_list(function, array):
new_list = []
for i in array:
if function(i) != 1:
new_list.append(i)
return new_list
print(class_list(lambda x:x[class][0], student_list))
filter()方法:
print(list(filter(lambda x:x[class][0] != 1, student_list)))
运行结果:
[{'class': '201', 'name': 'wang'}, {'class': '202', 'name': 'zhao'}]
filter()函数的用法: filter(处理方法, 可迭代对象)
“处理方法”得到的结果必须是一个布尔值
功能: 将可迭代对象中的元素按照指定的处理方法进行删选后以迭代类型输出,可将其转换为相应的数据类型进行输出
在Python2中可直接使用reduce()函数,在Python3中需要导入functools模块后才能使用。
•将列表[2, 3, 4, 10]中的元素跟指定的初始值(可选)累乘后进行输出
方法1:情况1:没有指定初始值
def func(x, y):
return x * y
def times(function, array, init=None):
if init == None:
res = 1
else:
res = init
for num in array:
res = function(res, num)
# res *= num
return res
print(times(func, list01))
情况2:指定初始值
def func(x, y):
return x * y
def times(function, array, init=None):
if init == None:
res = 1
else:
res = init
for num in array:
res = function(res, num)
# res *= num
return res
print(times(func, list01, 100))
方法2:情况1:没有指定初始值
def times(function, array, init=None):
if init == None:
res = 1
else:
res = init
for num in array:
res = function(res, num)
# res *= num
return res
print(times(lambda x,y:x*y, list01))
情况2:指定初始值
def times(function, array, init=None):
if init == None:
res = 1
else:
res = init
for num in array:
res = function(res, num)
# res *= num
return res
print(times(lambda x,y:x*y, list01, 100))
reduce()方法:情况1:没有指定初始值
from functools import reduce
print(reduce(lambda x,y:x*y, list01))
情况2:指定初始值
from functools import reduce
print(reduce(lambda x,y:x*y, list01, 100))
reduce()函数用法: reduce(处理方法, 可迭代对象, 初始值)
功能: 将可迭代对象中的元素按照制定的处理方法进行运算后输出
当需要对一个列表进行去重操作的时候,set()函数就派上用场了。
obj = ['a','b','c','b','a']
print(set(obj))
# 输出:{'b', 'c', 'a'}
set([iterable])用于创建一个集合,集合里的元素是无序且不重复的。
集合对象创建后,还能使用并集、交集、差集功能。
A = set('hello')
B = set('world')
A.union(B) # 并集,输出:{'d', 'e', 'h', 'l', 'o', 'r', 'w'}
A.intersection(B) # 交集,输出:{'l', 'o'}
A.difference(B) # 差集,输出:{'d', 'r', 'w'}
之前有人问如何用python写一个四则运算器,输入字符串公式,直接产生结果。
用eval()来做就很简单:
eval(str_expression)作用是将字符串转换成表达式,并且执行。
a = eval('[1,2,3]')
print(type(a))
# 输出:<class 'list'>
b = eval('max([2,4,5])')
print(b)
# 输出: 5
在处理数据过程中,我们经常会用到排序操作,比如将列表、字典、元组里面的元素正/倒排序。
这时候就需要用到sorted() ,它可以对任何可迭代对象进行排序,并返回列表。
对列表升序操作:
a = sorted([2,4,3,7,1,9])
print(a)
# 输出:[1, 2, 3, 4, 7, 9]
对元组倒序操作:
sorted((4,1,9,6),reverse=True)
print(a)
# 输出:[9, 6, 4, 1]
使用参数:key,根据自定义规则,按字符串长度来排序:
chars = ['apple','watermelon','pear','banana']
a = sorted(chars,key=lambda x:len(x))
print(a)
# 输出:['pear', 'apple', 'banana', 'watermelon']
根据自定义规则,对元组构成的列表进行排序:
tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
# key=lambda x: x[1]中可以任意选定x中可选的位置进行排序
a = sorted(tuple_list, key=lambda x: x[1])
print(a)
# 输出:[('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]
如果需要对序列的元素进行反转操作,reversed()函数能帮到你。
reversed()接受一个序列,将序列里的元素反转,并最终返回迭代器。
a = reversed('abcde')
print(list(a))
# 输出:['e', 'd', 'c', 'b', 'a']
b = reversed([2,3,4,5])
print(list(b))
# 输出:[5, 4, 3, 2]
-END-