python函數 | 內置函數大全


  • 數學運算(7)
  • 類型轉換(21)
  • 序列操作(8)
  • 對象操作(6)
  • 反射操作(7)
  • 裝飾器(3)
  • 變量作用域(3)
  • 字符串類型代碼(4)
  • 輸入輸出(2)
  • 迭代器、生成器相關(2)
  • 其他(4)

 

一、數學運算

abs:返回數字的絕對值

abs(-1)                     # 1

round:保留浮點數的小數位數,默認保留整數。四舍五入。

round(1.553,1)                 #1.6

divmod:計算除數和被除數的結果,並返回一個包含商和余數的元組

divmod(5,2)                 # (2,1)

pow:求x**y次冪(當有第三參數時,x**y的結果對z取余 )

pow(2,5)               #32
pow(2,3,5)             # 這里為3個參數,2的3次方,結果為8。用8和5做除法,取余為3,最終輸出3

sum:可迭代對象進行求和計算(可設置初始值)

# sum最多只有2個參數
sum([1,2,3,4,5])            #15
sum([1,2,3,4,5],100)         #115
sum(1,2,3,4,5)              #報錯

min:返回可迭代對象的最小值(可加key,key為函數名,通過函數的規則,返回最小值)。

  I. 將iterable的每一個元素當作函數的參數傳給函數,字典中,元素是鍵

  II. 按照函數的返回值進行比較大小

  III. 返回的是遍歷的元素x,即傳入函數的參數

min([1,-2,3,-4,5])                        #-4
min([1,-2,3,-4,5],key=abs)                # 按照絕對值的大小,返回此序列最小值 1
min(1,2,-5,6,-3,key=lambda x:abs(x))      # 可以設置很多參數比較大小
ls=[('spring',100),('summer',18),('winter',500)]
def func(x):
    return x[1]
print(min(ls,key=func))              #('summer',18)
dic = {'a': 3, 'b': 2, 'c': 1}
def func1(x):
    return dic[x]
print(min(dic,key=func1))          #c
# x為dic的key,lambda的返回值(即dic的值進行比較)返回最小的值對應的鍵
dic = {'a':3,'b':2,'c':1}
print(min(dic,key=lambda x:dic[x]))

max:返回可迭代對象的最大值(可加key,key為函數名,通過函數的規則,返回最大值)。與min用法相同

 

二.類型轉換

進制轉化

bin:將十進制轉化成二進制

bin(100)       #0b1100100

oct:將十進制轉化成八進制

oct(100)        #0o144

hex:將十進制轉化成十六進制

hex(100)       #0x64

 

字符串和ASCll編碼轉換

ord:輸入字符,找該字符在unicode編碼的位置

 

ord('A') = 65
ord('Z') = 90

ord('a') = 97
ord('z') = 122

ord('') = 20320

 

chr:輸入位置數字,找出相對應的字符,與ord相反

 

chr(65) = 'A'
chr(90) = 'Z'

chr(97) = 'a'
chr(122) = 'z'

chr(20320) = ''

 

ascii:是ascii碼表中的內容返回原值,不是返回\u + 他在Unicode中的位置

ascii('q')          #'q' ascii('')         #'\u4f60' 轉化成十進制就是 20320

 

數據類型轉化相關

int:將字符串或數字轉化成整型,用於將其他進制數轉化成十進制。取整數,不會四舍五入

int(1.543)       #1
int('123')       #123
int('0101',base=2)   # 5

float:將字符串或整數轉化成浮點型

float(1)         #1.0
float('1')       #1.0

bool:用於將給定參數轉化為布爾類型

bool(123)        #True

complex:用於創建一個值為 real+image*j的復數,當第一個參數為字符串時,不要設置第二個參數。

complex(1,2)     #(1+2j)
complex('1')     #(1+0j)

str:將數據轉化成字符串

str(2.3)                           # 轉換為字符串2.3

bytes:用於不同編碼之間的轉化。將unicode 轉為非unicode。只能編碼,不能解碼

