Python 常用内置函数
目录
1、enumerate函数
1.1、for循环中使用
1.2、enumerate指定索引的起始值
1.3、enumerate在线程中的作用
2、Map 函数
2.1、map()函数可以传多个迭代器对象
3、lambda表达式(匿名函数)
示例
4、sort函数和sorted函数
4.1、sort()函数
4.2、sorted函数
4.3、关键字参数key的使用
4.3.1. 使用内置函数作为key
4.3.2. 使用lambda函数作为key
4.3.3、 多级排序
5、filter函数
6、 eval和exec函数
6.1、eval() 函数
6.2、exec() 函数
7、repr函数
7.1、str()和repr()区别
7.1、'!s' ,'!r' 和 '!a' 的使用
8、join函数
1、enumerate函数
功能:用于同时遍历数据对象的索引和值。它常用于迭代序列类型(如列表、元组、字符串等),返回的是一个包含索引和值的元组。
作用:
start
参数可以设置起始索引值,便于与其他代码或计算习惯对齐。1.1、for循环中使用
dict = [{"name":"Hello", "age":18}, {"name":"Tom", "age":24}, {"name":"Cat", "age":28}]
for index,t in enumerate(dict):
print (index, t)
1.2、enumerate指定索引的起始值
dict = [{"name":"Hello", "age":18}, {"name":"Tom", "age":24}, {"name":"Cat", "age":28}]
for index,t in enumerate(dict, 1):
print (index, t)
1.3、enumerate在线程中的作用
import threading
def task():
time.sleep(3)
print("this is task")
if __name__ == '__main__':
t1 = threading.Thread(target=task)
t2 = threading.Thread(target=task)
t1.start()
t2.start()
for i, thread in enumerate(threading.enumerate()):
print(f"Thread {i}: {thread.name}")
t1.join()
t2.join()
2、Map 函数
功能:map
函数用于将指定函数应用于可迭代对象(如列表)的每个元素,并返回一个迭代器,其中包含应用函数后的结果。
语法:map(func, *iterables)
作用:
map
返回一个迭代器,支持惰性计算,避免了不必要的内存占用,尤其是对于大型数据集示例:
t = ['1', '2', '3', '4', '5', '6']
print(t)
res = map(lambda x: int(x) * int(x), t)
for i in res:
print(i, end=' ')
print()
# 此时迭代器中数据已为空
print(list(res))
2.1、map()函数可以传多个迭代器对象
map
函数会将提供的函数应用于来自多个可迭代对象的对应元素,直到其中一个可迭代对象耗尽为止示例:
list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 3, 4, 5, 6]
list3 = [1, 2, 3, 4, 5, 6, 7]
def func(x, y, z):
return x, y, z
# 此处的map函数传入了多个迭代器对象
res = map(func, list1, list2, list3)
# 因为 list1 的长度最短,所以 map 会在 list1 长度的限制下进行映射,即到 list1 的最后一个元素为止
print(list(res))
3、lambda表达式(匿名函数)
Lambda表达式,也称为匿名函数,是Python等编程语言中一种快速定义单行的小函数的方法。使用lambda表达式可以写出更简洁、更清晰的代码,尤其是在需要使用函数对象的场合。Lambda表达式的基本语法如下:
lambda 参数列表: 表达式
return
,表达式的计算结果会自动成为这个函数的返回值。示例
# 使用lambda表达式定义一个简单的加法函数
add = lambda x, y: x + y
# 调用这个函数
print(add(3, 5)) # 输出8
map()
函数使用:# 使用lambda表达式和map()函数将列表中的每个元素乘以2
numbers = [1, 2, 3, 4]
doubled = map(lambda x: x * 2, numbers)
# 将map对象转换为列表
doubled_list = list(doubled)
print(doubled_list) # 输出[2, 4, 6, 8]
filter()
函数使用:# 使用lambda表达式和filter()函数过滤出列表中的偶数
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
# 将filter对象转换为列表
even_numbers_list = list(even_numbers)
print(even_numbers_list) # 输出[2, 4, 6]
4、sort函数和sorted函数
4.1、sort()函数
示例:
numbers = [3, 2, 8, 5, 1]
numbers.sort() # 默认升序排序
print(numbers) # 输出: [1, 2, 3, 5, 8]
numbers.sort(reverse=True) # 降序排序
print(numbers) # 输出: [8, 5, 3, 2, 1]
4.2、sorted函数
示例:
numbers = [3, 2, 8, 5, 1]
sorted_numbers = sorted(numbers) # 默认升序排序,返回新列表
print(sorted_numbers) # 输出: [1, 2, 3, 5, 8]
print(numbers) # 输出: [3, 2, 8, 5, 1],原列表不变
sorted_numbers_desc = sorted(numbers, reverse=True) # 降序排序
print(sorted_numbers_desc) # 输出: [8, 5, 3, 2, 1]
4.3、关键字参数key的使用
4.3.1. 使用内置函数作为key
示例1:按字符串长度排序
words = ['banana', 'apple', 'cherry', 'date']
words.sort(key=len)
print(words) # 输出: ['date', 'apple', 'cherry', 'banana']
# 或者使用sorted()函数,不会改变原列表
sorted_words = sorted(words, key=len)
print(sorted_words) # 输出: ['date', 'apple', 'cherry', 'banana']
示例2:按数字大小排序(字符串形式的数字)
numbers_str = ['10', '3', '22', '1']
numbers_str.sort(key=int)
print(numbers_str) # 输出: ['1', '3', '10', '22']
# 或者使用sorted()函数
sorted_numbers_str = sorted(numbers_str, key=int)
print(sorted_numbers_str) # 输出: ['1', '3', '10', '22']
4.3.2. 使用lambda函数作为key
lambda函数提供了一种快速定义单行小函数的方法,非常适合作为key参数的值。
示例1:按元组中某个元素排序
tuples = [(1, 'apple'), (3, 'banana'), (2, 'cherry')]
tuples.sort(key=lambda x: x[0]) # 按元组的第一个元素排序
print(tuples) # 输出: [(1, 'apple'), (2, 'cherry'), (3, 'banana')]
# 或者按照元组的第二个元素排序
tuples.sort(key=lambda x: x[1])
print(tuples) # 输出: [(1, 'apple'), (3, 'banana'), (2, 'cherry')]
示例2:按字典中的某个值排序
students = [{'name': 'Alice', 'age': 22}, {'name': 'Bob', 'age': 20}, {'name': 'Charlie', 'age': 23}]
students.sort(key=lambda x: x['age']) # 按字典中的'age'值排序
print(students)
# 输出: [{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 22}, {'name': 'Charlie', 'age': 23}]
4.3.3、 多级排序
示例1:先按年龄,再按姓名排序
students = [{'name': 'Alice', 'age': 22}, {'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 21}]
students.sort(key=lambda x: (x['age'], x['name']))
print(students)
# 输出: [{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 21}, {'name': 'Alice', 'age': 22}]
5、filter函数
功能:filter
函数是Python中的一个内置函数,用于过滤序列,过滤掉那些不符合条件的元素,返回一个迭代器。如果序列中的元素符合某个条件(即函数返回True),则保留这个元素,否则过滤掉。
filter
函数的基本语法如下:
filter(function, iterable)
返回值是一个迭代器,包含了所有符合条件(使判断函数返回True)的元素。
示例
# 使用filter函数过滤掉列表中的所有偶数
def is_odd(n):
return n % 2 == 1
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
filtered_numbers = filter(is_odd, numbers)
print(list(filtered_numbers))
# 输出: [1, 3, 5, 7, 9]
6、 eval和exec函数
在Python中,eval()
和exec()
是两个功能强大的内置函数,它们都能够执行字符串形式的Python代码,但它们在用法和返回值方面存在显著差异。
常见用途:将字符串转成相应的对象,例如 string 转成 list ,string 转成 dict,string 转 tuple 等等。
6.1、eval() 函数
eval()函数用于执行一个字符串表达式,并返回表达式的值。其基本语法如下:
eval(expression, globals=None, locals=None)
示例:
x = 1
result = eval('x + 1')
print(result) # 输出: 2
# 使用 globals 参数
result = eval('x + y', {'x': 1, 'y': 2})
print(result) # 输出: 3
# 处理复杂表达式
result = eval('[x**2 for x in range(5)]')
print(result) # 输出: [0, 1, 4, 9, 16]
注意事项:
6.2、exec() 函数
exec()函数用于动态执行Python代码。与eval()不同,exec()可以执行更复杂的代码块,包括多行代码、声明和控制流语句,但它不返回任何值(即返回值为None)。其基本语法如下:
exec(source, globals=None, locals=None)
exec("print('Hello, world!')") # 输出: Hello, world!
# 动态生成变量
exec("a = 10")
print(a) # 输出: 10
# 执行复杂代码块
code = """
def greet(name):
return f"Hello, {name}!"
result = greet("Alice")
print(result)
"""
exec(code) # 输出: Hello, Alice!
注意事项:
s = {'__builtins__': None}
eval("__import__('os').system('whoami')", s)
7、repr函数
7.1、str()和repr()区别
在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即str() 或者 repr() 。自定义对象输出格式需要重写函数__repr__。
str()和repr()区别:
示例:
示例:s = 'python'
a = str(s)
b = repr(s)
print(a)
print(b)
print(type(a))
print(type(b))
print(eval(b))
print("-" * 100)
print(a == b)
运行结果:
注意:
- 对于字符串类型,repr转换后外层会多一对引号,对于int类型转换为字符串类型不会。
- 命令行下直接输出对象调用的是对象的repr方法,而print输出调用的是str方法
7.1、'!s' ,'!r' 和 '!a' 的使用
示例:
def __repr__(self):
return f"user={self.user!r}, variant={self.variant!r}"
result = func(*args, **kwargs)
print(f" {func.__name__!r} returned {result!r}")
说明:
8、join函数
它的主要作用是将一个字符串列表(或数组)中的所有元素连接成一个单独的字符串,元素之间可以插入一个指定的分隔符。这个函数在处理文本、生成文件路径或URL时非常有用。
示例:
在Python中,join
是一个字符串方法,用于将序列(如列表)中的元素以指定的字符(或字符串)连接生成一个新的字符串。
separator = ", "
words = ["Hello", "world", "Python"]
sentence = separator.join(words)
print(sentence) # 输出: Hello, world, Python
注意:分割对象储存的对象要为字符串,否则会报错
问题:如果储存非字符串的元组、列表、字典等拼接时报错,比如元组储存数字进行连接,则会报错
示例:
a = (1,2,3) #定义元组a
';'.join(a)
#报错:TypeError: sequence item 0: expected str instance, int found
解决方案:要将数字连接起来成为一个字符串,则结合for循环语句并将数字转为字符串再连接起来
a = (1,2,3) #定义元组a
';'.join(a)
#报错:TypeError: sequence item 0: expected str instance, int found
b = (186234,1385475,1235462)
';'.join(str(i) for i in b)
# 输出结果为:186234;1385475;1235462
#调用set函数去重处理
e = (1,2,3,2) #定义元组a
'、'.join(str(i) for i in set(e))
# 输出结果为:1、2、3
作者:测试有道