您必须掌握的 10 个 Python 内置函数

摘要:print 函数是显示信息、调试和与用户交互的基础。掌握 print 可以让您在 Web 开发、数据科学和系统管理等各个领域有效地传达程序的状态和输出。

print 函数是显示信息、调试和与用户交互的基础。掌握 print 可以让您在 Web 开发、数据科学和系统管理等各个领域有效地传达程序的状态和输出。

调试:显示变量值以跟踪系统脚本中的程序执行情况。用户交互:在命令行应用程序中为管理后端流程的 Web 开发人员提供反馈或提示。数据报告:输出数据科学项目中的数据分析结果。# Forgetting to convert non-string types can lead to errors in certain contextsvalue = 42print("The answer is " + str(value)) # Correct# print("The answer is " + value) # Raises TypeError

print 通常很快,但过度使用(尤其是在循环中)会由于 I/O 开销而减慢程序的速度。

import timestart = time.timefor _ in range(10000): pass # Replace with print statements to testend = time.timeprint(f"Time without print: {end - start} seconds")

使用格式化字符串 (f 字符串) 以提高可读性和效率。

name = "Alice"age = 30print(f"{name} is {age} years old.")

虽然 print 本身很少引发异常,但请确保正在打印的数据格式正确,以避免 TypeError。

当对使用 print 的函数进行单元测试时,你可以使用 unittest.mock 捕获 stdout 来验证输出。

from unittest.mock import patchimport iodef greet(name): print(f"Hello, {name}!")@patch('sys.stdout', new_callable=io.StringIO)def test_greet(mock_stdout): greet("Alice") assert mock_stdout.getvalue == "Hello, Alice!\n"

避免打印敏感信息,例如密码或密钥,尤其是在生产环境中。

确定数据结构的大小是各个领域中经常需要的。len 提供了一种快速有效的方法来获取可迭代对象的长度,这在数据分析、Web 开发和系统管理中至关重要。

描述

返回对象(如字符串、列表、元组或字典)的长度(项数)。

困难

初学者

用法实际应用数据科学:对数据集中的项或表中的行进行计数。Web 开发:验证用户输入表单中的元素数。系统管理:检查目录列表中的文件数。fruits = ['apple', 'banana', 'cherry']print(len(fruits)) # Correct usageempty_list = print(len(empty_list)) # Outputs 0# Applying len to a non-iterable object# number = 10# print(len(number)) # Raises TypeError性能考虑

len 在列表和其他内置集合上具有 O(1) 时间复杂度,使其非常高效。

基准:

import timelarge_list = list(range(1000000))start = time.timelength = len(large_list)end = time.timeprint(f"len on large list: {length} elements, Time: {end - start} seconds")最佳实践

使用 len 检查空集合,而不是与 0 进行比较。

if not items: print("No items found.")# More Pythonic:if not items: print("No items found.")错误处理

将 len 应用于不可迭代对象会引发 TypeError。在应用 len 之前,使用 isinstance 验证对象是否可迭代。

if isinstance(obj, (str, list, tuple, dict, set)): print(len(obj))else: print("Object is not iterable.")测试注意事项

在单元测试期间,确保传递给 len 的对象是预期的类型。

def get_length(obj): return len(obj)def test_get_length: assert get_length([1, 2, 3]) == 3 assert get_length("hello") == 5 try: get_length(10) except TypeError: pass # Expected安全影响

通常最小,但要确保被测量的对象不会通过其长度暴露敏感信息。

range 对于创建数字序列至关重要,尤其是在迭代的循环中。了解它的参数有助于编写高效的循环,这在数据处理、系统管理中的自动化脚本和 Web 项目中的后端开发等领域至关重要。

描述

生成一个数字序列,通常用于循环进行迭代。

数据处理:迭代索引以操作数组或数据帧中的数据。系统管理:使用循环自动执行重复操作的任务。Web 开发:生成用于分页或数据检索的动态范围。# Off-by-one errors are common when using rangefor num in range(1, 10, 2): print(num) # Prints 1, 3, 5, 7, 9# Expecting 10 to be included, but range is exclusive of the stop value性能考虑

range 是内存高效的,因为它在 Python 3 中动态生成数字(惰性计算)。

基准:

import timestart = time.timefor i in range(1000000): passend = time.timeprint(f"Loop with range: {end - start} seconds")最佳实践

使用适当的 start、stop 和 step 值以避免差 1 错误。

for i in range(len(items)): print(items[i])