編碼轉換,將unicode轉換為utf-8
方法一:
s1 = '小太陽'
s2 = s1.encode('utf-8')
print(s2)                           # b'\xe5\xb0\x8f\xe5\xa4\xaa\xe9\x98\xb3'

方法二:
s1 = '小太陽'
print(bytes(s1,encoding='utf-8')) # b'\xe5\xb0\x8f\xe5\xa4\xaa\xe9\x98\xb3'

list:將一個可迭代對象轉化成列表(如果是字典,默認將key作為列表的元素)

l1 = list((1,2,3))                # [1, 2, 3]
l2 = list({1,2,3})                # [1, 2, 3]
l3 = list({'name':'xiaoming','age':13})    # ['name', 'age']

tuple將一個可迭代對象轉化成元組如果是字典,默認將key作為元組的元素

tup1 = tuple([1,2,3])                # (1, 2, 3)
tup2 = tuple({'name':'xiaoming','age':13})  # ('name', 'age')

dict:創建一個字典

dict(a = 1,b = 2)                 # {'b': 2, 'a': 1}
dict(zip(['a','b'],[1,2]))           # 可以傳入映射函數創建字典。{'b': 2, 'a': 1}
dict((('a',1),('b',2)))             # 可以傳入可迭代對象創建字典。{'b': 2, 'a': 1}

set:創建一個集合

a = set(range(10))                 # 傳入可迭代對象,創建集合{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

 

其他

bytearry:返回一個新字節數組。數組中元素可變,並且每個元素的值范圍: 0 <= x < 256。(很少用)

ret = bytearray('hello',encoding='utf-8')
print(ret)   #bytearray(b'hello')
print(id(ret))   #1979800230744
print(ret[0])   #104  h在ascii碼中的位置

ret[0] = 97   #將第一位改為a
print(ret)   #bytearray(b'aello')
print(id(ret))   #1979800230744  id是相同的
bytearray('中文','utf-8') # bytearray(b'\xe4\xb8\xad\xe6\x96\x87')

memoryview:返回對象obj的內存查看對象。所謂內存查看對象,就是對象符合緩沖區協議的對象,為了給別的代碼使用緩沖區里的數據,而不必拷貝,就可以直接使用。(沒啥用)

ret = memoryview(bytes('你好',encoding='utf-8'))
print(ret)   #<memory at 0x000001DA89DDB408>
print(len(ret)) # 6
print(bytes(ret[0:3]).decode('utf-8'))   #你
print(bytes(ret[3:]).decode('utf-8'))   #好
 
ret = memoryview(b'abcefg')
print(ret[1])                   # 98
print(ret[-1])                  # 103

frozenset:返回一個凍集合(新的不可變集合),凍結后的集合不能再添加或刪除任何元素

a = frozenset(range(10))
print(a)                                # frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})

enumerate:枚舉,返回一個枚舉對象。 (0, seq[0]), (1, seq[1]), (2, seq[2])

li = ['spring', 'summer', 'autumn', 'winter']
print(enumerate(li))                 # <enumerate object at 0x02E3D558>
print('__iter__' in dir(enumerate(li)))       # True
print('__next__' in dir(enumerate(li)))       # True

  enumerate是一個迭代器, 返回結果為:列表元素的索引以及對應的值

li = ['spring', 'summer', 'autumn', 'winter']
for i in enumerate(li):
    print(i)

執行輸出:
(0, 'spring')
(1, 'summer')
(2, 'autumn')
(3, 'winter')

li = ['spring', 'summer', 'autumn', 'winter']

for k,v in enumerate(li):
    print(k,v)

執行輸出:

0 spring

1 summer

2 autumn

3 winter

  enumerate的第2個參數,表示從多少開始。默認從0開始

 

li = ['spring', 'summer', 'autumn', 'winter']
print(list(enumerate(li)))                 # [(0, 'spring'), (1, 'summer'), (2, 'autumn'), (3, 'winter')]
print(list(enumerate(li, start=1)))        #指定起始值,[(1, 'spring'), (2, 'summer'), (3, 'autumn'), (4, 'winter')]

 

 

 

li = ['spring', 'summer', 'autumn', 'winter']

