当前位置:首页 > 科技  > 软件

Python 内置函数探秘:鲜为人知的宝箱

来源: 责编: 时间:2024-05-20 17:51:44 243观看
导读在Python世界里,内置函数就像一个个小巧玲珑的魔法盒,它们深藏不露,却又蕴含着强大的能量。掌握并巧妙运用这些内置函数,不仅能简化代码,提升效率,更能展现优雅、地道的Python编程风格。本文将带你探索那些可能被忽视的Pyth

在Python世界里,内置函数就像一个个小巧玲珑的魔法盒,它们深藏不露,却又蕴含着强大的能量。掌握并巧妙运用这些内置函数,不仅能简化代码,提升效率,更能展现优雅、地道的Python编程风格。本文将带你探索那些可能被忽视的Python内置函数,揭开它们神秘面纱,让你的编程之旅更加丰富多彩。XlZ28资讯网——每日最新资讯28at.com

XlZ28资讯网——每日最新资讯28at.com

第一部分:基础篇

子主题一:数据类型操作

**len()**:想知道列表、字符串等容器有多长?只需一个len(),它会告诉你元素个数。XlZ28资讯网——每日最新资讯28at.com

my_list = [1, 2, 3, 4, 5]print(len(my_list))  # 输出:5

**type()**:想了解变量是什么类型?type()帮你快速识别。XlZ28资讯网——每日最新资讯28at.com

x = "Hello, World!"print(type(x))  # 输出:<class 'str'>

**isinstance()**:判断对象是否属于指定类型(或其子类),确保类型安全。XlZ28资讯网——每日最新资讯28at.com

def process_number(num):    if isinstance(num, (int, float)):        print(f"Processing number: {num}")    else:        print("Invalid input!")process_number(42)  # 输出:Processing number: 42process_number("42")  # 输出:Invalid input!

**dir()**:想知道一个对象有哪些属性和方法?用dir()列出所有成员。XlZ28资讯网——每日最新资讯28at.com

import mathprint(dir(math))  # 输出:['acos', 'acosh', 'asin', 'asinh', ...]

子主题二:变量与对象管理

**id()**:获取对象独一无二的身份标识,理解Python中的“万物皆对象”。XlZ28资讯网——每日最新资讯28at.com

a = [1, 2, 3]b = aprint(id(a), id(b))  # 输出:两个相同的整数,表示a和b指向同一内存地址a.append(4)print(a, b)  # 输出:[1, 2, 3, 4], [1, 2, 3, 4]c = [1, 2, 3]print(id(c))  # 输出:不同于a和b的整数,c是新的列表对象

**hash()**:计算对象的哈希值,用于字典、集合等数据结构的高效查找。XlZ28资讯网——每日最新资讯28at.com

word = "python"print(hash(word))  # 输出:-986773616

**del**:删除对象引用,释放内存资源,或删除变量、列表元素等。XlZ28资讯网——每日最新资讯28at.com

del my_list[0]  # 删除列表第一个元素del my_variable  # 删除变量,使其不再存在于当前作用域

**globals()与locals()**:查看全局/局部作用域内的变量名及其值。XlZ28资讯网——每日最新资讯28at.com

x = "global"def func():    y = "local"    print(globals())  # 输出:包含全局变量x的字典    print(locals())  # 输出:包含局部变量y的字典func()

子主题三:流程控制辅助

**all()与any()**:判断容器内所有/任意元素是否满足条件。XlZ28资讯网——每日最新资讯28at.com

numbers = [1, 2, 0, 4]print(all(number > 0 for number in numbers))  # 输出:False(存在非正数)print(any(number > 0 for number in numbers))  # 输出:True(存在正数)

**enumerate()**:同时获取容器内元素及其索引,便于循环处理。XlZ28资讯网——每日最新资讯28at.com

fruits = ["apple", "banana", "cherry"]for i, fruit in enumerate(fruits):    print(f"Index {i}: {fruit}")# 输出:# Index 0: apple# Index 1: banana# Index 2: cherry

**zip()**:将多个可迭代对象按元素打包成一个个元组,实现多数据源同步遍历。XlZ28资讯网——每日最新资讯28at.com