确保 start、stop 和 step 参数为整数,以避免 TypeError 错误。

try: for i in range("10"): print(i)except TypeError: print("Range parameters must be integers.")测试注意事项

使用各种 range 参数测试循环,以确保正确的迭代计数。

def generate_numbers(start, stop, step=1): return list(range(start, stop, step))def test_generate_numbers: assert generate_numbers(0, 5) == [0, 1, 2, 3, 4] assert generate_numbers(1, 10, 2) == [1, 3, 5, 7, 9] try: generate_numbers(1, "10") except TypeError: pass # Expected安全影响

最小,但要确保 range 参数得到控制,以防止可能导致 Web 应用程序中拒绝服务 (DoS) 的极大迭代。

了解数据类型对于调试和确保函数接收正确的输入类型至关重要。type 有助于验证和执行类型约束,这对于数据验证、API 开发和系统管理中的动态脚本至关重要。

描述

返回对象的类型。

用法print(type(3.14))实际应用调试:在开发过程中检查变量类型以识别不匹配。类型强制:验证函数或 API 中的输入类型。数据验证:确保数据管道中的数据一致性。data = {'name': 'Bob', 'age': 25}print(type(data)) # # Using type for type checking can be less flexible than isinstance性能考虑

type 非常快,并且产生的开销最小。

基准:

import timestart = time.timefor _ in range(1000000): t = type(123)end = time.timeprint(f"type on int: {end - start} seconds")最佳实践

对于类型检查,首选 isinstance 而不是 type,尤其是在处理继承时。

if isinstance(obj, dict): print("Object is a dictionary.")错误处理

type 本身不会引发异常,但会确保传递的对象是有效的 Python 对象。

测试注意事项

验证 type 是否在单元测试中返回预期的类型。

def get_type(obj): return type(obj)def test_get_type: assert get_type(10) == int assert get_type("hello") == str assert get_type() == list安全影响

最小,但在使用类型信息控制程序流时要小心,因为如果没有正确验证,它可能会纵。

转换数据类型是一项常见的任务,尤其是在处理来自不同来源的用户输入或数据时。int 对于数据科学、金融应用程序和后端 Web 开发等领域的数值计算至关重要。

描述

将值转换为整数。

困难

初学者

用法实际应用num_str = "123"num_int = int(num_str)print(num_int + 10) # Correct: 133invalid_str = "123abc"# int(invalid_str) # Raises ValueError性能考虑

int 转换速度很快,但如果输入无效,可能会引发异常,这可能需要处理。

基准:

import timestart = time.timefor i in range(1000000): n = int("123")end = time.timeprint(f"int conversion: {end - start} seconds")最佳实践

使用异常处理来正常管理无效输入。

try: age = int(input("Enter your age: "))except ValueError: print("Please enter a valid integer for age.")错误处理

int 如果输入无法转换,则会引发 ValueError 。使用 try-except 块来处理此类情况。

def convert_to_int(value): try: return int(value) except ValueError: return None测试注意事项

使用有效和无效的输入测试 int 转换。

def test_int_conversion: assert int("123") == 123 try: int("123abc") except ValueError: pass # Expected安全影响

在转换之前验证和清理输入,以防止注入攻击或意外行为,尤其是在处理用户提供的数据时。

与 int 类似,float 对于将数据转换为浮点数至关重要,这对于科学研究、金融建模和数据分析中的精确数值计算是必需的。

描述

将值转换为浮点数。

困难

初学者

用法pi = float("3.1415")实际应用科学计算:在数学计算中处理十进制数。财务应用程序:以十进制精度管理货币和定价。数据分析:执行需要浮点精度的统计运算。import timestart = time.timefor i in range(1000000): f = float("3.14")end = time.timeprint(f"float conversion: {end - start} seconds")性能考虑

float 转换速度很快,但与 int 一样,可能会在无效输入上引发异常。

最佳实践

在转换之前验证或清理输入,以避免运行时错误。

def get_price: price_str = input("Enter the price: ") try: price = float(price_str) return price except ValueError: print("Invalid price format.") return None错误处理

float 如果输入无法转换,则会引发 ValueError 。使用 try-except 块来处理此类情况。

def convert_to_float(value): try: return float(value) except ValueError: return None测试注意事项

使用有效和无效的输入测试 float 转换

def test_float_conversion: assert float("3.14") == 3.14 try: float("3.14abc") except ValueError: pass # Expected安全影响

确保浮点转换不会在未经验证的情况下处理不受信任的数据,以防止注入攻击或意外行为。