for k,v in enumerate(li,10):
    print(k,v)

執行輸出:
10 spring
11 summer
12 autumn
13 winter

range:根據傳入的參數創建一個新的range對象,一般用在for循環中

a = range(10)
b = range(1,10)
c = range(1,10,3)

print(a,list(a)) # range(0, 10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(b,list(b))        # range(1, 10) [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(c,list(c))        # range(1, 10, 3) [1, 4, 7]

三、序列操作

slice:構建一個切片對象,用於列表的切片

l1 = [i for i in range(10)]
l2 = l1[:5:2]
print(l2)              #[0, 2, 4],按照普通切片方法

reversed:將一個序列反轉,並返回此反轉序列的迭代器,字典不能反轉。

l1 = [1,2,3,4]
print(reversed(l1))       # <list_reverseiterator object at 0x0000026B679FA4E0>

for i in reversed(l1):
    print(i)    # 4 3 2 1
s = 'asdf'
for i in reversed(s):
    print(i)   # f d s a
dic = {'name':'xiaoming','age':13}
for i in reversed(dic):
    print(i)   #字典不能反轉  TypeError: 'dict' object is not reversible

sorted:對可迭代對象進行排序,只能列表使用. 可加key,key為函數名,通過函數的規則進行排序。默認從小到大,加入reverse = True時按照從大到小。與 li.sort()相比,原列表不發生改變

  sorted(iterable,key=None,reverse=False)

  key: 排序規則(排序函數),在sorted內部會將可迭代對象中的每一個元素傳遞給這個函數的參數.根據函數運算的結果進行排序

  reverse :是否是倒敘,True 倒敘 False 正序

默認升序
li = [1,2,7,8,5,4,3]
print(sorted(li))         # [1, 2, 3, 4, 5, 7, 8]

按照絕對值排序
li = [1,-2,-7,8,5,-4,3]
print(sorted(li,reverse=True,key=abs))        # [8, -7, 5, -4, 3, -2, 1]

原列表改變
l1 = [1,3,3,2,9]
l1.sort()
print(l1)          #[1, 2, 3, 3, 9]  

原列表不發生改變
l2 = [2,3,4,6,4,1]
print(sorted(l2))                  #[1, 2, 3, 4, 4, 6]
print(l2)                      #[2, 3, 4, 6, 4, 1]  

l3 = [(1,100),(2,18),(4,250),(3,500)]
def func1(x):
    return x[1]
print(sorted(l3,key=func1))          #[(2, 18), (1, 100), (4, 250), (3, 500)]

字典使用sorted排序, 字典排序返回的就是排序后的key
dic = {1:'a',3:'c',2:'b'}
print(sorted(dic))                 # [1,2,3]
 和函數組合使用
定義一個列表,然后根據一元素的長度排序
lst = ['天龍八部','西游記','紅樓夢','三國演義']
def func(s):
    return len(s)

print(sorted(lst,key=func))                        #  ['西游記', '紅樓夢', '天龍八部', '三國演義']


和lambda組合使用
lst = ['天龍八部','西游記','紅樓夢','三國演義']
print(sorted(lst,key=lambda s:len(s)))                #  ['西游記', '紅樓夢', '天龍八部', '三國演義']

lst = [{'id':1,'name':'alex','age':18},
    {'id':2,'name':'wusir','age':17},
    {'id':3,'name':'taibai','age':16},]
 
# 按照年齡對學生信息進行排序
print(sorted(lst,key=lambda e:e['age']))
 
結果:[{'id': 3, 'name': 'taibai', 'age': 16}, {'id': 2, 'name': 'wusir', 'age': 17}, {'id': 1, 'name': 'alex', 'age': 18}]

all:可迭代對象中,全是True才是True

print(all([1,2,3,0]))   #False
print(all([1,2,3,4]))   #True

any:可迭代對象中,有一個是True就是True

print(any([1,[],{},0,()]))   #True