names = ["Alice", "Bob", "Charlie"]ages = [25, 30, 35]for name, age in zip(names, ages):    print(f"{name} is {age} years old.")# 输出:# Alice is 25 years old.# Bob is 30 years old.# Charlie is 35 years old.

第二部分:进阶篇

子主题四:字符串处理

**format()**:灵活格式化字符串,插入变量、控制对齐、指定精度等。XlZ28资讯网——每日最新资讯28at.com

name = "Alice"age = 25print("My name is {} and I am {} years old.".format(name, age))# 输出:# My name is Alice and I am 25 years old.

**join()**:将列表(或其他可迭代对象)中元素以指定字符连接成字符串。XlZ28资讯网——每日最新资讯28at.com

words = ["Python", "is", "fun"]sentence = " ".join(words)print(sentence)# 输出:# Python is fun

**split()**:根据分隔符将字符串拆分为列表,常用于处理文本数据。XlZ28资讯网——每日最新资讯28at.com

text = "A quick brown fox jumps over the lazy dog."words = text.split(" ")print(words)# 输出:# ['A', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog.']

**strip()**:去除字符串两侧指定字符(默认空格),清理文本数据。XlZ28资讯网——每日最新资讯28at.com

s = "   Hello, World!   "clean_s = s.strip()print(clean_s)# 输出:# Hello, World!

子主题五:序列与集合操作

**sorted()**:对可迭代对象进行排序,返回一个新的排序后列表。XlZ28资讯网——每日最新资讯28at.com

unsorted_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]sorted_list = sorted(unsorted_list)print(sorted_list)# 输出:# [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

**reversed()**:反转序列(如列表、元组、字符串)元素顺序。XlZ28资讯网——每日最新资讯28at.com

numbers = [1, 2, 3, 4, 5]reversed_numbers = list(reversed(numbers))print(reversed_numbers)# 输出:# [5, 4, 3, 2, 1]

**set()与frozenset()**:创建无序、唯一元素集,后者不可变。XlZ28资讯网——每日最新资讯28at.com

unique_elements = set([1, 2, 2, 3, 4, 4, 5])print(unique_elements)  # 输出:{1, 2, 3, 4, 5}immutable_set = frozenset(unique_elements)

子主题六:异常处理与调试

**assert**:断言某个条件为真,否则触发AssertionError,用于检查程序逻辑。XlZ28资讯网——每日最新资讯28at.com

def divide(a, b):    assert b != 0, "Cannot divide by zero!"    return a / bresult = divide(10, 2)  #正常运行,结果为 5.0result = divide(10, 0)  # 触发 AssertionError: Cannot divide by zero!

**traceback**:捕获、打印及分析异常堆栈信息,辅助定位问题。XlZ28资讯网——每日最新资讯28at.com

try:    raise ValueError("This is an intentional error.")except ValueError as e:    import traceback    traceback.print_exc()# 输出类似如下:# Traceback (most recent call last):#   File "<stdin>", line 2, in <module># ValueError: This is an intentional error.

**sys.exc_info()**:获取当前正在处理的异常的详细信息(类型、值、堆栈跟踪)。XlZ28资讯网——每日最新资讯28at.com

import systry:    raise IndexError("Index out of range!")except IndexError as e:    exc_type, exc_value, exc_traceback = sys.exc_info()    print(exc_type)  # 输出:<class 'IndexError'>    print(exc_value)  # 输出:Index out of range!    print(exc_traceback)  # 输出:详细的异常堆栈跟踪信息

第三部分:深度揭秘篇

子主题七:函数式编程利器

**map()**:将函数应用到可迭代对象每个元素上,返回结果组成的迭代器。XlZ28资讯网——每日最新资讯28at.com

numbers = [1, 2, 3, 4, 5]squared = map(lambda x: x ** 2, numbers)print(list(squared))  # 输出:[1, 4, 9, 16, 25]

**filter()**:筛选出可迭代对象中满足条件的元素,返回过滤后的迭代器。XlZ28资讯网——每日最新资讯28at.com