将数据转换为字符串对于输出、日志记录和用户交互至关重要。str 确保非字符串数据可以无缝集成到文本中,这在 Web 开发、数据报告和日志记录系统中至关重要。

描述

将值转换为字符串。

困难

初学者

用法实际应用num = 100print("The number is " + str(num)) # Correct# print("The number is " + num) # Raises TypeError性能考虑

str 非常高效,但不必要的转换会使代码混乱。

基准:

import timestart = time.timefor i in range(1000000): s = str(i)end = time.timeprint(f"str conversion: {end - start} seconds")最佳实践

使用 f 字符串实现更简洁、更高效的字符串格式设置。

print(f"The number is {num}")错误处理

str 通常不会引发异常,但请确保对象具有有意义的 __str__ 或 __repr__ 方法,以避免难以理解的输出。

测试注意事项

验证 str 转换是否产生预期的字符串表示形式。

def test_str_conversion: assert str(100) == "100" assert str([1, 2, 3]) == "[1, 2, 3]"安全影响

在转换和显示用户生成的内容时要小心,以防止注入攻击,尤其是在 Web 应用程序中。

input 对于创建可以接收用户输入的交互式程序至关重要,从而使您的应用程序更加动态和用户友好。这在处理用户输入的 Web 开发、交互式脚本的系统管理以及探索性数据分析的数据科学中尤为重要。

描述

从 input 中读取一行,将其转换为字符串,然后返回它。

用法age = input("Enter your age: ")# Remember to convert input to the desired typeage = int(age)print(f"You are {age} years old.")性能考虑

input 等待用户输入,如果未及时提供输入,则可能会停止程序执行。

基准:不适用,因为 input 受 I/O 限制,并且取决于用户交互。

最佳实践

验证和清理用户输入,以防止错误和安全问题。

def get_user_age: while True: try: age = int(input("Enter your age: ")) return age except ValueError: print("Please enter a valid integer for age.")错误处理

input 本身不会引发异常,但返回的数据可能需要验证或转换,这可能会引发 ValueError 等异常。

def safe_input(prompt): try: return input(prompt) except EOFError: return None测试注意事项

在单元测试期间模拟 input 以模拟用户输入。

from unittest.mock import patchdef greet: name = input("Enter your name: ") print(f"Hello, {name}!")@patch('builtins.input', return_value='Alice')def test_greet(mock_input): with patch('sys.stdout', new_callable=io.StringIO) as mock_stdout: greet assert mock_stdout.getvalue == "Hello, Alice!\n"安全影响

清理和验证输入以防止注入攻击,尤其是在系统命令或数据库查询中使用输入时。

聚合数值数据是数据处理中的一项常见任务。sum 提供了一种计算可迭代元素总数的有效方法,这在数据科学中对于计算总计、平均值和在金融应用程序中对交易求和至关重要。

描述

计算 iterable 中所有元素的总和。

用法实际应用numbers = range(1, 101)print(sum(numbers)) # Correct: 5050mixed = [1, '2', 3]# sum(mixed) # Raises TypeError性能考虑

sum 针对数值数据进行了优化,在大型数据集上表现良好。

基准:

import timelarge_list = list(range(1000000))start = time.timetotal = sum(large_list)end = time.timeprint(f"sum on large list: {total}, Time: {end - start} seconds")最佳实践

在使用 sum 之前,请确保所有元素都是数字。

numbers = [int(x) for x in mixed if isinstance(x, (int, float))]total = sum(numbers)

输出:

在许多算法和数据分析中,查找数据集中最大或最小的元素是基础。max 和 min 简化了这些操作,这在统计学、数据科学中用于确定极值以及在 Web 开发中用于排序或过滤数据至关重要。

描述largest = max([1, 2, 3])smallest = min([1, 2, 3])实际应用scores = [88, 92, 79, 93, 85]print("Highest score:", max(scores))print("Lowest score:", min(scores))empty = # max(empty) # Raises ValueError性能考虑

这两个函数都具有 O(n) 时间复杂度,这使得它们对于大型数据集非常有效。

基准:

import timelarge_list = list(range(1000000))start = time.timemaximum = max(large_list)minimum = min(large_list)end = time.timeprint(f"max and min on large list: {maximum}, {minimum}, Time: {end - start} seconds")

处理空的可迭代对象以避免异常

if scores: print("Highest score:", max(scores)) print("Lowest score:", min(scores))else: print("No scores available.")

输出:

来源:自由坦荡的湖泊AI一点号

相关推荐