zip:將可迭代對象作為參數,將對象中的元素打包成一個元組,返回由這些元組組成的迭代器。

        如果可迭代對象中元素的數量不一致,則返回元組個與最短的對象相同。zip結果取決於最短的一個,返回的數據是元組。

        拉鏈方法:將多個iter縱向組成一個個的元組

l = [1,3,5]
tu = ('china','america','japan','korean')
dic = {'name':1,'age':2,'hobby':3}
for i in zip(l,tu,dic):
    print(i)      
    
輸出結果:
(1, 'china', 'name')
(3, 'america', 'age')
(5, 'japan', 'hobby')

lst1 = [1,2,3]
lst2 = ['a','b','c','d']
lst3 = (11,12,13,14,15)
for i in zip(lst1,lst2,lst3):
    print(i)
​
輸出結果:
(1, 'a', 11)
(2, 'b', 12)
(3, 'c', 13)

filter:通過函數過濾可迭代對象,函數中return的是一個條件,返回一個迭代器。相當於生成器表達式的篩選模式。類似於[i for i in range(10) if i > 3]

  filter(function,iterable)

  function: 用來篩選的函數,在filter中會自動的把iterable中的元素傳遞給function,然后根據function返回的True或者False來判斷是否保留此項數據

  iterable:可迭代對象

l = [i for i in range(10)]
def func1(x):
    return x>5

for i in filter(func1,l):
    print(i)
lst = [{'id': 1, 'name': 'Joe', 'age': 18},
       {'id': 1, 'name': 'Paul', 'age': 17},
       {'id': 1, 'name': 'May', 'age': 16}, ]

ls = filter(lambda lst: lst['age'] > 16, lst)
print(list(ls))    # [{'id': 1, 'name': 'Joe', 'age': 18}, {'id': 1, 'name': 'Paul', 'age': 17}]
取列表中的偶數
def func(x):
    return x % 2 == 0
ret = filter(func,[1,2,3,4,5,6,7])
print(ret)
for i in ret:
    print(i) 

執行輸出:
<filter object at 0x0000021325A4B6D8>
2
4
6
使用列表生成式完成
li = [i for i in [1,2,3,4,5,6,7] if i % 2 == 0]
print(li) 

map:根據提供的函數對指定的序列做映射,返回一個迭代器,相當於生成器表達式中的循環模式

  map(function,iterable) 可以對可迭代對象中的每一個元素進映射,分別執行function

計算列表各個元素的平方
def square(x):                         
    return x ** 2

ret = map(square,[1,2,3,4,5])                 
for i in ret:
    print(i) 

執行輸出:
1
4
9
16
25
改寫成lambda
lst = [1,2,3,4,5]
print(list(map(lambda s:s*s,lst)))
map也是迭代器
l = [i for i in range(3)]
def func(x):
    return x**2

for i in map(func,l):
    print(i) 
計算兩個列表中相同位置的數據的和
lst1 = [1, 2, 3, 4, 5]
lst2 = [2, 4, 6, 8, 10]
print(list(map(lambda x, y: x+y, lst1, lst2)))        # [3, 6, 9, 12, 15]

四、對象操作

hash:獲取一個對象(可哈希對象:int,str,Bool,tuple)的哈希值

print(hash('123'))          #6154395912723147770
print(hash(123))         #123,數字不變

id:獲取對象的內存地址

print(id(123))            #1785819168

dir:查看對象或者當前作用域內的屬性列表。函數不帶參數時,返回當前范圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表。如果參數包含方法__dir__(),該方法將被調用。如果參數不包含__dir__(),該方法將最大限度地收集參數信息。

print(dir(list))         # ['__add__', '__class__', '__contains__'...]
print(dir())            # ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
print(dir('hello'))        # ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',             '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__',             '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__ne...........
print('__iter__' in dir(iter))    # False

help:返回對象的幫助信息,主要用於查看函數或模塊用途的詳細說明。

help(abs)
help(str)

len:返回一個對象中元素的個數

