python內置變量與函數

python內置全局變量

vars()查看內置全局變量 以字典方式返回內置全局變量html

#!/usr/bin/env pythonpython

# -*- coding:utf8 -*-shell

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>}app

 

__doc__ :獲取文件的註釋ssh

#!/usr/bin/env python函數

# -*- coding:utf8 -*-post

"""測試

這裏是文件的註釋

"""

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("\n")

 

sys.path.append(d) #將拼接好的路徑,添加到解釋器模塊路徑中

 

for i in sys.path:  #

    print(i)

#輸出

# H:/py/index.py

# H:/py

# H:/py\lib

#

#

# H:\py

# C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages\pip-8.1.2-py3.5.egg

# H:\py

# C:\Users\admin\AppData\Local\Programs\Python\Python35\python35.zip

# C:\Users\admin\AppData\Local\Programs\Python\Python35\DLLs

# C:\Users\admin\AppData\Local\Programs\Python\Python35\lib

# C:\Users\admin\AppData\Local\Programs\Python\Python35

# C:\Users\admin\AppData\Local\Programs\Python\Python35\lib\site-packages

# H:/py\lib

 

__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:\py\lib\ska\__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提供給你直接能夠拿來使用的全部函數。

 

  數學運算

   

 

  類型轉換

 

 

  序列操做

 

 

  對象操做

  • 一、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.
     |  
      ***************************
    複製代碼
  • 二、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']
    複製代碼
  • 三、id:返回對象的惟一標識符
    >>> a = 'some text'
    >>> id(a)
    69228568
  • 四、hash:獲取對象的哈希值
    >>> hash('good good study')
    1032709256
  • 五、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'
    複製代碼
  • 六、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')) #不可變集合
    複製代碼
  • 七、ascii:返回對象的可打印表字符串表現方式
    複製代碼
    >>> ascii(1)
    '1'
    >>> ascii('&')
    "'&'"
    >>> ascii(9000000)
    '9000000'
    >>> ascii('中文') #非ascii字符
    "'\\u4e2d\\u6587'"
    複製代碼
  • 八、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'
    複製代碼
  • 九、vars:返回當前做用域內的局部變量和其值組成的字典,或者返回對象的屬性列表
    複製代碼
    #做用於類實例
    >>> class A(object):
        pass
    
    >>> a.__dict__
    {}
    >>> vars(a)
    {}
    >>> a.name = 'Kim'
    >>> a.__dict__
    {'name': 'Kim'}
    >>> vars(a)
    {'name': 'Kim'}
    複製代碼

 

 

  反射操做

  • 一、__import__:動態導入模塊
    index = __import__('index')
    index.sayHello()
  • 二、isinstance:判斷對象是不是類或者類型元組中任意類元素的實例
    >>> isinstance(1,int)
    True
    >>> isinstance(1,str)
    False
    >>> isinstance(1,(int,str))
    True
  • 三、issubclass:判斷類是不是另一個類或者類型元組中任意類元素的子類
    複製代碼
    >>> issubclass(bool,int)
    True
    >>> issubclass(bool,str)
    False
    
    >>> issubclass(bool,(str,int))
    True
    複製代碼
  • 四、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
    複製代碼
  • 五、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'
    複製代碼
  • 六、setattr:設置對象的屬性值
    複製代碼
    >>> class Student:
        def __init__(self,name):
            self.name = name
    
            
    >>> a = Student('Kim')
    >>> a.name
    'Kim'
    >>> setattr(a,'name','Bob')
    >>> a.name
    'Bob'
    複製代碼
  • 七、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'
    複製代碼
  • 八、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.
    複製代碼

 

 

  變量操做

  • 一、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'>}
    複製代碼
  • 二、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}
    複製代碼

 

 

  交互操做

 

 

  文件操做

 

 

  編譯執行

 

 

  裝飾器

  • 一、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'
    複製代碼
  • 二、classmethod:標示方法爲類方法的裝飾器
    複製代碼
    >>> class C:
        @classmethod
        def f(cls,arg1):
            print(cls)
            print(arg1)
    
            
    >>> C.f('類對象調用類方法')
    <class '__main__.C'>
    類對象調用類方法
    
    >>> c = C()
    >>> c.f('類實例對象調用類方法')
    <class '__main__.C'>
    類實例對象調用類方法
    複製代碼
  • 三、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
    你好
    複製代碼
相關文章
相關標籤/搜索