Python学习14:内置函数(二)

  • Post author:
  • Post category:python


笔者原创,文章转载需注明,如果喜欢请点赞+关注,感谢支持!本文为Python函数学习系列第三篇,python的常用内置函数。

由于篇幅问题,目前官网基于python3.7.7一共包含69个内置函数,共分为3个章节进行讲解,每个章节包含23个内置函数,同时会重点讲解常用的的内置函数。

python官网关于内置函数的说明:https://docs.python.org/zh-cn/3.7/library/functions.html



目录


Python常用的内置函数


24.format()


25.frozenset()


26.getattr()


27.globals()


28.hasattr()


29.hash()


30.help()


31.hex()


32.id()


33.input()


34.int()


35.isinstance()


36.issubclass()


37.iter()


38.len()


39.list()


40.locals()


41.map()


42.max()


43.memoryview()


44.min()


45.next()


46.object()




Python常用的内置函数

上一篇内置函数(一)->

传送门

这一篇内容主要是从24.format()内置函数到45.objcet()为止。




24.format()



说明:

字符串格式化函数, 该函数可以接受不限个参数,位置可以不按顺序。也可以对数字进行格式化。

format(value[, format_spec])

将 value 转换为 format_spec 控制的“格式化”表示。format_spec 的解释取决于 value 实参的类型,但是大多数内置类型使用标准格式化语法:格式规格迷你语言。

默认的 format_spec 是一个空字符串,它通常和调用 str(value) 的结果相同。

调用 format(value, format_spec) 会转换成 type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() 方法将不会调用。如果搜索到 object 有这个方法但 format_spec 不为空,format_spec 或返回值不是字符串,会触发 TypeError 异常。

在 3.4 版更改: 当 format_spec 不是空字符串时, object().__format__(format_spec) 会触发 TypeError。


举例:

list = ['Jack','Tom','Carter','James']
print('{}是当今世界上最优秀的篮球运动员。'.format(list[3]))
James是当今世界上最优秀的篮球运动员。
num = 123.1314 * 5.48
print(format(num,'.2f'))
674.76


备注:

format()函数应用场景非常多,熟练使用该内置函数会对编码带来极大的便利。



25.

frozenset

()


说明:

字面意思,

冻结集合

。frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。


class


frozenset

([

iterable

])

返回一个新的


frozenset


对象,它包含可选参数

iterable

中的元素。

frozenset

是一个内置的类。有关此类的文档,请参阅


frozenset




集合类型 — set, frozenset

请参阅内建的


set





list





tuple





dict


类,以及


collections


模块来了解其它的容器。


举例:

set = (1,2,3,4,5,6,7)
a = frozenset(set)
print(a)
print(type(a))
frozenset({1, 2, 3, 4, 5, 6, 7})
<class 'frozenset'>



26.

getattr

()


说明:

getattr() 函数用于返回一个对象属性值。


getattr

(

object

,

name

[,

default

])

返回对象命名属性的值。

name

必须是字符串。如果该字符串是对象的属性之一,则返回该属性的值。例如,

getattr(x, 'foobar')

等同于

x.foobar

。如果指定的属性不存在,且提供了

default

值,则返回它,否则触发


AttributeError



备注:

类和对象相关的内置函数会在之后的学习中再详细说明。



27.

globals

()

说明:


globals

()

返回表示当前全局符号表的字典。这总是当前模块的字典(在函数或方法中,不是调用它的模块,而是定义它的模块)。


举例:

a = 'python'
print(globals())
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002991E50F588>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/demo222.py', '__cached__': None, 'a': 'python'}



28.

hasattr

()


说明:

hasattr() 函数用于判断对象是否包含对应的属性。


hasattr

(

object

,

name

)

该实参是一个对象和一个字符串。如果字符串是对象的属性之一的名称,则返回

True

,否则返回

False

。(此功能是通过调用

getattr(object, name)

看是否有


AttributeError


异常来实现的。)


备注:

类和对象相关的内置函数会在之后的学习中再详细说明。



29.

hash

()


说明:

哈希函数,用于获取一个对象(字符串或者数值等)的哈希值。


Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的



输入



(又叫做预映射pre-image)通过散列算法变换成固定长度的



输出



,该输出就是散列值。这种转换是一种



压缩映射



,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的



消息摘要



的函数。


hash

(

object

)

返回该对象的哈希值(如果它有的话)。哈希值是整数。它们在字典查找元素时用来快速比较字典的键。相同大小的数字变量有相同的哈希值(即使它们类型不同,如 1 和 1.0)。