print(len('abcd'))                     # 4 字符串
print(len(bytes('abcd','utf-8')))             # 4 字節數組
print(len((1,2,3,4)))                     # 4 元組
print(len([1,2,3,4]))                     # 4 列表
print(len(range(1,5)))                 # 4 range對象
print(len({'a':1,'b':2,'c':3,'d':4}))             # 4 字典
print(len({'a','b','c','d'}))                 # 4 集合
print(len(frozenset('abcd')))             #4 不可變集合

type:返回對象的類型,或者根據傳入的參數創建一個新的類型

type(1) # <class 'int'>

五、反射操作

hasattr(obj, attr): 用於檢查obj是否有一個名為attr的值的屬性,返回一個布爾值。

getattr(obj, attr): 返回obj中名為attr值的屬性的值

setattr(obj, attr, val): 給obj的attr屬性賦值為val。例如attr為'bar',則相當於obj.bar = val

delattr(obj, name)該函數刪除該obj的一個由string指定的屬性。delattr(x, 'foobar')=del x.foobar

class Test:
    f = '類的靜態變量'
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say_hi(self):
        print('hi,%s'%self.name)

obj=Test('Joe',12)

#檢測是否含有某屬性
print(hasattr(obj,'name'))          # True
print(hasattr(obj,'say_hi'))        # True
 #獲取屬性
n=getattr(obj,'name')
func=getattr(obj,'say_hi')
print(n,func)               # Joe <bound method Test.say_hi of <__main__.Test object at 0x0000000009F69128>> #設置屬性
setattr(obj,'self.hobby','paiting')
setattr(obj,'show_hobby',lambda self:self.name+' like paiting')
print(obj.__dict__)         # {'name': 'Joe', 'age': 12, 'self.hobby': 'paiting', 'show_hobby': <function <lambda> at 0x00000000029947B8>}
print(obj.show_hobby(obj))  # Joe like paiting

#刪除屬性
delattr(obj,'age')
delattr(obj,'show_hobby')
print(obj.__dict__)         # {'name': 'Joe', 'self.hobby': 'paiting'}

isinstance(a,b):判斷a是否是b類(或者b類的基類)實例化的對象

issubclass(a,b): 判斷a類是否是b類(或者b的基類)的派生類

class A:
    pass

class B(A):
    pass

class C(B):
    pass

obj = B()
print(isinstance(obj,B))    # True
print(isinstance(obj,A))    # True


print(issubclass(B,A))    # True
print(issubclass(C,A))    # True

callable:檢測對象是否可被調用。如果返回True,object仍然可能調用失敗;但如果返回False,調用對象ojbect絕對不會成功。callable其實就是判斷一個對象是否是函數,是就返回True,其他類型直接返回False

name = 'summer'
print(callable(name))      #False,不可調用
def func1():
    pass
print(callable(func1))     #True,可以調用
class A:  # 定義類B
    def __call__(self):
        print('instances are callable now.')

print(callable(A))          # 類A是可調用對象,True
a = A()                     # 實例
print(a)                    # <__main__.A object at 0x02A6C490>
a()                         # 調用實例a成功,instances are callable now.

 

六、裝飾器

property:標示屬性的裝飾器。property是一個裝飾器函數,可以將一個方法偽裝成屬性,調用的時候可以不用加()

例如:BMI指數

class Person(object):
    def __init__(self,name,weight,height):
        self.name = name
        self.__weight = weight
        self.__height = height

    @property
    def bmi(self):
        return self.__weight / self.__height **2

classmethod:標示方法為類方法的裝飾器。必須通過類的調用,而且此方法的意義:就是對類里面的變量或者方法進行修改添加

 

class Goods:
    __discount = 0.8                            # 折扣
    def __init__(self,name,origin_price):
        self.name = name
        self.__price = origin_price             # 原價

    @property
    def price(self):                            # 價格
        return self.__price * Goods.__discount

    @classmethod
    def change_discount(self,new_discount):     # 類方法 可以直接被類調用 不需要默認傳對象參數 只需要傳一個類參數就可以了
        Goods.__discount = new_discount

Goods.change_discount(1)    # 不依賴對象的方法 就應該定義成類方法 類方法可以任意的操作類中的靜態變量
apple = Goods('apple',5)
banana = Goods('banana',8)
print(apple.price)                              # 5
print(banana.price)                             # 8

 

 

 

