进阶学Python:Python内置函数以及__import()__与import的区别! | 八月更文挑战

1,882 阅读5分钟

这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战

📖前言

马尔克斯在《百年孤独》里写道:

“过去都是假的,回忆是一条没有归途的路。 以往的一切春天都无法复原,即使最狂乱且坚韧的爱情,归根结底也不过是一种转瞬即逝的现实,唯有孤独永恒。”

今天博主跟大家聊一聊如何使用Python内置函数!不喜勿喷,如有建议欢迎补充、讨论!

关于安装和汉化可以观看博主的这篇文章《VsCode下载安装及汉化 》以及Python系列:windows10配置Python3.0开发环境!,安装完毕重启VsCode!

本篇主要介绍一些内置函数的功能以及其用法,以及一些重要的函数的主要用法详解。例如:format()、zip()、max()、min()等函数。


Come on!内置函数的用法

在最初学习Python的时候,我一直分不清内置函数与一些数据类型的内置方法的用法和区别,随后便知道无论是内置函数还是内置方法均是在Python的 builtins.py 文件内,不同的是内置函数是直接被定义在该文件内,而这些内置方法是在不同的模块内,可以说内置函数是在某些数据类型的内置方法的上一级。当然,两者都是函数。故其使用方法如下:

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''

#内置函数-->将实参传入函数内,获得返回值,即finc1(parameter1,parameter2,....)
all("sunny")
True

#内置方法-->其形式为data.func2(parameter1,parameter2,...),对该数据类型的进行处理,并且获取结果
name="sunny"
name.capitalize()
print(name)

所以,当使用的时候我们只需要区别开是内置函数还是某数据类型类中的内置方法,即可知道怎么使用该函数。


Come on!内置函数的功能

在这里插入图片描述

Python内置函数(官方文档可以看简体中文):https://docs.python.org/zh-cn/3/library/functions.html?highlight=built#built-in-functions

在这里插入图片描述

可以了解一些重要的方法的进阶用法:

zip 函数--拉链

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''
names=["xiaochen","xiaojia","xiaowu"]
ages=[21,22,30]
print(zip(names,ages)) #返回为一个迭代器对象
print(list(zip(names,ages)))

#输出为:<zip object at 0x0000023C45B11FC8>
# [('xiaochen', 21), ('xiaojia', 22), ('xiaowu', 30)]

sorted 函数--排序

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''

#sorted函数
#若想对序列中字典进行排序,则使根据key进行排序,而若想对根据其中每个人的年龄进行排序
info=[
    {"name":"sunny chen","age":21,"sex":"man"},
    {"name":"xiaojiajia","age":22,"sex":"man"},
    {"name":"xiaoxiaxia","age":23,"sex":"woman"}
]
print(sorted(info,key=lambda x:x["age"],reverse=True))#倒序

# 输出为:[{'name': 'xiaoxiaxia', 'age': 23, 'sex': 'woman'}, {'name': 'xiaojiajia', 'age': 22, 'sex': 'man'}, {'name': 'sunny chen', 'age': 21, 'sex': 'man'}]

max函数高级用法,如何获取字典中年龄最大的

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''
#若想取出字典中年龄最大的
ages={"小佳佳":33,"sunny chen":21,"xiaoxiaxia":22}

#根据字典key的ASCII码值进行比较
print(max(ages))

#仅能取出最大年龄,不知道是谁 
print(max(ages.values())) 

#通过拉链,获得迭代器对象,并且使键值对反转
print(list(zip(ages.values(),ages.keys())))
#输出为:[(33, '小佳佳'), (21, 'sunny chen'), (22, 'xiaoxiaxia')]
print(max(zip(ages.values(),ages.keys())))

# 结果为:
# 小佳佳
#33
#[(33, '小佳佳'), (21, 'sunny chen'), (22, 'xiaoxiaxia')]
#(33, '小佳佳')

__import__ 函数

'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param: 
@return: 
'''

#导入该文件夹中的import_test模块
import import_test
print(import_test) #查看import是什么玩意
import_test.dogs()

# 等同于,__import__("str")
module_name ="import_test"
m=__import__(module_name) #m = import_test
print(m)
m.dogs()

Python中 __import()__import 的区别!


Come on!两者有什么不同呢?

Github上clone 的一些 python 代码,发现有的项目里面不直接使用 “import”,而是通过“__import()__” 函数来导入模块。

  1. import 导入的是一个标准模块,而标准模块的概念是一个文件夹里面必须包含 __init__.py 文件。它的作用更像是一种声明,且 import 模块进来之后,万一原本的模块有什么变化,可以通过 reload() 进行重新加载。

  2. __import__() 作为一个函数,只能接受字符串参数,返回值可以直接用来操作,通常在动态加载的时候用到这个函数,最常见的情景就是插件功能的支持。

  • | import | import | ---|---|---|----| 倾向 | 固定式声明 | 动态加载 适用场景 | 已经明确知道项目中哪些模块 | 模块可以动态插拔、动态引入运行 举例 | import os #导入固有的os模块 | import('employee').find(name='李林') #动态加载刚安装的员工管理模块,并且查找一个叫“李林”的人

当使用 import 导入 Python 模块的时候,默认调用的是 __import__() 函数。直接使用该函数的情况很少见,一般用于动态加载模块。
__import__(name, globals, locals, fromlist, level)只有name是必选参数,其他都是可选参数,一般情况下直接使用 name 参数即可。
fromlist 指明需要导入的子模块名,level 指定导入方式(相对导入或者绝对导入, 默认两者都支持)。
当模块名为 package.module 时,而且 fromlist 参数为空时,函数返回顶层的模块,也就是 package 模块。如果 fromlist=[module] ,则返回 module

所以,下面语句返回的结果是一样的:

spam = __import__('spam', globals(), locals(), [], -1)
spam = __import__('spam.ham', globals(), locals(), [], -1)

而下面指定了 fromlist,就可以获取到子模块。

_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], -1)
eggs = _temp.eggs
saus = _temp.sausage

如果像直接通过名字导入模块,也可以使用 importlib 模块的 import_module 函数。可以使用 __import__ 函数实现模块的延迟导入:

class LazyImport:
    def __init__(self, module_name):
        self.module_name = module_name
        self.module = None
 
    def __getattr__(self, name):
        if self.module is None:
            self.module = __import__(self.module_name)
        return getattr(self.module, name)
 
string = LazyImport("string")
print string.lowercase

具体的可以参照----Python内置函数__import()__(官方文档可以看简体中文):docs.python.org/zh-cn/3/lib…


🎉最后

  • 更多参考精彩博文请看这里:陈永佳的博客

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!