注解

如果对象实现了自己的


__hash__()


方法,请注意,


hash()


根据机器的字长来截断返回值。另请参阅


__hash__()



举例:

a = 'python'
print(hash(a))
b = 123
print(hash(b))
c = True
print(hash(c))
7725086107883448893
123
1


30.

help

()


说明:

帮助函数,顾名思义。help函数虽然在实际中用不太多,但还是对新手有很大的帮助。


help

([

object

])

启动内置的帮助系统(此函数主要在交互式中使用)。如果没有实参,解释器控制台里会启动交互式帮助系统。如果实参是一个字符串,则在模块、函数、类、方法、关键字或文档主题中搜索该字符串,并在控制台上打印帮助信息。如果实参是其他任意对象,则会生成该对象的帮助页。

请注意如果在函数的形参列表中出现了斜杠 (/),则它在发起调用


help()


的时候意味着斜杠之前的均为仅限位置形参。 更多相关信息,请参阅

有关仅限位置形参的 FAQ 条目

该函数通过


site


模块加入到内置命名空间。

在 3.4 版更改:


pydoc





inspect


的变更使得可调用对象的签名信息更加全面和一致。


举例:

help(print())
Help on NoneType object:

class NoneType(object)
 |  Methods defined here:
 |  
 |  __bool__(self, /)
 |      self != 0
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.


31.

hex

()


说明:

hex() 函数就是用于将10进制整数转换成16进制,以字符串形式表示。需要注意传入的必须是int类型。


hex

(

x

)

将整数转换为以“0x”为前缀的小写十六进制字符串。如果

x

不是 Python


int


对象,则必须定义返回整数的


__index__()


方法。一些例子:

>>> hex(255)
'0xff'
>>> hex(-42)
'-0x2a'

如果要将整数转换为大写或小写的十六进制字符串,并可选择有无“0x”前缀,则可以使用如下方法:

>>> '%#x' % 255, '%x' % 255, '%X' % 255
('0xff', 'ff', 'FF')
>>> format(255, '#x'), format(255, 'x'), format(255, 'X')
('0xff', 'ff', 'FF')
>>> f'{255:#x}', f'{255:x}', f'{255:X}'
('0xff', 'ff', 'FF')

另见


format()


获取更多信息。

另请参阅


int()


将十六进制字符串转换为以 16 为基数的整数。

注解

如果要获取浮点数的十六进制字符串形式,请使用


float.hex()


方法。


举例:

num = 255
print(hex(num))
0xff


32.id()


说明:

id() 函数用于获取对象的内存地址。


id

(

object

)

返回对象的“标识值”。该值是一个整数,在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的


id()


值。


CPython implementation detail:

This is the address of the object in memory.


举例:

num = 255.1
print(id(num))
print(id(255))
3090369201296
140732034554880



33.

input

()


说明:

input() 函数接受一个标准输入数据,返回为 string 类型。input函数其实就是提供了一个控制台的输入,将输入的内容,转化为字符串并返回。


input

([

prompt

])

如果存在

prompt

实参,则将其写入标准输出,末尾不带换行符。接下来,该函数从输入中读取一行,将其转换为字符串(除了末尾的换行符)并返回。当读取到 EOF 时,则触发


EOFError


。例如:

>>>

>>> s = input('--> ')  
--> Monty Python's Flying Circus
>>> s  
"Monty Python's Flying Circus"

如果加载了


readline


模块,


input()


将使用它来提供复杂的行编辑和历史记录功能。


举例:

print(input('请输入你的名字:'))
print(type(input('请输入你的名字:')))
请输入你的名字:风起怨江南
风起怨江南
请输入你的名字:风起怨江南
<class 'str'>



34.int()


说明:

该函数用于int数据类型转换,python中最常用的内置函数之一。


class


int

([

x

])


class


int

(

x

,

base=10

)

返回一个使用数字或字符串

x

生成的整数对象,或者没有实参的时候返回

0

。如果

x

定义了


__int__()




int(x)

返回

x.__int__()

。如果

x

定义了


__trunc__()


,它返回

x.__trunc__()

。对于浮点数,它向零舍入。

如果

x

不是数字,或者有

base

参数,

x

必须是字符串、


bytes


、表示进制为

base



整数字面值




bytearray


实例。该文字前可以有

+



-

(中间不能有空格),前后可以有空格。一个进制为 n 的数字包含 0 到 n-1 的数,其中

a



z

