zoukankan      html  css  js  c++  java
  • 第五篇 Python内置函数

    内置函数
    abs() delattr() hash() memoryview() set()
    all()    dict()  help() min() setattr()
    any()  dir()  hex()  next()  slice()
    ascii() divmod()  id()   object() sorted()
    bin()  enumerate()  input()  oct()  staticmethod()
    bool()  eval()  int()  open()  str()
    breakpoint()  exec()  isinstance()  ord()  sum()
    bytearray()
     filter()  pow()  pow()  super()
    bytes()  float()  iter()  print()  tuple()
    callable()  format() l  en()  property() type()
    chr()  frozenset()  list()  range()  vars()
    classmethod()    getattr() locals() repr()  zip()
    compile()  globals()  map()  reversed()  __import__()
    complex()  hasattr()  max()  round()  

    1.数学运算类函数

    abs,divmod,max,min,pow,round,sum

    1)计算数值的绝对值:abs()

    1 print(abs(-15)) 
    2 
    3 -----输出结果---- 
    4 15 

    2)返回两个数的商和余数:divmod()

    1 print(divmod(13,5))
    2 
    3 ------输出结果------
    4 (2,3)

    3)返回所有参数中元素的最大值或者返回可迭代对象中元素的最大值:max()

    1 print(max(1,2,3))  #取三个数中的最大者
    2 
    3 print(max('123'))  #取可迭代对象中的最大者
    4 
    5 print(max(-2,-1,0,key=abs)) #把-2,-1,0依次传给abs的参数,然后把abs的结果返回给key,max依次比较key的大小
    6 
    7 -------输出结果-------
    8 -2

    4)返回所有参数中元素的最小值或者返回可迭代对象中元素的最小值:min()

     1 print(min(1,2,3))  #取三个数中的最小者
     2 
     3 print(min('123'))  #取可迭代对象中的最小者
     4 
     5 print(min(-2,-1,0,key=abs)) #把-2,-1,0依次传给abs的参数,然后把abs的结果返回给key,max依次比较key的大小
     6 
     7 -------输出结果-----
     8 1
     9 1
    10 0

    5)返回两个数值的幂运算值或者其与指定值的余数:pow()

    1 print(pow(2,4)) #2的4次幂
    2 
    3 print(pow(2,4,3)) #2的4次幂,然后除以3的余数 1
    4 
    5 ------输出结果-----
    6 16
    7 1

    6)对浮点数进行四舍五入:round()

    1 print(round(2.563,1))  #2.563四舍五入,精度为1
    2 
    3 print(round(2.561654132,5)) #2.561654132四舍五入,精度为5
    4 
    5 --------输出结果------
    6 2.6
    7 2.56165

    7)对参数类型为数值的可迭代对象中的每个元素求和:sum()

    1 print(sum((1,2,3,4,5,6)))  #对可迭代对象进行求和
    2 
    3 print(sum((1,2,3,4,5,6),16)) #可迭代对象的和与'start'的和
    4 
    5 --------输出结果-----
    6 21
    7 37

     2.类型转换类函数

    bool,int,float,complex,str,bytearray,bytes,memoryview,ord,chr,bin,oct,hex,tuple,list,dict,set,frozenset,enumerate,range,slice,super,object。

    1)根据传入的参数的值返回布尔值:bool()

     1 print(bool()) #不传递参数,返回False
     2 print(bool(0))
     3 print(bool(''))
     4 print(bool(())) # 0,'',()等为值的布尔值为False
     5 
     6 print(bool(2))
     7 
     8 ------输出结果------
     9 False
    10 False
    11 False
    12 False
    13 True

    2)根据传入的参数值创建一个新的整数值:int()

     1 print(int())  #不传递参数时,结果为0
     2 
     3 print(int(1.8)) #向下取整
     4 
     5 print(int('12')) #根据字符串类型创建整型
     6 
     7 -------输出结果------
     8 0
     9 1
    10 12

    3)根据传入的参数值创建一个新的浮点数值:float()

     1 print(float())  #不传递参数时,结果为0.0
     2 
     3 print(float(1))
     4 
     5 print(float('12')) #根据字符串类型创建浮点值
     6 
     7 -------输出结果------
     8 0.0
     9 1.0
    10 12.0

    4)根据传入的参数值创建一个新的复数值:complex()

     1 print(complex())  #不传递参数时,结果为0j
     2 
     3 print(complex(1))
     4 
     5 print(complex(1,3)) #1为实数部分,3为虚数部分
     6 
     7 print(complex('12')) #根据字符串类型创建复数
     8 
     9 print(complex('1+2j'))
    10 
    11 ------输出结果-----
    12 0j
    13 (1+0j)
    14 (1+3j)
    15 (12+0j)
    16 (1+2j)

    5)返回一个对象的字符串表示形式,这个主要是给用户看:str()

    1 >>> str(None)
    2 'None'
    3 >>> str('123')
    4 '123'
    5 >>> str(1234)
    6 '1234'
    7 >>> str()
    8 ''
    9 >>>

    6)根据传入的参数创建一个字节数组(可变):bytearray()

    1 print(bytearray('博小园','utf-8'))
    2 
    3 ------输出结果-----
    4 bytearray(b'xe5x8dx9axe5xb0x8fxe5x9bxad')

    7)根据传入的参数创建一个不变字节数组:bytes()

    1 print(bytes('博小园','utf-8'))
    2 
    3 ------输出结果-----
    4 b'xe5x8dx9axe5xb0x8fxe5x9bxad'

    8)根据传入的参数创建一个内存查看对象:memoryview()

    1 memview=memoryview(b'abcdef')
    2 
    3 print(memview[0])
    4 print(memview[-1])
    5 
    6 --------输出结果--------
    7 97
    8 102

    9)根据传入的参数返回对应的整数:ord()

    1 print(ord('a'))
    2 
    3 -------输出结果------
    4 97

    10)根据传入的参数的整数值返回对应的字符:chr()

    1 print(chr(97))
    2 
    3 -------输出结果------
    4 a

    11)根据传入的参数的值返回对应的二进制字符串:bin()

    1 print(bin(12))
    2 
    3 -------输出结果------
    4 0b1100

    12)根据传入的参数的值返回对应的八进制字符串:oct()

    1 print(oct(12))
    2 
    3 -------输出结果------
    4 0o14

    13)根据传入的参数的值返回对应的十六进制字符串:hex()

    1 print(hex(12))
    2 
    3 ------输出结果-----
    4 0xc

    14)根据传入的参数创建一个tuple元组:tuple()

    1 print(tuple())  #不传递参数,创建空元组 ()
    2 print(tuple('12345')) #根据可迭代参数,创建元组
    3 
    4 ------输出结果-----
    5 ()
    6 ('1', '2', '3', '4', '5')

    15)根据传入的参数创建一个新列表:list()

    1 print(list())  #不传递参数,创建空列表 ()
    2 print(list('12345')) #根据可迭代参数,创建列表
    3 
    4 -------输出结果-------
    5 []
    6 ['1', '2', '3', '4', '5']

    16)根据传入的参数创建一个新的字典:dict()

     1 print(dict())  #不传递参数,创建一个空的字典
     2 
     3 print(dict(x=2,y=7)) #传递键值对创建字典
     4 
     5 print(dict((('x',1),('y',3))))  #传入可迭代对象创建新的字典
     6 
     7 print(dict([('x',1),('y',7)]))
     8 print(dict(zip(['x','y'],[2,3])))  #传入映射函数创建新的字典
     9 
    10 ---------输出结果-----
    11 {}
    12 {'x': 2, 'y': 7}
    13 {'x': 1, 'y': 3}
    14 {'x': 1, 'y': 7}
    15 {'x': 2, 'y': 3}

    17)根据传入的参数创建一个新的集合:set()

    1 print(set()) #传入的参数为空,返回空集合
    2 
    3 print(set(range(7)))  #传入一个可迭代对象,创建集合
    4 
    5 -------输出结果-----
    6 set()
    7 {0, 1, 2, 3, 4, 5, 6}

    18)根据传入的参数创建一个新的不可变集合:frozenset()

    1 print(frozenset(range(8)))
    2 
    3 -------输出结果------
    4 frozenset({0, 1, 2, 3, 4, 5, 6, 7})

    19)根据可迭代对象创建枚举对象:enumerate()

    1 names=['zhangsan','lisi','wangwu','boxiaoyuan']
    2 
    3 print(list(enumerate(names)))
    4 
    5 print(list(enumerate(names,1)))
    6 
    7 -------输出结果-----
    8 [(0, 'zhangsan'), (1, 'lisi'), (2, 'wangwu'), (3, 'boxiaoyuan')]
    9 [(1, 'zhangsan'), (2, 'lisi'), (3, 'wangwu'), (4, 'boxiaoyuan')]

    20)根据传入的参数创建一个新的range对象:range()

     1 x=range(9) #0至8
     2 
     3 y=range(1,9) #1至8 步长为1
     4 
     5 z=range(1,9,2) #1至8 步长为2
     6 
     7 print(list(x))
     8 print(list(y))
     9 print(list(z))
    10 
    11 -------输出结果--------
    12 [0, 1, 2, 3, 4, 5, 6, 7, 8]
    13 [1, 2, 3, 4, 5, 6, 7, 8]
    14 [1, 3, 5, 7]

    21)根据传入的参数创建一个新的可迭代对象:iter()

     1 x=iter('1234')
     2 print(x)
     3 
     4 print(next(x))
     5 print(next(x))
     6 print(next(x))
     7 print(next(x))
     8 print(next(x))
     9 
    10 -------输出结果-------
    11 <str_iterator object at 0x000001BE6D71B860>
    12 1
    13 2
    14 3
    15 4
    16 Traceback (most recent call last):
    17   File "E:/pythontest/test06.py", line 8, in <module>
    18     print(next(x))
    19 StopIteration

    22)根据传入的对象创建一个新的切片对象:slice()

    切片函数主要对序列对象进行切去对应元素。

    1 a=[0,1,2,3,4,5,6,7,8,9]
    2 
    3 s=slice(0,9,2)   #从start:0到stop:9,步长为step:2
    4 print(a[s])
    5 
    6 -------输出结果------
    7 [0, 2, 4, 6, 8]

    23)根据传入的参数创建一个新的子类和父类关系的代理对象:super()

     1 class A:
     2     def __init__(self):
     3         print("A.__init__")
     4 
     5 class B(A):
     6     def __init__(self):
     7         print("B.__init__")
     8         super().__init__()
     9 
    10 b=B()
    11 
    12 -------输出结果------
    13 B.__init__
    14 A.__init__

    24)创建一个新的object对象:object()

    1 a=object()
    2 a.name='boxiaoyuan'  #不能设置属性,object没有该属性
    3 
    4 --------输出结果-------
    5 Traceback (most recent call last):
    6   File "E:/pythontest/test06.py", line 2, in <module>
    7     a.name='boxiaoyuan'
    8 AttributeError: 'object' object has no attribute 'name'

     3.序列操作类函数

    all,any,filter,map,next,reversed,sorted,zip

    1)判断每个可迭代对象的每个元素的值是否都是True,都是Ture,则返回True:all()

     1 print(all([1,2,3,4,6]))  #列表中的每个元素的值都为True,则返回True
     2 
     3 print(all([0,2,3,4,5,6])) 
     4 
     5 print(all({})) #空字典返回True
     6 
     7 print(all(())) #空元组返回True
     8 
     9 ------输出结果------
    10 True
    11 False
    12 True
    13 True

    2)判断可迭代对象的每个元素的值是否存在为True,存在则返回True:any()

     1 print(any([1,2,3,4,6]))  #列表中的存在一个为True,则返回True
     2 
     3 print(any([0,0]))
     4 
     5 print(any({})) #空字典返回False
     6 
     7 print(any(())) #空元组返回False
     8 
     9 -------输出结果------
    10 True
    11 False
    12 False
    13 False

    3)使用指定方法过滤可迭代对象的元素:filter()

     1 lists=[0,1,2,3,4,5,6,7,8,9]
     2 
     3 def is_odd(x):
     4     if x%2==1:
     5         return x
     6 
     7 print(list(filter(is_odd,lists)))
     8 
     9 -------输出结果-------
    10 [1, 3, 5, 7, 9]

    4)使用指定方法作用传入的每个可迭代对象的元素,生成新的可迭代对象:map()

    1 x=map(ord,'12345')
    2 
    3 print(x)
    4 
    5 print(list(x))
    6 
    7 -------输出结果-----
    8 <map object at 0x0000026B7296B860>
    9 [49, 50, 51, 52, 53]

    5)返回可迭代对象的下一个对象:next()

    a=[0,1,2]
    it=a.__iter__()
    print(next(it))
    print(next(it))
    print(next(it))
    print(next(it,3))  #传入default,当还有元素值没有迭代完,则继续迭代,如果已经迭代完,则返回默认值
    
    -------输出结果--------
    0
    1
    2
    3
    

    6)反转序列生成的可迭代对象:reversed()

    1 a=range(10)
    2 print(a)  #可迭代对象
    3 print(list(reversed(a)))
    4 
    5 -------输出结果------
    6 range(0, 10)
    7 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

    7)对可迭代对象进行排序:sorted()

     1 a=[0,2,1,9,5,7,4]
     2 
     3 print(list(sorted(a)))
     4 
     5 b=['a','c','d','A','C','D']
     6 
     7 print(list(sorted(b,key=str.lower)))
     8 
     9 -------输出结果-----
    10 [0, 1, 2, 4, 5, 7, 9]
    11 ['a', 'A', 'c', 'C', 'd', 'D']

    8)聚合传入的每个迭代器的相同位置的元素值,然后染回元组类型迭代器:zip()

    1 x=[1,2,3]
    2 y=[4,5,6,7,8]
    3 
    4 print(list(zip(x,y)))
    5 
    6 -------输出结果------
    7 [(1, 4), (2, 5), (3, 6)]

     4.对象操作类函数

    help,dir,id,hash,type,len,ascii,format,vars

    1)获取对象的帮助信息:help()

      1 help(list)
      2 
      3 -------输出结果------
      4 Help on class list in module builtins:
      5 
      6 class list(object)
      7  |  list() -> new empty list
      8  |  list(iterable) -> new list initialized from iterable's items
      9  |  
     10  |  Methods defined here:
     11  |  
     12  |  __add__(self, value, /)
     13  |      Return self+value.
     14  |  
     15  |  __contains__(self, key, /)
     16  |      Return key in self.
     17  |  
     18  |  __delitem__(self, key, /)
     19  |      Delete self[key].
     20  |  
     21  |  __eq__(self, value, /)
     22  |      Return self==value.
     23  |  
     24  |  __ge__(self, value, /)
     25  |      Return self>=value.
     26  |  
     27  |  __getattribute__(self, name, /)
     28  |      Return getattr(self, name).
     29  |  
     30  |  __getitem__(...)
     31  |      x.__getitem__(y) <==> x[y]
     32  |  
     33  |  __gt__(self, value, /)
     34  |      Return self>value.
     35  |  
     36  |  __iadd__(self, value, /)
     37  |      Implement self+=value.
     38  |  
     39  |  __imul__(self, value, /)
     40  |      Implement self*=value.
     41  |  
     42  |  __init__(self, /, *args, **kwargs)
     43  |      Initialize self.  See help(type(self)) for accurate signature.
     44  |  
     45  |  __iter__(self, /)
     46  |      Implement iter(self).
     47  |  
     48  |  __le__(self, value, /)
     49  |      Return self<=value.
     50  |  
     51  |  __len__(self, /)
     52  |      Return len(self).
     53  |  
     54  |  __lt__(self, value, /)
     55  |      Return self<value.
     56  |  
     57  |  __mul__(self, value, /)
     58  |      Return self*value.n
     59  |  
     60  |  __ne__(self, value, /)
     61  |      Return self!=value.
     62  |  
     63  |  __new__(*args, **kwargs) from builtins.type
     64  |      Create and return a new object.  See help(type) for accurate signature.
     65  |  
     66  |  __repr__(self, /)
     67  |      Return repr(self).
     68  |  
     69  |  __reversed__(...)
     70  |      L.__reversed__() -- return a reverse iterator over the list
     71  |  
     72  |  __rmul__(self, value, /)
     73  |      Return self*value.
     74  |  
     75  |  __setitem__(self, key, value, /)
     76  |      Set self[key] to value.
     77  |  
     78  |  __sizeof__(...)
     79  |      L.__sizeof__() -- size of L in memory, in bytes
     80  |  
     81  |  append(...)
     82  |      L.append(object) -> None -- append object to end
     83  |  
     84  |  clear(...)
     85  |      L.clear() -> None -- remove all items from L
     86  |  
     87  |  copy(...)
     88  |      L.copy() -> list -- a shallow copy of L
     89  |  
     90  |  count(...)
     91  |      L.count(value) -> integer -- return number of occurrences of value
     92  |  
     93  |  extend(...)
     94  |      L.extend(iterable) -> None -- extend list by appending elements from the iterable
     95  |  
     96  |  index(...)
     97  |      L.index(value, [start, [stop]]) -> integer -- return first index of value.
     98  |      Raises ValueError if the value is not present.
     99  |  
    100  |  insert(...)
    101  |      L.insert(index, object) -- insert object before index
    102  |  
    103  |  pop(...)
    104  |      L.pop([index]) -> item -- remove and return item at index (default last).
    105  |      Raises IndexError if list is empty or index is out of range.
    106  |  
    107  |  remove(...)
    108  |      L.remove(value) -> None -- remove first occurrence of value.
    109  |      Raises ValueError if the value is not present.
    110  |  
    111  |  reverse(...)
    112  |      L.reverse() -- reverse *IN PLACE*
    113  |  
    114  |  sort(...)
    115  |      L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
    116  |  
    117  |  ----------------------------------------------------------------------
    118  |  Data and other attributes defined here:
    119  |  
    120  |  __hash__ = None

    2)获取对象和当前作用域的属性列表:dir()

    1 import math
    2 
    3 print(dir(math))
    4 
    5 -----输出结果-----
    6 ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

    3)返回对象的唯一标识符:id()

    1 name='boxiaoyuan'
    2 
    3 print(id(name))
    4 
    5 ------输出结果------
    6 2125819230512

    4)获取对象的hash码:hash()

    1 name='boxiaoyuan'
    2 
    3 print(hash(name))
    4 
    5 -------输出结果------
    6 1195266938384538974

    5)根据参数返回参数的类型或者返回创建的新的对象:type() 

     1 print(type(1))
     2 class A(object):
     3     name='zhangsan'
     4 
     5 class B(object):
     6     name='lisi'
     7 
     8 cObject=type('C',(A,B),{'name':'boxiaoyuan'}) #第一个参数是一个新的对象的名称,第二个参数是基类,第三个参数是属性
     9 print(cObject.name)
    10 
    11 -------输出结果-----
    12 <class 'int'>
    13 boxiaoyuan

    6)查看对象的长度:len()

     1 print(len('abcde'))
     2 
     3 print(len({'a':1}))
     4 
     5 print(len((1,2,3,4)))
     6 
     7 ------输出结果------
     8 5
     9 1
    10 4

    7)调用对象的__repr__,获取该方法的返回值:ascii()

     1 # -*- coding:utf-8 -*-
     2 
     3 
     4 class Person:
     5 
     6     def __repr__(self):
     7         return "hello world"
     8 
     9 
    10 if __name__ == '__main__':
    11     person = Person()
    12     print(ascii(person))

    8)返回对象的格式化值:format()

     1 #1.通过位置
     2 x='a={} b={} c={}'.format('zhangsan','lisi','boxiaoyuan') #{} 不带参数
     3 print(x)
     4 y='a={1} b={0} c={2}'.format('zhangsan','lisi','boxiaoyuan') #{} 带参数
     5 print(y)
     6 #2.通过关键字参数
     7 z='my English name is {name},my age is {age}'.format(name='boxiaoyuan',age='3')
     8 print(z)
     9 #3.通过对象属性
    10 class Person:
    11     def __init__(self,name,age):
    12         self.name=name
    13         self.age=age
    14 
    15 p=Person('boxiaoyuan',3)
    16 print('name={p.name},age={p.age}'.format(p=p))
    17 #4.通过下标
    18 a1=[1,2,3,4]
    19 a2=['a','b','c']
    20 
    21 print('{0[0]},{1[1]}'.format(a1,a2))
    22 #5.格式化输出
    23 print('左对齐定长10位 [{:<10}]'.format(13))  #对齐与填充
    24 print('右对齐定长10位 [{:>10}]'.format(13))
    25 print('右对齐定长10位,以0填充 [{:0>10}]'.format(13))
    26 
    27 print('[{:.2f}]'.format(13.123456)) #小数点输出
    28 print('[{:,}]'.format(12345.1234567))#以逗号分割金额
    29 
    30 print('10转换为2进制:{:b}'.format(10))  #进制转换
    31 
    32 -------输出结果------
    33 a=zhangsan b=lisi c=boxiaoyuan
    34 a=lisi b=zhangsan c=boxiaoyuan
    35 my English name is boxiaoyuan,my age is 3
    36 name=boxiaoyuan,age=3
    37 1,b
    38 左对齐定长10位 [13        ]
    39 右对齐定长10位 [        13]
    40 右对齐定长10位,以0填充 [0000000013]
    41 [13.12]
    42 [12,345.1234567]
    43 10转换为2进制:1010

     9)返回当前作用域的局部变量和对象的属性列表和值:vars()

     1 name='zhangsan'
     2 print(vars())  #不传入参数时和locals等效,
     3 print(locals())
     4 class A(object):
     5     name='boxiaoyaun'
     6 
     7 
     8 print(vars(A))
     9 
    10 -------输出结果------
    11 {'name': 'zhangsan', '__cached__': None, '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/pythontest/test06.py', '__name__': '__main__', '__package__': None, '__spec__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020E15CF6BE0>}
    12 {'name': 'zhangsan', '__cached__': None, '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/pythontest/test06.py', '__name__': '__main__', '__package__': None, '__spec__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020E15CF6BE0>}
    13 {'name': 'boxiaoyaun', '__module__': '__main__', '__doc__': None, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>}

      5.交互类函数

    input,print

    1)键盘输入:input()

    1 password = input("请输入您的银行卡密码:")
    2 print(password)
    3 
    4 -----输出结果-----
    5 请输入您的银行卡密码:123456
    6 123456

     2)输出到控制台:print()

    %被称为格式化操作符,专门用于处理字符串中的格式。

    格式化输出:

    格式 解释 备注
    %d 整数 %06d,表示显示如果显示的数字不够6位前面用0填充
    %f 浮点数 %.2f表示小数点后只显示两位
    %s 字符串  
    %% 输出百分号  
     1 name = "小明"
     2 print("hello %s" % name)
     3 age = 18
     4 print("小明, 你的学号是:%06d" % 45)
     5 price = 2.56
     6 weight = 12
     7 total = price * weight
     8 print("小明,苹果的单价是%.2f,你买了%.2f斤,共%.2f元" % (price,weight,total))
     9 
    10 --------输出结果------
    11 hello 小明
    12 小明, 你的学号是:000045
    13 小明,苹果的单价是2.56,你买了12.00斤,共30.72元

     在默认情况下,print函数输出内容之后,会自动在内容末尾增加换行,如果不希望末尾添加换行,可以在print函数输出内容的后面增加,end="",其中""中间可以指定print函数输出内容之后,继续希望显示的内容。

    语法格式如下:

    1 # 向控制台输出内容结束之后,不会换行
    2 print("*",end="")
    3 
    4 # 单纯的换行
    5 print("")

     6.编译执行类函数

    eval,exec,repr,compile

    1)将字符串当成有效的表达式来求值并返回计算结果:eval()

    eval剥去字符串的外衣运算里面的代码。

    1 print(eval('1 + 1'))

    在开发时不要使用eval直接转换input的结果,因为这样可以使用户任意执行操作系统命令,不安全

    2)执行动态语句块:exec()

    exec()与eval几乎一样,执行代码流

    1 # -*- coding:utf-8 -*-
    2 
    3 
    4 exec('x = 3+6')
    5 print(x)

    3)返回对象的字符串表现形式给解释器:repr()

    1 In [1]: a = 'test text'
    2 
    3 In [2]: str(a)
    4 Out[2]: 'test text'
    5 
    6 In [3]: repr(a)
    7 Out[3]: "'test text'"
    8 
    9 In [4]:

    4)将字符串编译为可以通过exec进行执行或者eval进行求值:complie()

     1 # -*- coding:utf-8 -*-
     2 
     3 
     4 code = 'for a in range(1, 7): print(a)'
     5 
     6 comp = compile(code, '', 'exec')  # 流程的语句使用exec
     7 
     8 exec(comp)
     9 
    10 code1 = '1 + 2 + 3 + 4'
    11 
    12 comp1 = compile(code1, '', 'eval')  # 求值使用eval
    13 
    14 print(eval(comp1))

    7.文件操作类函数

    open,globals,locals

    1)打开文件,并返回文件对象:open()

    1 # -*- coding:utf-8 -*-
    2 
    3 
    4 with open("d:test.txt", "r") as file:
    5     for line in file:
    6         print(line, end="")

    8.变量操作类函数

    1)获取当前作用域的全局变量和值的字典:globals()

    >>> globals()
    {'__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__spec__': None, '__builtins__': <module 'builtins' (built-in)>}
    >>> a = 4
    >>> globals()
    {'__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__name__': '__main__', '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, 'a': 4}

    2)获取当前作用域的局部变量和值的字典:locals()

     1 >>> def func():
     2 ...     print('before a')
     3 ...     print(locals())
     4 ...     a = 2
     5 ...     print('after a')
     6 ...     print(locals())
     7 ...
     8 >>> func()
     9 before a
    10 {}
    11 after a
    12 {'a': 2}
    13 >>>

    9.反射操作类函数

    __import__,isinstance,issubclass,hasattr,getattr,setattr,delattr,callable

    1)动态导入模块:__import__()

    1 # -*- coding:utf-8 -*-
    2 
    3 time = __import__("time")
    4 now = time.localtime()
    5 print(time.strftime("%Y-%m-%d %H:%M:%S", now))

    2)判断对象是否是给定类的实例:isinstance()

    1 In [1]: isinstance(1, int)
    2 Out[1]: True
    3 
    4 In [2]: isinstance('2', (int, str))
    5 Out[2]: True

    3)判断类是否为给定类的子类:issubclass()

    1 In [1]: issubclass(bool, int)
    2 Out[1]: True
    3 
    4 In [2]: issubclass(bool, (int, str))
    5 Out[2]: True
    6 
    7 In [3]:

    4)判断对象是有含有给定属性:hasattr();获取对象的属性值:getattr();设置对象的属性值:setattr();删除对象的属性值:delattr()

     1 In [1]: class Person:
     2    ...:     def __init__(self, name):
     3    ...:         self.name = name
     4    ...:
     5 
     6 In [2]: p = Person('zhangsan')
     7 
     8 In [3]: hasattr(p,'name')
     9 Out[3]: True
    10 
    11 In [4]: getattr(p, 'name')
    12 Out[4]: 'zhangsan'
    13 
    14 In [5]: setattr(p, 'name','lisi')
    15 
    16 In [6]: getattr(p, 'name')
    17 Out[6]: 'lisi'
    18 
    19 In [7]: delattr(p, 'name')
    20 
    21 In [8]: getattr(p, 'name')
    22 ---------------------------------------------------------------------------
    23 AttributeError                            Traceback (most recent call last)
    24 <ipython-input-8-ee5bfa7ae925> in <module>
    25 ----> 1 getattr(p, 'name')
    26 
    27 AttributeError: 'Person' object has no attribute 'name'

    5)检查对象是否可被调用:callable()

    s1 = 'asdfg'
    
    
    def func():
        pass
    
    
    print(callable(s1))  # False
    print(callable(func))  # True
  • 相关阅读:
    c学习第3天
    [BZOJ2124] 等差子序列
    CF710F String Set Queries
    Cow Hopscotch (dp+树状数组优化)
    CF528D Fuzzy Search (bitset)
    Gym 101667L Vacation Plans (dp)
    Codeforces 432D Prefixes and Suffixes (kmp+dp)
    [题解]BZOJ2115 XOR
    洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    从中国矢量图筛选出江苏省行政区划图
  • 原文地址:https://www.cnblogs.com/zhuzhaoli/p/10300705.html
Copyright © 2011-2022 走看看