even_numbers = [1, 2, 3, 4, 5, 6]filtered = filter(lambda x: x % 2 == 0, even_numbers)print(list(filtered))  # 输出:[2, 4, 6]

**reduce()**(在functools模块中):对可迭代对象元素应用二元函数累积结果。XlZ28资讯网——每日最新资讯28at.com

from functools import reduceproduct = reduce(lambda x, y: x * y, [1, 2, 3, 4, 5])print(product)  # 输出:120

**lambda**:定义小型匿名函数,简洁表达临时计算逻辑。XlZ28资讯网——每日最新资讯28at.com

add_one = lambda x: x + 1print(add_one(41))  # 输出:42

子主题八:魔法方法与元编程

**__str__与__repr__**:自定义对象的字符串表示形式,分别用于用户友好输出和调试。XlZ28资讯网——每日最新资讯28at.com

class Person:    def __init__(self, name, age):        self.name = name        self.age = age    def __str__(self):        return f"{self.name}, {self.age} years old"    def __repr__(self):        return f"Person(name={self.name!r}, age={self.age})"p = Person("Alice", 25)print(p)  # 输出:Alice, 25 years oldprint(repr(p))  # 输出:Person(name='Alice', age=25)

**__getattr__**:当尝试访问不存在的属性时调用,提供自定义行为。XlZ28资讯网——每日最新资讯28at.com

class MagicBox:    def __getattr__(self, item):        return f"Sorry, no such attribute '{item}'!"box = MagicBox()print(box.secret_key)  # 输出:Sorry, no such attribute 'secret_key'!

**@property**:将方法包装成只读属性,实现属性访问控制与验证。XlZ28资讯网——每日最新资讯28at.com

class Circle:    def __init__(self, radius):        self._radius = radius    @property    def radius(self):        return self._radius    @radius.setter    def radius(self, value):        if value < 0:            raise ValueError("Radius must be non-negative.")        self._radius = valuecircle = Circle(5)print(circle.radius)  # 输出:5circle.radius = -1  # 会触发 ValueError

子主题九:模块与包管理

**importlib**:动态导入、重载、查询模块信息,实现高级模块管理。XlZ28资讯网——每日最新资讯28at.com

import importlibmodule_name = "math"module = importlib.import_module(module_name)print(module.sqrt(16))  # 输出:4.0

**pkgutil**:递归遍历包及其子包,查找模块、执行包级初始化等。XlZ28资讯网——每日最新资讯28at.com

import pkgutilpackage_name = "numpy"package = pkgutil.get_loader(package_name)print(package)  # 输出:numpy.__loader__

**sys.path**:查看Python解释器搜索模块的路径列表,调整路径以引入自定义模块。XlZ28资讯网——每日最新资讯28at.com

import sysprint(sys.path)  # 输出:当前Python环境搜索模块的路径列表sys.path.append("/path/to/custom/module")

结语:挖掘Python内置函数,解锁编程新境界

Python内置函数犹如一座宝藏库,等待你去发掘、利用。无论你是初学者还是资深开发者,熟练掌握并适时运用这些鲜为人知的内置函数,都能显著提升代码质量、开发效率,乃至编程思维。愿你在Python的世界里游刃有余,享受编程的乐趣与成就感!XlZ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-89395-0.htmlPython 内置函数探秘:鲜为人知的宝箱

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: ASP.NET Core 中的文件上传与下载功能实现

下一篇: 五种 Python 列表推导式妙用法

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 量化指标是与非:挽救被量化指标扼杀的技术团队

    作者 | 刘新翠整理 | 徐杰承本文整理自快狗打车技术总监刘新翠在WOT2023大会上的主题分享,更多精彩内容及现场PPT,请关注51CTO技术栈公众号,发消息【WOT2023PPT】即可直接领取
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • 疑似小米14外观设计图曝光:后置相机模组变化不大

    下半年的大幕已经开启,而谁将成为下半年手机圈的主角就成为了大家关注的焦点,其中被传有望拿下新一代骁龙8 Gen3旗舰芯片的小米14系列更是备受大家瞩
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
Top