staticmethod:標示方法為靜態方法的裝飾器。不依賴類以及對象。 

class Student:
def __init__(self,name):pass

    @staticmethod
    def login(a):  # login就是一個類中的靜態方法 靜態方法沒有默認參數 就當成普通的函數使用即可
        user = input('user :')
        if user == 'alex':
            print('success')

        else:
            print('faild')

Student.login(1) 

七、變量作用域相關

globals:返回一個字典,包含全部的全局變量

locals:返回一個字典,包含當前作用域的全部變量

vars:返回當前作用域內的局部變量和其值組成的字典,或者返回對象的屬性列表

class Test:
    f = '類的靜態變量'
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def variation(self):
        hobby = 'paiting'
        print(globals())
        print(locals())

obj = Test('Joe', 12)
obj.variation()
print(obj.__dict__)         # {'name': 'Joe', 'age': 12}
print(vars(obj))            # {'name': 'Joe', 'age': 12}

globals()的輸出:

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000001DEC208>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'F:/Python/test.py', '__cached__': None, 'Test': <class '__main__.Test'>, 'obj': <__main__.Test object at 0x0000000001F50A20>}

locals()的輸出:

{'hobby': 'paiting', 'self': <__main__.Test object at 0x0000000001F50A20>}

八、字符串類型代碼的執行

eval:執行字符串類型的代碼,並返回最終結果。相當於撥開字符串2邊的引號,執行里面的代碼

print(eval('3+4'))             # 7
ret = eval('{"name":"summer"}')
print(ret)                 #  {'name': 'summer'}

exec:執行字符串類型的代碼,不返回結果

print(exec('3+4'))         # None
ret1 = '''
li = [1,2,3]
for i in li:
    print(i)
'''
print(exec(ret1)) 

執行輸出:
1
2
3
None

val和exec 功能是類似的, 區別:

  eval有返回值,exec沒有沒有值

  exec適用於有流程控制的,比如for循環。eval只能做一些簡單的。

compile:將字符串類型的代碼編譯,代碼對象能夠通過exec語句執行或eval()求值。(了解即可)

code1 = 'for i in range(0,3): print (i)'
compile1 = compile(code1,'','exec')
exec (compile1) 

執行輸出:
0
1
2

repr:返回一個對象的string形式(原形畢露)。

#%r  原封不動的寫出來
name = 'Joe'
print('我叫%r' % name)        # 我叫'Joe'

print(repr('{"name":"Joe"}'))    # '{"name":"Joe"}'
print('{"name":"Joe"}')        # {"name":"Joe"}

 

九、輸入輸出相關

input:函數接收一個標准輸入數據,返回str類型

print(self,*args,sep=' ',end='\n',file=None, flush=False)

  sep:打印多個內容的分隔符,默認是空格

  end:默認是換行符

  file:默認是None,默認輸出到屏幕,設置文件句柄可輸出到文件

  flush: 立即把內容輸出到流文件,不作緩存

sep默認是用空格拼接
print(11, 22, 33)             # 11 22 33

sep 指定分隔符 |
print(11, 22, 33, sep = '|')         # 11|22|33

end結尾符
print(1,end=' ')
print(222)               # 1 222


print(333,end='')
print(666,)                #333666

print(333,end='**')
print(666,)             # 333**666

file寫入文件

with open('log.txt',encoding='utf-8',mode='w') as f1:
    print('5555',file=f1)             # 執行程序,查看log.txt文件內容為: 555

f = open('t1',encoding='utf-8',mode='w')
print(111,'222',file=f)                # 執行程序,查看t1文件內容為: 111 222

f = open('tmp_file','w')
print(123,456,sep=',',file = f,flush=True)

打印進度條

import time
for i in range(0,101,2):  
     time.sleep(0.1)
     char_num = i//2                      #打印多少個'*'
     per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
     print(per_str,end='', flush=True)

 

十、迭代器、生成器相關

iter:函數用來生成迭代器(將一個可迭代對象,生成迭代器)

