Python常用内置函数
Python常用内置函数
匿名函数lambda
语法:lambda 参数1,参数2:函数体
多个参数之间逗号隔开,参数与函数体之间冒号隔开
调用方式大概有以下两种:
# 给lambda函数起一个名字,然后就象普通函数一样调用即可
fun = lambda x, y : x+y
fun(3, 4) # 函数名(实参)
# 直接给lambda加一个括号
(lambda x, y : x+y)(2, 3)
map
函数
语法:map(函数名/lambda表达式,可迭代对象)
,返回的是一个map
类型对象,可以用list
转为列表输出
作用就是将可迭代对象中的每个值分别作为实参传入前面的函数
list(map(lambda x:x**2, range(5))) # [0, 1, 4, 9, 16]
# 和下面的结果一样
[(lambda x:x**2)(i) for i in range(5)] # [0, 1, 4, 9, 16]
# 对于多个输入值的函数映射,可以通过追加迭代对象实现,多个迭代对象逗号隔开即可
list(map(lambda x, y:str(x)+'_'+y, range(5), list('abcde')))
zip
函数
将传入的等长度的迭代对象相应位置的元素打包成一个元组,返回所有位置构成的元组的zip
对象,可以用list
或tuple
查看结果
list(zip([1, 2, 3], [3, 4, 5])) # [(1, 3), (2, 4), (3, 5)]
for m,n in zip([1, 2, 3], [3, 4, 5]):
print(m, n)
"""
1 3
2 4
3 5
"""
dict(zip([1, 2, 3], [1, 1, 5])) # 当需要将两个列表对应元素做字典的键值对映射时,可以用dict+zip实现
*
的用法
*
后面接列表或者其他可迭代对象时是将可迭代对象中的元素解出来,相当于列表去掉外面的括号只保留里面的元素一样
表达式中不能单独使用*后面接变量形式,*
一般用于print语句;与zip结合;函数接受形参或者传递实参中
l = [1, 2, 4]
*l # 这个会报错
print(*l) # 1 2 4 为啥放在print中就不会报错了?,这里可以看到把l中的元素解出来了
m = [2, 3, 4]
zip_ = zip(m, l)
list(zip_) # [(2, 1), (3, 2), (4, 4)]
list(zip(*zip_)) # [(2, 3, 4), (1, 2, 4)]
print(*list(zip(*zip_))) # (2, 3, 4) (1, 2, 4)
*
和**
用在函数的形参中用于接受多个未知参数或者关键字传参
# 函数形参中添加是为了在调用函数时,直接将传入的多个位置参数放入一个元组中
def fun1(*a): # 将多个位置参数放入一个元组中赋值给a
print(a)
def fun2(**b): # 将多个关键字传参放入一个字典中赋值给b
print(b)
fun1(1, 2)
fun2(m='n', a='1')
# 输出
"""
(1, 2)
{'m': 'n', 'a': '1'}
"""
# *后面接字典
print(*{'m':10, 'n':2}) # m n
print(*{'m':10, 'n':2}.items()) # ('m', 10) ('n', 2)
*
和**
用在函数的实参中用于解开实参分别赋值给相应的形参
def f1(a, b):
print(a)
def f2(m, n):
print(m)
f1(*[1, 2])
f2(**{'m':10, 'n':2}) # 注意传入字典中的键要和形参名一致
"""
1
10
"""
enumerate
函数
enumerate
是一种特殊的打包,它可以在迭代时绑定迭代元素的遍历序号:
L = list('ab')
for index, value in enumerate(L):
print(index, value)
"""
0 a
1 b
"""
input
函数
变量 = input("提示性文字")
将用户输入赋值给一个变量,会把用户的输入转为字符串,即使你输入的是数字
a = input('输入一串数字,空格隔开')
a # '1 2 3'
关于字符串的一些处理,可以处理接受input
的变量,因为该变量是字符串
' 234 55'.strip() # 取出字符串前后的空格
' 234 55 1'.split() # 默认分隔符为空格(一个或多个),用空格划分字符串,并将结果放入列表中
"""
'234 55'
['234', '55', '1']
"""
# input搭配eval函数,可以将字符串转为数字
a = eval(input('请输入一个数字:')) # 输入999,输出就是int型数字,不是字符串了
type(a) # int
# input搭配split,map,lambda使用,可以将输入的一串空格隔开的数字放入列表中
n = input('输入一串数字空格隔开') # 输入'1 2 3'
n = list(map(lambda x: int(x), n.split())) # 也可以用[(lambda x: int(x))(x) for x in n.split()]代替
n # [1, 2, 3, 4]
参考链接:
[1] python函数参数中令人看不懂的*,**表示什么?
[2] Python基础