zoukankan      html  css  js  c++  java
  • python内置变量与函数

    python内置全局变量

    vars()查看内置全局变量 以字典方式返回内置全局变量

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    print(vars())

    #输出

    # {'__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__package__': None, '__doc__': None, '__name__': '__main__', '__cached__': None, '__file__': 'H:/py/index.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000000AC32C66A58>}

    __doc__ :获取文件的注释

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    """

    这里是文件的注释

    """

    print(__doc__)  #__doc__    :获取文件的注释

    #输出

    # 这里是文件的注释

    __file__ 【重点】获取当前文件的路径

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    print(__file__)  #__file__ :获取当前文件的路径

    #输出

    # H:/py/index.py

    __file__一般配合os模块的os.path.dirname()os.path.basename() os.path.join() 模块函数来使用

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    import os

    a = __file__    # __file__全局变量获取当前文件路径

    print(a)

    b = os.path.dirname(a) #获取文件当前目录:注意:os.path.dirname()叠加一次向上找一次 如下

    print(b)

    b2 = os.path.dirname(b) #获取文件当前目录的上级目录,注意:os.path.dirname()叠加一次向上找一次

    print(b2)

    c = os.path.basename(a) #获取文件名称

    print(c)

    #输出

    # H:/py/lib/ska/mk.py

    # H:/py/lib/ska

    # H:/py/lib

    # mk.py

     __file__获取模块路径,添加到解释器模块路径里

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    import sys

    import os

    a = __file__    # __file__全局变量获取当前文件路径

    print(a)

    b = os.path.dirname(a) #获取文件当前目录

    print(b)

    c = "lib" #自定义文件目录名称

    d = os.path.join(b,c) #将获取文件当前目录,与自定义文件目录名称,拼接成完整的路径

    print(d)

    print(" ")

    sys.path.append(d) #将拼接好的路径,添加到解释器模块路径中

    for i in sys.path:  #

        print(i)

    #输出

    # H:/py/index.py

    # H:/py

    # H:/pylib

    #

    #

    # H:py

    # C:UsersadminAppDataLocalProgramsPythonPython35libsite-packagespip-8.1.2-py3.5.egg

    # H:py

    # C:UsersadminAppDataLocalProgramsPythonPython35python35.zip

    # C:UsersadminAppDataLocalProgramsPythonPython35DLLs

    # C:UsersadminAppDataLocalProgramsPythonPython35lib

    # C:UsersadminAppDataLocalProgramsPythonPython35

    # C:UsersadminAppDataLocalProgramsPythonPython35libsite-packages

    # H:/pylib

    __package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    print(__package__)  #注意:对当前文件返回None

    from lib.ska import mk  #导入mk模块文件

    print(mk.__package__) #__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None

    #输出

    # None

    # lib.ska

    # lib.ska

    __cached__ :获取导入文件的缓存路径

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    from lib.ska import mk  #导入mk模块文件

    print(mk.__cached__) #__cached__ :获取导入文件的缓存路径

    #输出

    # H:pylibska\__pycache__mk.cpython-35.pyc

    __name__   获取导入文件的路径加文件名称,路径以点分割,注意:获取当前文件返回__main__ 

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    print(__name__) #注意:获取当前文件返回__main__

    from lib.ska import mk  #导入mk模块文件

    print(mk.__name__)  #获取导入文件的路径加文件名称,路径以点分割

    #输出

    # __main__

    # lib.ska.mk

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    if __name__ == "__main__":

    #__name__  全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__  ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值就不在是__main__,而是如果文件的路径加入口文件名称,所以我们可以用__name__全局变量来防止别人盗链入口文件

        print("执行")

    #这样只有执行index文件时才执行判断里的,index被导入到到别的文件,就不会执行判断里的

    __builtins__  内置函数在这里面

    python内置函数

     

    截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。

      数学运算

       

      类型转换

      序列操作

      对象操作

    • 1、help:返回对象的帮助信息
      复制代码
      >>> help(str) 
      Help on class str in module builtins:
      
      class str(object)
       |  str(object='') -> str
       |  str(bytes_or_buffer[, encoding[, errors]]) -> str
       |  
       |  Create a new string object from the given object. If encoding or
       |  errors is specified, then the object must expose a data buffer
       |  that will be decoded using the given encoding and error handler.
       |  Otherwise, returns the result of object.__str__() (if defined)
       |  or repr(object).
       |  encoding defaults to sys.getdefaultencoding().
       |  errors defaults to 'strict'.
       |  
       |  Methods defined here:
       |  
       |  __add__(self, value, /)
       |      Return self+value.
       |  
        ***************************
      复制代码
    • 2、dir:返回对象或者当前作用域内的属性列表
      复制代码
      >>> import math
      >>> math
      <module 'math' (built-in)>
      >>> dir(math)
      ['__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:返回对象的唯一标识符
      >>> a = 'some text'
      >>> id(a)
      69228568
    • 4、hash:获取对象的哈希值
      >>> hash('good good study')
      1032709256
    • 5、type:返回对象的类型,或者根据传入的参数创建一个新的类型
      复制代码
      >>> type(1) # 返回对象的类型
      <class 'int'>
      
      #使用type函数创建类型D,含有属性InfoD
      >>> D = type('D',(A,B),dict(InfoD='some thing defined in D'))
      >>> d = D()
      >>> d.InfoD
       'some thing defined in D'
      复制代码
    • 6、len:返回对象的长度
      复制代码
      >>> len('abcd') # 字符串
      >>> len(bytes('abcd','utf-8')) # 字节数组
      >>> len((1,2,3,4)) # 元组
      >>> len([1,2,3,4]) # 列表
      >>> len(range(1,5)) # range对象
      >>> len({'a':1,'b':2,'c':3,'d':4}) # 字典
      >>> len({'a','b','c','d'}) # 集合
      >>> len(frozenset('abcd')) #不可变集合
      复制代码
    • 7、ascii:返回对象的可打印表字符串表现方式
      复制代码
      >>> ascii(1)
      '1'
      >>> ascii('&')
      "'&'"
      >>> ascii(9000000)
      '9000000'
      >>> ascii('中文') #非ascii字符
      "'\u4e2d\u6587'"
      复制代码
    • 8、format:格式化显示值
      复制代码
      #字符串可以提供的参数 's' None
      >>> format('some string','s')
      'some string'
      >>> format('some string')
      'some string'
      
      #整形数值可以提供的参数有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None
      >>> format(3,'b') #转换成二进制
      '11'
      >>> format(97,'c') #转换unicode成字符
      'a'
      >>> format(11,'d') #转换成10进制
      '11'
      >>> format(11,'o') #转换成8进制
      '13'
      >>> format(11,'x') #转换成16进制 小写字母表示
      'b'
      >>> format(11,'X') #转换成16进制 大写字母表示
      'B'
      >>> format(11,'n') #和d一样
      '11'
      >>> format(11) #默认和d一样
      '11'
      
      #浮点数可以提供的参数有 'e' 'E' 'f' 'F' 'g' 'G' 'n' '%' None
      >>> format(314159267,'e') #科学计数法,默认保留6位小数
      '3.141593e+08'
      >>> format(314159267,'0.2e') #科学计数法,指定保留2位小数
      '3.14e+08'
      >>> format(314159267,'0.2E') #科学计数法,指定保留2位小数,采用大写E表示
      '3.14E+08'
      >>> format(314159267,'f') #小数点计数法,默认保留6位小数
      '314159267.000000'
      >>> format(3.14159267000,'f') #小数点计数法,默认保留6位小数
      '3.141593'
      >>> format(3.14159267000,'0.8f') #小数点计数法,指定保留8位小数
      '3.14159267'
      >>> format(3.14159267000,'0.10f') #小数点计数法,指定保留10位小数
      '3.1415926700'
      >>> format(3.14e+1000000,'F')  #小数点计数法,无穷大转换成大小字母
      'INF'
      
      #g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,如果-4<=exp<p,则采用小数计数法,并保留p-1-exp位小数,否则按小数计数法计数,并按p-1保留小数位数
      >>> format(0.00003141566,'.1g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点
      '3e-05'
      >>> format(0.00003141566,'.2g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留1位小数点
      '3.1e-05'
      >>> format(0.00003141566,'.3g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留2位小数点
      '3.14e-05'
      >>> format(0.00003141566,'.3G') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点,E使用大写
      '3.14E-05'
      >>> format(3.1415926777,'.1g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留0位小数点
      '3'
      >>> format(3.1415926777,'.2g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留1位小数点
      '3.1'
      >>> format(3.1415926777,'.3g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留2位小数点
      '3.14'
      >>> format(0.00003141566,'.1n') #和g相同
      '3e-05'
      >>> format(0.00003141566,'.3n') #和g相同
      '3.14e-05'
      >>> format(0.00003141566) #和g相同
      '3.141566e-05'
      复制代码
    • 9、vars:返回当前作用域内的局部变量和其值组成的字典,或者返回对象的属性列表
      复制代码
      #作用于类实例
      >>> class A(object):
          pass
      
      >>> a.__dict__
      {}
      >>> vars(a)
      {}
      >>> a.name = 'Kim'
      >>> a.__dict__
      {'name': 'Kim'}
      >>> vars(a)
      {'name': 'Kim'}
      复制代码

      反射操作

    • 1、__import__:动态导入模块
      index = __import__('index')
      index.sayHello()
    • 2、isinstance:判断对象是否是类或者类型元组中任意类元素的实例
      >>> isinstance(1,int)
      True
      >>> isinstance(1,str)
      False
      >>> isinstance(1,(int,str))
      True
    • 3、issubclass:判断类是否是另外一个类或者类型元组中任意类元素的子类
      复制代码
      >>> issubclass(bool,int)
      True
      >>> issubclass(bool,str)
      False
      
      >>> issubclass(bool,(str,int))
      True
      复制代码
    • 4、hasattr:检查对象是否含有属性
      复制代码
      #定义类A
      >>> class Student:
          def __init__(self,name):
              self.name = name
      
              
      >>> s = Student('Aim')
      >>> hasattr(s,'name') #a含有name属性
      True
      >>> hasattr(s,'age') #a不含有age属性
      False
      复制代码
    • 5、getattr:获取对象的属性值
      复制代码
      #定义类Student
      >>> class Student:
          def __init__(self,name):
              self.name = name
      
      >>> getattr(s,'name') #存在属性name
      'Aim'
      
      >>> getattr(s,'age',6) #不存在属性age,但提供了默认值,返回默认值
      
      >>> getattr(s,'age') #不存在属性age,未提供默认值,调用报错
      Traceback (most recent call last):
        File "<pyshell#17>", line 1, in <module>
          getattr(s,'age')
      AttributeError: 'Stduent' object has no attribute 'age'
      复制代码
    • 6、setattr:设置对象的属性值
      复制代码
      >>> class Student:
          def __init__(self,name):
              self.name = name
      
              
      >>> a = Student('Kim')
      >>> a.name
      'Kim'
      >>> setattr(a,'name','Bob')
      >>> a.name
      'Bob'
      复制代码
    • 7、delattr:删除对象的属性
      复制代码
      #定义类A
      >>> class A:
          def __init__(self,name):
              self.name = name
          def sayHello(self):
              print('hello',self.name)
      
      #测试属性和方法
      >>> a.name
      '小麦'
      >>> a.sayHello()
      hello 小麦
      
      #删除属性
      >>> delattr(a,'name')
      >>> a.name
      Traceback (most recent call last):
        File "<pyshell#47>", line 1, in <module>
          a.name
      AttributeError: 'A' object has no attribute 'name'
      复制代码
    • 8、callable:检测对象是否可被调用
      复制代码
      >>> class B: #定义类B
          def __call__(self):
              print('instances are callable now.')
      
              
      >>> callable(B) #类B是可调用对象
      True
      >>> b = B() #调用类B
      >>> callable(b) #实例b是可调用对象
      True
      >>> b() #调用实例b成功
      instances are callable now.
      复制代码

      变量操作

    • 1、globals:返回当前作用域内的全局变量和其值组成的字典
      复制代码
      >>> globals()
      {'__spec__': None, '__package__': None, '__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', '__doc__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>}
      >>> a = 1
      >>> globals() #多了一个a
      {'__spec__': None, '__package__': None, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, '__name__': '__main__', '__doc__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>}
      复制代码
    • 2、locals:返回当前作用域内的局部变量和其值组成的字典
      复制代码
      >>> def f():
          print('before define a ')
          print(locals()) #作用域内无变量
          a = 1
          print('after define a')
          print(locals()) #作用域内有一个a变量,值为1
      
          
      >>> f
      <function f at 0x03D40588>
      >>> f()
      before define a 
      {} 
      after define a
      {'a': 1}
      复制代码

      交互操作

      文件操作

      编译执行

      装饰器

    • 1、property:标示属性的装饰器
      复制代码
      >>> class C:
          def __init__(self):
              self._name = ''
          @property
          def name(self):
              """i'm the 'name' property."""
              return self._name
          @name.setter
          def name(self,value):
              if value is None:
                  raise RuntimeError('name can not be None')
              else:
                  self._name = value
      
                  
      >>> c = C()
      
      >>> c.name # 访问属性
      ''
      >>> c.name = None # 设置属性时进行验证
      Traceback (most recent call last):
        File "<pyshell#84>", line 1, in <module>
          c.name = None
        File "<pyshell#81>", line 11, in name
          raise RuntimeError('name can not be None')
      RuntimeError: name can not be None
      
      >>> c.name = 'Kim' # 设置属性
      >>> c.name # 访问属性
      'Kim'
      
      >>> del c.name # 删除属性,不提供deleter则不能删除
      Traceback (most recent call last):
        File "<pyshell#87>", line 1, in <module>
          del c.name
      AttributeError: can't delete attribute
      >>> c.name
      'Kim'
      复制代码
    • 2、classmethod:标示方法为类方法的装饰器
      复制代码
      >>> class C:
          @classmethod
          def f(cls,arg1):
              print(cls)
              print(arg1)
      
              
      >>> C.f('类对象调用类方法')
      <class '__main__.C'>
      类对象调用类方法
      
      >>> c = C()
      >>> c.f('类实例对象调用类方法')
      <class '__main__.C'>
      类实例对象调用类方法
      复制代码
    • 3、staticmethod:标示方法为静态方法的装饰器
      复制代码
      # 使用装饰器定义静态方法
      >>> class Student(object):
          def __init__(self,name):
              self.name = name
          @staticmethod
          def sayHello(lang):
              print(lang)
              if lang == 'en':
                  print('Welcome!')
              else:
                  print('你好!')
      
                  
      >>> Student.sayHello('en') #类调用,'en'传给了lang参数
      en
      Welcome!
      
      >>> b = Student('Kim')
      >>> b.sayHello('zh')  #类实例对象调用,'zh'传给了lang参数
      zh
      你好
      复制代码
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 排队打水问题
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    现在使用控件, 更喜欢继承(覆盖控件已有的函数,很奇怪的一种使用方式)
    Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
    QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)
  • 原文地址:https://www.cnblogs.com/tester-l/p/6056077.html
Copyright © 2011-2022 走看看