from collections import Iterable
from collections import Iterator
l = [1,2,3]
print(isinstance(l,Iterable))  # 判斷是否可迭代 True
print(isinstance(l,Iterator))  # 判斷是否為迭代器 False
from collections import Iterable
from collections import Iterator
l = [1,2,3]

l1 = iter(l)             #生成迭代器
print(isinstance(l1,Iterable))      # True
print(isinstance(l1,Iterator))      # True
print(l1)                           # <list_iterator object at 0x031D3690>
print(next(l1))                     # 1
print(next(l1))                     # 2
print(next(l1))                     # 3
print(next(l1))                     # 報錯 StopIteration

next:內部實際使用了__next__方法,返回迭代器的下一個項目。

# 首先獲得Iterator對象:
it = iter([1, 2, 3, 4, 5])
while True:
    try:
        # 獲得下一個值:
        x = next(it) #next內部封裝了__next__方法,都是求下一個值
        print(x)

    except StopIteration:
        # 遇到StopIteration就退出循環
        break 

執行輸出:
1
2
3
4
5

十一、其他

文件操作相關

open()  :打開一個文件,返回一個文件操作符(文件句柄), 可以用encoding指定編碼。操作文件的模式有r,w,a,r+,w+,a+ 共6種,每一種方式都可以用二進制的形式操作(rb,wb,ab,rb+,wb+,ab+)

 

format:1、提供參數,指定對其方式,<是左對齊,>是右對齊,^是居中

    2、將整數轉化成二進制’b‘、’n‘、unicode ’c‘、八進制’o‘、十六進制’x’、’X‘等

    3、將浮點數用科學計數法或小數點計數法表示

print(format('test', '<20'))
print(format('test', '>20'))
print(format('test', '^20')) 

執行輸出:
test                
                test
        test         

super:根據傳入的參數創建一個新的子類和父類關系的代理對象

class A(object):
    def __init__(self):
        print('A.__init__')

class B(A):
    def __init__(self):
        print('B.__init__')
        super().__init__()

#super調用父類方法
b = B()

結果輸出:
B.__init__
A.__init__

__import__:動態導入模塊

index = __import__('index')
index.sayHello()

 

 

特例:reduce()

在 Python3 中,reduce() 函數已經被從全局名字空間里移除了,它現在被放置在 functools 模塊里,如果想要使用它,則需要通過引入 functools 模塊來調用 reduce() 函數:

from functools import reduce

 

 

語法

reduce(function, iterable[, initializer])
  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

 

reduce() 函數會對參數序列中元素進行累積

 

  reduce()函數有2個參數:第一個參數是有兩個變量的函數(f(x,y)),第二個是迭代對象 i (元組,列表或字符串)。reduce(f,i)將前兩個迭代元素(i[0], i[1])傳至函數f,計算f返回的值,然后將該值作為f的第一個參數,迭代器的第三個元素(i[2])作為第二個參數,以此類推。

 

 

實例

(1)數字加和

from functools import reduce

def add(x,y):
    return x + y

print (reduce(add, range(1, 101)))  # 5050

(2)統計某字符串重復次數:

from functools import reduce

sentences = ['The Deep Learning textbook is a resource intended to help students and practitioners enter the field of machine learning in general and deep learning in particular. '] 

word_count =reduce(lambda a,x:a+x.count("learning"),sentences,0)
print(word_count)   # 2

(3)字符串反序

import functools

str1="hello"
print(functools.reduce(lambda x,y:y+x,str1))
# 輸出 olleh

(4)找多個集合中共有元素

from functools import reduce

a = set((1, 2, 3, 4, 5))
b = set((2, 4, 6, 7, 1))
c = set((1, 4, 5, 9))

triple_set = [a, b, c]
common = reduce(set.intersection, triple_set)

print(common)

'''
{1, 4}
'''

 

  

 參考鏈接:

        https://www.cnblogs.com/sesshoumaru/p/6140987.html

        https://www.cnblogs.com/vamei/archive/2012/11/09/2762224.html

        https://www.cnblogs.com/pyyu/p/6702896.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM