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
      你好
      复制代码
  • 相关阅读:
    开发中常见的七种加密算法及实现
    MySql 函数大全(一)
    MySql 函数大全(二)
    MySql中查询优化方法
    double类型保留一位小数, 其他位数舍弃方法
    java.lang.IllegalArgument,Parse error in application web.xml file at jndi:/localhost/WEB-INF/web.xml
    c#版HOOK微信来了。实时获取微信消息以及公众号文章等
    c#hook微信,实现实时获取微信公众号文章
    C# 未能创建 SSL/TLS 安全通道 和C# 基础连接已经关闭: 发送时发生错误. 解决方案
    .net post一个xml文件到url
  • 原文地址:https://www.cnblogs.com/tester-l/p/6056077.html
Copyright © 2011-2022 走看看