Python3 内置函数(二)

前言

接上一个随笔,最近边看边学边记录。

内置函数

dict():用于创建一个字典

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)
参数:
  • **kwargs -- 关键字
  • mapping -- 元素的容器。
  • iterable -- 可迭代对象。
>>> dict()
{}
>>> dict(a='1',b='2',c='3')
{'a': '1', 'b': '2', 'c': '3'}
>>> dict(zip([1,2,3],['a','b','c']))
{1: 'a', 2: 'b', 3: 'c'}
>>> dict([('a',1),('b',2),('c',3)])
{'a': 1, 'b': 2, 'c': 3}

dir([object]):

函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

  • 如果对象是模块对象,则列表包含模块的属性名称。

  • 如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类的属性。

  • 否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有基类的属性。

>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'os']
>>> dir(os)
['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_AddedDllDirectory', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_check_methods', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'add_dll_directory', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']

divmod(a,b):

它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于混合操作数类型,适用双目算术运算符的规则。对于整数,结果和 (a // b, b) 一致。对于浮点数,结果是 (q, b) ,q 通常是 math.floor(a b) 但可能会比 1 小。在任何情况下, b 和 a 基本相等;如果 b 非零,它的符号和 b 一样,并且 <= abs(a b) abs(b) 。

>>> divmod(9, 3)
(3, 0)

enumerate(sequence,[start=0]) :

函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
>>> list_1 = [1,2,3,4,5]
>>> for i,v in enumerate(list_1):
...     print(i,v)
...
0 1
1 2
2 3
3 4
4 5

eval(expression[, globals[, locals]]):

用来执行一个字符串表达式,并返回表达式的值

  • expression -- 表达式。
  • globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
  • locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
>>> eval('1+3')
4

 exec(object[, globals[,locals]]):

这个函数支持动态执行 Python 代码。 object 必须是字符串或者代码对象。 如果是字符串,那么该字符串将被解析为一系列 Python 语句并执行(除非发生语法错误)。 如果是代码对象,它将被直接执行。

#source my_test.py
x=5 class C: x = 1 def test(self): y = 10 num = eval('x+y', globals(), locals()) print(num) A=C() A.test()
#结果:15

同eval()方法,可以看出如果提供了globals,字符串中的x作用域会是全局变量;同理,提供了locals后,y的值将是本地变量中寻找。

filter(function,iterable):

函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

用 iterable 中函数 function 返回真的那些元素,构建一个新的迭代器。iterable 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 function 是 None ,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。

请注意, filter(function, iterable) 相当于一个生成器表达式,当 function 不是 None 的时候为 (item foritem in iterable if function(item));function 是 None 的时候为 (item for item in iterable if item) 。

def is_odd(n):
    return n % 2 == 1
 
tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
结果:[1, 3, 5, 7, 9]

class flost([x]):

返回从数字或字符串 x 生成的浮点数。

如果实参是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,之前也可以有空格。可选的符号有 '+' 和 '-' ; '+' 对创建的值没有影响。实参也可以是 NaN(非数字)、正负无穷大的字符串。确切地说,除去首尾的空格后,输入必须遵循以下语法:

sign           ::=  "+" | "-"
infinity       ::=  "Infinity" | "inf"
nan            ::=  "nan

如:

>>> float('+1.23')
1.23
>>> float('   -12345\n')
-12345.0
>>> float('1e-003')
0.001
>>> float('+1E6')
1000000.0
>>> float('-Infinity')
-inf

format(value[,format_spec]):

字符串格式化函数,基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。

>>> '{} {}'.format('Hello', 'Python')
'Hello Python'
>>> '{0} {1}'.format('Hello', 'Python','OK')
'Hello Python'
>>> '{2} {1} {0}'.format('Hello', 'Python','OK')
'OK Python Hello'

也可以设置参数:

>>> '{} {}'.format('Hello', 'Python')
'Hello Python'
>>> '{0} {1}'.format('Hello', 'Python','OK')
'Hello Python'
>>> '{2} {1} {0}'.format('Hello', 'Python','OK')
'OK Python Hello'
>>> dict_1={'name':'Jack','test':'go after'}
>>> '{name} {test}'.format(**dict_1)
'Jack go after'
>>> list_1=[1,2,3]
>>> list_2=[4,5,6]
>>> '{0[0]}+{1[0]}={1[1]}'.format(list_1,list_2)
'1+4=5'

^, <, > 分别代表居中、左对齐、右对齐,后面带宽度, : 号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。

+ 表示在正数前显示 +,负数前显示 -;  (空格)表示在正数前加空格

b、d、o、x 分别是二进制、十进制、八进制、十六进制。

print('{:^10d}'.format(55))         # 长度10,居中,空格填充
print('{:<10d}'.format(55))         # 长度10,左对齐,空格填充
print('{:>10d}'.format(55))         # 长度10,右对齐,空格填充
print('{:*^10d}'.format(55))        # 长度10,居中,“*”填充
print('{:*<10d}'.format(55))        # 长度10,左对齐,“*”填充
print('{:*>10d}'.format(55))        # 长度10,右对齐,“*”填充
print('{:+10d}'.format(55))         # 长度10,正数前有“+”
print('{:-10d}'.format(-55))        # 长度10,负数前有“-”
print('{: 10d}'.format(55))         # 长度10,正数前有一个空格
print('{:.2f}'.format(55.1274))     # 取2位小数,四舍五入
print('{:+.2f}'.format(-55.7234))   # 带符号保留小数点后两位,四舍五入
print('{:-.2f}'.format(+55.8234))   # 不带符号保留小数点后两位,四舍五入
print('{:.0f}'.format(55.9234))     # 取正数部分,四舍五入

 结果:

    55    
55        
        55
****55****
55********
********55
       +55
       -55
        55
55.13
-55.72
55.82
56

class frozenset([iterable]):

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

>>>a = frozenset(range(10))     # 生成一个新的不可变集合
>>> a
frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = frozenset('runoob') 
>>> b
frozenset(['b', 'r', 'u', 'o', 'n'])   # 创建不可变集合

getattr(boject,name[,default]):

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

  • object -- 对象。
  • name -- 字符串,对象属性。
  • default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
>>>class A(object):
...     bar = 1
... 
>>> a = A()
>>> getattr(a, 'bar')        # 获取属性 bar 值
1
>>> getattr(a, 'bar2')       # 属性 bar2 不存在,触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'bar2'
>>> getattr(a, 'bar2', 3)    # 属性 bar2 不存在,但设置了默认值
3

globals():

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

hasattr(boject, name):

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

hash(object):

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

>>>hash('test')            # 字符串
2314058222102390712
>>> hash(1)                 # 数字
1
>>> hash(str([1,2,3]))      # 集合
1335416675971793195
>>> hash(str(sorted({'1':1}))) # 字典
7666464346782421378

 

posted @ 2021-07-17 14:50  老徐-lex  阅读(45)  评论(0编辑  收藏  举报