(或

A



Z

)表示 10 到 35。默认的

base

为 10 ,允许的进制有 0、2-36。2、8、16 进制的数字可以在代码中用

0b

/

0B



0o

/

0O



0x

/

0X

前缀来表示。进制为 0 将安照代码的字面量来精确解释,最后的结果会是 2、8、10、16 进制中的一个。所以

int('010', 0)

是非法的,但

int('010')



int('010', 8)

是合法的。

整数类型定义请参阅

数字类型 — int, float, complex

在 3.4 版更改: 如果

base

不是


int


的实例,但

base

对象有


base.__index__


方法,则会调用该方法来获取进制数。以前的版本使用


base.__int__


而不是


base.__index__


在 3.6 版更改: 您可以使用下划线将代码文字中的数字进行分组。

在 3.7 版更改:

x

现在只能作为位置参数。


举例:

num = 255.1
print(int(num))
255


35.

isinstance

()


说明:

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。

isinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。

  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。


isinstance

(

object

,

classinfo

)

如果参数

object

是参数

classinfo

的实例或者是其 (直接、间接或

虚拟

) 子类则返回

True

。 如果

object

不是给定类型的对象,函数将总是返回

False

。 如果

classinfo

是类型对象元组(或由其他此类元组递归组成的元组),那么如果

object

是其中任何一个类型的实例就返回

True

。 如果

classinfo

既不是类型,也不是类型元组或类型元组的元组,则将引发


TypeError


异常。


举例:

num = 255.1
print(isinstance(num,str))
print(isinstance(num,int))
print(isinstance(num,float))
False
False
True


备注:

isinstance() 函数主要是对传入参数的值的数据类型和传入的数据类型进行比对,如果一致,返回True,不一致,返回False。



36.

issubclass

()


说明:

issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类。


issubclass

(

class

,

classinfo

)

如果

class



classinfo

的 (直接、间接或

虚拟

) 子类则返回

True

。 类会被视作其自身的子类。

classinfo

也以是类对象的元组,在此情况下

classinfo

中的每个条目都将被检查。 在任何其他情况下,都将引发


TypeError


异常。


备注:

类和对象相关的内置函数会在之后的学习中再详细说明。



37.

iter

()


说明:

iter() 函数用来生成迭代器。


iter

(

object

[,

sentinel

])

返回一个

iterator

对象。根据是否存在第二个实参,第一个实参的解释是非常不同的。如果没有第二个实参,

object

必须是支持迭代协议(有


__iter__()


方法)的集合对象,或必须支持序列协议(有


__getitem__()


方法,且数字参数从

0

开始)。如果它不支持这些协议,会触发


TypeError


。如果有第二个实参

sentinel

,那么

object

必须是可调用的对象。这种情况下生成的迭代器,每次迭代调用它的


__next__()


方法时都会不带实参地调用

object

;如果返回的结果是

sentinel

则触发


StopIteration


,否则返回调用结果。

另请参阅

迭代器类型

适合


iter()


的第二种形式的应用之一是构建块读取器。 例如,从二进制数据库文件中读取固定宽度的块,直至到达文件的末尾:

from functools import partial
with open('mydata.db', 'rb') as f:
    for block in iter(partial(f.read, 64), b''):
        process_block(block)


举例:

dict = {'helloWorld':'Jack'}
for i in iter(dict):
    print(i)

str = 'helloWorld'
for i in iter(str):
    print(i)
helloWorld
h
e
l
l
o
W
o
r
l
d


38.len()


说明:

len()函数用于计算长度,比较好理解。


len

(

s

)

返回对象的长度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。


举例:

dict = {'helloWorld':'Jack'}
str = 'helloWorld'
print(len(dict))
print(len(str))
1
10


39.list()


说明:

list()函数用于进行数据类型转换为列表。


class


list

([

iterable

])

虽然被称为函数,


list


实际上是一种可变序列类型,详情请参阅

列表



序列类型 — list, tuple, range


举例:

str = 'helloWorld'
print(list(str))
print(type(list(str)))
['h', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd']
<class 'list'>


40.

locals

()


说明:

locals() 函数会以字典类型返回当前位置的全部局部变量。

对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。


locals

()

更新并返回表示当前本地符号表的字典。 在函数代码块但不是类代码块中调用


locals()


时将返回自由变量。 请注意在模块层级上,


locals()





globals()


是同一个字典。

注解

不要更改此字典的内容;更改不会影响解释器使用的局部变量或自由变量的值。


举例:

map_demo = map(str,range(1,10))
print(locals())
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000019A33CAF588>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/MyLife/网课学习/柠檬班/作业/博客/demo222.py', '__cached__': None, 'map_demo': <map object at 0x0000019A33D62EC8>}


41.

map

()


说明:

map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。


map

(

function

,

iterable

,



)

返回一个将

function

应用于

iterable

中每一项并输出其结果的迭代器。 如果传入了额外的

iterable

参数,

function

必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。 当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束。 对于函数的输入已经是参数元组的情况,请参阅


itertools.starmap()



举例:

map_demo = map(str,range(1,10))
print(map_demo)
print(type(map_demo))
for i in map_demo:
    print(i)
<map object at 0x000002AC5F302EC8>
<class 'map'>
1
2
3
4
5
6
7
8
9



42.max()


说明:

最大值函数。


max

(

iterable

,

*

[,

key

,

default

])


max

(

arg1

,

arg2

,

*args

[,

key

])

返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。

如果只提供了一个位置参数,它必须是非空

iterable

,返回可迭代对象中最大的元素;如果提供了两个及以上的位置参数,则返回最大的位置参数。

有两个可选只能用关键字的实参。

key

实参指定排序函数用的参数,如传给


list.sort()


的。

default

实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给

default

,则会触发


ValueError


如果有多个最大元素,则此函数将返回第一个找到的。这和其他稳定排序工具如

sorted(iterable, key=keyfunc, reverse=True)[0]



heapq.nlargest(1, iterable, key=keyfunc)

保持一致。

3.4 新版功能: keyword-only 实参

default


举例:

a = [1,3,4,23,12,32,14,15,29]
print(max(a))
32



43.

memoryview

()


说明:

memoryview() 函数返回给定参数的内存查看对象(Momory view)。


class


memoryview

(

obj

)

返回由给定实参创建的“内存视图”对象。有关详细信息,请参阅

内存视图


举例:

v = memoryview(b'abcefg')
print(v)
print(v[1])
print(type(v))
<memory at 0x000001E0CB73C048>
98
<class 'memoryview'>



44.min()


说明:

最小函数。


min

(

iterable

,

*

[,

key

,

default

])


min

(

arg1

,

arg2

,

*args

[,

key

])

返回可迭代对象中最小的元素,或者返回两个及以上实参中最小的。

如果只提供了一个位置参数,它必须是

iterable

,返回可迭代对象中最小的元素;如果提供了两个及以上的位置参数,则返回最小的位置参数。

有两个可选只能用关键字的实参。

key

实参指定排序函数用的参数,如传给


list.sort()


的。

default

实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给

default

,则会触发


ValueError


如果有多个最小元素,则此函数将返回第一个找到的。这和其他稳定排序工具如

sorted(iterable, key=keyfunc)[0]



heapq.nsmallest(1, iterable, key=keyfunc)

保持一致。

3.4 新版功能: keyword-only 实参

default


举例:

list = [1,5,7,9,4,5,1,32,0,78]
print(min(list))
0


45.

next

()


说明:

next() 返回迭代器的下一个项目。next() 函数要和生成迭代器的iter() 函数一起使用。


next

(

iterator

[,

default

])

通过调用

iterator




__next__()


方法获取下一个元素。如果迭代器耗尽,则返回给定的

default

,如果没有默认值则触发


StopIteration



举例:

num = iter([1, 2, 3, 4, 5, 6, 7])
while True:
    try:
        x = next(num)
        print(x)
    except StopIteration:
        break
1
2
3
4
5
6
7


46.object()


说明:

Object类是Python中所有类的基类,如果定义一个类时没有指定继承哪个类,则默认继承object类。

object没有定义__dict__,所以不能对object类实例对象尝试设置属性。


class


object

返回一个没有特征的新对象。


object


是所有类的基类。它具有所有 Python 类实例的通用方法。这个函数不接受任何实参。

注解

由于


object


没有


__dict__


,因此无法将任意属性赋给


object


的实例。


备注:

类和对象相关的内置函数会在之后的学习中再详细说明。


以上便是《Python学习14:内置函数(二)》所有内容,下一篇为内置函数(三)讲解其余所有的内置函数的定义和用法。

目前《Python学习》专题正在不断更新,原创不易,如果喜欢请点赞和关注,谢谢大家的支持!

获得更多免费的学习资料请添加微信公众号——风起怨江南,有任何问题可以随时和我交流沟通。



版权声明:本文为JackMengJin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。