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, a % b)
一致。对于浮点数,结果是 (q, a % b)
,q 通常是 math.floor(a / b)
但可能会比 1 小。在任何情况下, q * b + a % b
和 a 基本相等;如果 a % b
非零,它的符号和 b 一样,并且 0 <= 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