內置函數與匿名函數

来源:http://www.cnblogs.com/Jeffding/archive/2017/09/04/7474545.html
-Advertisement-
Play Games

python提供的強大的內置函數,接下來我們看一看這些函數都有哪些作用。 abs()求絕對值。 print(abs(-1)) print(abs(0)) 運行結果 1 0 all()傳遞可迭代對象,可迭代對象每個值得bool值都為Ture返回Ture,有一個為False,結果返回False。 pri ...


  python提供的強大的內置函數,接下來我們看一看這些函數都有哪些作用。

  abs()求絕對值。

print(abs(-1))
print(abs(0))
運行結果
1
0
abs

  all()傳遞可迭代對象,可迭代對象每個值得bool值都為Ture返回Ture,有一個為False,結果返回False。

print(all(i for i in range(10)))#False
print(all(i for i in range(1,10)))#True
all()

  sum()將對象轉為可迭代對象求和。

res=sum(i for i in range(3))
print(res)#3
sum()

  any()傳遞可迭代對象,可迭代對象中有一個值的bool值為Ture返回Ture,所有值都為False,結果返回False。

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

  bin()將傳入值轉化為二進位。

print(bin(3))#0b11
bin()

  bool()返回bool值。

print(bool(0))#False
print(bool(None))#False
print(bool(''))#False
bool()

  bytes()把字元串轉為位元組模式。

print(bytes('hello',encoding='utf-8'))#b'hello'
bytes()

  callable()能否被調用,返回bool值。

def test():
    pass
print(callable(test))#True
print(callable(sum))#True
callable()

  chr()與ord()ASCII碼對應關係。

print(chr(67))#C
print(chr(65))#A
print(ord('A'))#65
chr()ord()

  classmethod,staticmethod,property面向對象三賤客。

  classmethod

class people:
    country = 'china'
    # 類方法,用classmethod來進行修飾
    @classmethod
    def getCountry(cls):  #類方法自動將類作為cls傳遞進函數內
        return cls.country
    @classmethod
    def setCountry(cls, country):
        cls.country = country
p = people()
print(p.getCountry())  # 可以用過實例對象引用
print(people.getCountry())  # 可以通過類對象引用
p.setCountry('japan')
print(p.getCountry())
運行結果:
china
china
japan
classmethod

  staticmethod

class people:
    country = 'china'
    @staticmethod
    # 靜態方法使用裝飾器方式綁定,並且作用和普通函數一樣並不會自動傳遞self
    def getCountry():
        return people.country
print(people.getCountry())
運行結果:
china
staticmethod

  property

class people:
    __name = 'jeff'
    __age = 12
    def set(self):
        print(self.__name)
        print(self.__age)
p = people()
#print(p.__name,p.__age)   #AttributeError: 'people' object has no attribute '__name'
p.set()
運行結果;
jeff
12
property

  complex()複數,定義複數

x=complex(1-2j)
print(x.real)#1.0
print(x.imag)#-2.0
x=1-2j
print(x.real)#1.0
print(x.imag)#-2.0
complex()

  數據類型

  int()整型,isinstance()判斷數據類型

num=1 #num=int(1)
print(type(num)) #查看num的類型<class 'int'>
print(isinstance(num,int)) #判斷num是否為int類型True
print(num is 1) #is 是身份運算,根據id去判斷身份Tr
int()isinstance()

  float()把數轉換成浮點類型。

  str()轉化為字元串。

  list()把任何iterable轉化為列表。

x=list(i for i in range(10))
print(x)#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list()

  tuple()轉化為元組。

  dict()

d={'a':1}
d=dict(x=1,y=2,z=3)
print(d)#{'z': 3, 'x': 1, 'y': 2}
dict()

  set()轉化為集合,是可迭代對象,可轉化為list。

  frozenset()不可變集合

s={1,2,3,4,4}
print(s)
s.add(5)
print(s)#set可以增但是不可變集合都不可以
f=frozenset({1,2,3,4})
print(type(f))
frozenset()

  dir()對象下麵有哪些可調用方法。

  divmod()返回元組,tuple(x//y,x%y),前端分頁功能。

print(divmod(100,33))#(3, 1)
divmod()

  enumerate()迭代器

for i in enumerate(['a','b','c','d']):
    print(i)
運行結果:
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
for i in enumerate({'x':1,'y':2}):
    print(i)
運行結果:
(0, 'y')
(1, 'x')
enumerate()

  format()格式化輸出

  globals()獲取全局變數的字典,locals()獲取執行本方法所在命名空間內的局部變數的字典.

def func():
    x = 1
    y = 2
    print(locals())  #列印局部作用域中的名字
    print(globals()) #列印全局作用域中的名字
globals()locals()

  hash()得到哈希值,用來校驗數據完整性,不可逆推。

s='hello'
print(hash(s))#-6379790348615061731
s='h'
print(hash(s))#5735203904575971755
hash()

  help()獲取幫助。

  hex()轉16進位

print(hex(10))#0xa
print(hex(11))#0xb
hex()

  id()查看唯一標識身份號,is就是判斷id是否相同。

print(id('asdf'))
a=1
b=2
print(id(a))
print(id(b))
print(a is b)
x='a'
y='a'
print(id(x))
print(id(y))
print(x is y)
id()

  input()輸入

  iter()把可迭代對象轉化為迭代器。

  len()統計長度

  max(),min()最大最小值

  zip()拉鏈函數?zip把傳入的兩個參數轉為可迭代對象,兩邊各next()放到一個元組。

l1=[1,2,3,4]
s='hel'
for i in zip(l1,s):
    print(i)
運行結果:
(1, 'h')
(2, 'e')
(3, 'l')
zip()

  sorted()把可迭代對象next一遍然後升序放到列表裡。

l=[3,4,1,0,9,10]
print(sorted(l)) #返回值是列表,預設是升序
print(sorted(l,reverse=True)) #降序排列
sorted()

  map()映射,右邊每一個數都根據左邊的規則映射出一個新的列表。

l=[1,2,3,7,5]
m=map(lambda item:item**2,l)
print(m)#<map object at 0x00000000027CDD68>
print(list(m))#print(list(m))
map()

  from functools import reduce #合併

from functools import reduce #合併
l=list(range(100))
print(l)
print(reduce(lambda x,y:x+y,l,100))#5050#reduce可以傳多個值
from functools import reduce

  filter過濾

name_l=[
    {'name':'egon','age':18},
    {'name':'dragonFire','age':1000},
    {'name':'gaoluchuan','age':9000},
    {'name':'fsw','age':10000},
]

f=filter(lambda d:d['age'] > 100,name_l)#左邊返回值ture過濾出來
print(list(f))#[{'name': 'dragonFire', 'age': 1000}, {'name': 'gaoluchuan', 'age': 9000}, {'name': 'fsw', 'age': 10000}]
filter

  oct()八進位

  open()取得文件句柄

  pow(x,y,z),x**y%z

  range()獲得可迭代對象

  rper()也是顯示,str更人性化

  reversed()反轉順序

  slice()切片,一般也不用這個

  vars() 返回局部名稱空間的名字,字典形式。

  __import__將字元串導入

__import__('time')
__import__

  compile()把字元串編譯成位元組碼在運行。

  exec()執行代碼或編譯後的字元串,無返回值 

  eval() 將字元串中表達式轉換為python表達式,有返回值

  round(x,[,n]) 四捨五入取x的值,n表示取小數點幾位

  最後簡單給這些函數進行分類。

  運算類:

函數名函數功能備註
abs(x) 求絕對值 1、參數可以是整型,也可以是複數2、若參數是複數,則返回覆數的模
complex([real[, imag]]) 創建一個複數  
divmod(a, b) 分別取商和餘數 註意:整型、浮點型都可以
float([x]) 將一個字元串或數轉換為浮點數。 如果無參數將返回0.0
int([x[, base]]) 將一個字元轉換為int類型 base表示進位
long([x[, base]]) 將一個字元轉換為long類型  
pow(x, y[, z]) 返回x的y次冪  
range([start], stop[, step]) 產生一個序列 預設從0開始
round(x[, n]) 四捨五入  
sum(iterable[, start]) 對集合求和  
oct(x) 將一個數字轉化為8進位  
hex(x) 將整數x轉換為16進位字元串  
chr(i) 返回整數i對應的ASCII字元  
bin(x) 將整數x轉換為二進位字元串  
bool([x]) 將x轉換為Boolean類型

  數據類型類:

函數名稱函數功能備註
basestring() str和unicode的超類 不能直接調用,可以用作isinstance判斷
format(value [, format_spec]) 格式化輸出字元串 格式化的參數順序從0開始,如“I am {0},I like {1}”
unichr(i) 返回給定int類型的unicode  
enumerate(sequence [, start = 0]) 返回一個可枚舉的對象 該對象的next()方法將返回一個tuple
iter(o[, sentinel]) 生成一個對象的迭代器,第二個參數表示分隔符  
max(iterable[, args…][key]) 返回集合中的最大值  
min(iterable[, args…][key]) 返回集合中的最小值  
dict([arg]) 創建數據字典  
list([iterable]) 將一個集合類轉換為另外一個集合類  
set() set對象實例化  
frozenset([iterable]) 產生一個不可變的set  
str([object]) 轉換為string類型  
sorted(iterable[, cmp[, key[, reverse]]]) 隊集合排序  
tuple([iterable]) 生成一個tuple類型  
xrange([start], stop[, step]) xrange()函數與range()類似,但xrnage()並不創建列表,而是返回一個xrange對象 它的行為與列表相似,但是只在需要時才計算列表值,當列表很大時,這個特性能為我們節省記憶體

  可迭代類型操作:

callable(object) 檢查對象object是否可調用 1、類是可以被調用的2、實例是不可以被調用的,除非類中聲明瞭call方法
classmethod() 註解,用來說明這個方式是個類方法 類方法即可被類調用,也可以被實例調用,類方法類似於Java中的static方法,類方法中不需要有self參數
compile(source, filename, mode[, flags[, dont_inherit]]) 將source編譯為代碼或者AST對象 代碼對象能夠通過exec語句來執行或者eval()進行求值。
dir([object]) 1、不帶參數時,返回當前範圍內的變數、方法和定義的類型列表;2、帶參數時,返回參數的屬性、方法列表。3、如果參數包含方法dir(),該方法將被調用。當參數為實例時。4、如果參數不包含dir(),該方法將最大限度地收集參數信息delattr(object, name) 刪除object對象名為name的屬性  
eval(expression [, globals [, locals]]) 計算表達式expression的值  
execfile(filename [, globals [, locals]]) 用法類似exec(),不同的是execfile的參數filename為文件名,而exec的參數為字元串。  
filter(function, iterable) 構造一個序列,等價於[ item for item in iterable if function(item)] 1、參數function:返回值為True或False的函數,可以為None2、參數iterable:序列或可迭代對象
getattr(object, name [, defalut]) 獲取一個類的屬性  
globals() 返回一個描述當前全局符號表的字典  
hasattr(object, name) 判斷對象object是否包含名為name的特性  
hash(object) 如果對象object為哈希表類型,返回對象object的哈希值  
id(object) 返回對象的唯一標識  
isinstance(object, classinfo) 判斷object是否是class的實例  
issubclass(class, classinfo) 判斷是否是子類  
len(s) 返回集合長度  
locals() 返回當前的變數列表  
map(function, iterable, …) 遍歷每個元素,執行function操作  
memoryview(obj) 返回一個記憶體鏡像類型的對象  
next(iterator[, default]) 類似於iterator.next()  
object() 基類  
property([fget[, fset[, fdel[, doc]]]]) 屬性訪問的包裝類,設置後可以通過c.x=value等來訪問setter和getter  
reduce(function, iterable[, initializer]) 合併操作,從第一個開始是前兩個參數,然後是前兩個的結果與第三個合併進行處理,以此類推  
reload(module) 重新載入模塊  
setattr(object, name, value) 設置屬性值  
repr(object) 將一個對象變換為可列印的格式  
slice()    
staticmethod 聲明靜態方法,是個註解  
super(type[, object-or-type]) 引用父類  
type(object) 返回該object的類型  
vars([object]) 返回對象的變數,若無參數與dict()方法類似  
bytearray([source [, encoding [, errors]]]) 返回一個byte數組 1、如果source為整數,則返回一個長度為source的初始化數組;2、如果source為字元串,則按照指定的encoding將字元串轉換為位元組序列;3、如果source為可迭代類型,則元素必須為[0 ,255]中的整數;4、如果source為與buffer介面一致的對象,則此對象也可以被用於初始化bytearray.
zip([iterable, …])  

  I/O操作:

函數名稱函數功能備註
file(filename [, mode [, bufsize]]) file類型的構造函數,作用為打開一個文件,如果文件不存在且mode為寫或追加時,文件將被創建。 添加‘b’到mode參數中,將對文件以二進位形式操作。添加‘+’到mode參數中,將允許對文件同時進行讀寫操作1、參數filename:文件名稱。2、參數mode:’r’(讀)、’w’(寫)、’a’(追加)。3、參數bufsize:如果為0表示不進行緩衝,如果為1表示進行行緩衝,如果是一個大於1的數表示緩衝區的大小 。
input([prompt]) 獲取用戶輸入 推薦使用raw_input,因為該函數將不會捕獲用戶的錯誤輸入
open(name[, mode[, buffering]]) 打開文件  
print 列印函數  
raw_input([prompt]) 設置輸入 輸入都是作為字元串處理

 

匿名函數

  比較幾位老師的工資,誰的工資最高。

salaries={
    'egon':3000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':250
}

  直接使用max()得到的是key的最大值,比較values得到的又是最多的錢,如何比較的是錢而得到的是這個錢對應的key呢。

def get_value(k):
    return salaries[k]
print(max(salaries,key=get_value))#alex

  max在這裡,把傳入值變成可迭代對象,每次取一個值傳入右邊的函數再比較,最後得出最大值輸出的到最大值的人。

  這裡我們定義的get_value函數很簡單,只有單一功能,完全沒有必要,我們可以使用簡單的lambda來一步完成。

lambda k:salaries[k]

  匿名函數的調用。

 

f=lambda k:salaries[k] #匿名函數也可以賦值一個名字,但是這便違反了匿名的初衷
print(f)#<function <lambda> at 0x0000000001D0CBF8>
print(f('egon'))#3000

  解決上面的問題也更簡便。

print(max(salaries,key=lambda k:salaries[k]))#alex
print(min(salaries,key=lambda k:salaries[k]))#yuanhao

  zip()函數

print(salaries.keys(),salaries.values())
z=zip(salaries.values(),salaries.keys())
print(z)
print(max(z))#取出最大的元組
for i in z:
    print(i)

  sorted()

print(sorted(salaries)) #預設是按照字典salaries的key去排序的
print(sorted(salaries,key=lambda x:salaries[x]))
print(sorted(salaries,key=lambda x:salaries[x],reverse=True))
運行結果:
['alex', 'egon', 'wupeiqi', 'yuanhao']
['yuanhao', 'egon', 'wupeiqi', 'alex']
['alex', 'wupeiqi', 'egon', 'yuanhao']

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C#中Cookies的讀取 鏈接: 一 、寫入Cookie 1. Name 和 Value 屬性由程式設定,預設值都是空引用。 2. Domain屬性的預設值為當前URL的功能變數名稱部分,不管發出這個cookie的頁面在哪個目錄下的。 例如, http://www.kent.com/application ...
  • Cookie客戶端緩存。 1、引言 隨著瀏覽器的處理能力不斷增強,越來越多的網站開始考慮將數據存儲在「客戶端」,那麼久不得不談本地存儲了。 本地存儲的好處: 一是避免取回數據前頁面一片空白,如果不需要最新數據也可以減少向伺服器的請求次數,從而減少用戶等待從服務端獲取數據的時間。 二是網路狀態不佳時仍 ...
  • 本文是要寫的下篇《C#反射及優化用法》的前奏,不能算是下一篇文章的基礎的基礎吧,有興趣的朋友可以關註一下。 隨著C#的發展,該語言內容不斷豐富,開發變得更加方便快捷,C# 的鋒利盡顯無疑。C# 語言從誕生起就是強類型語言,這一性質到今天不曾改變,我想以後也不會變。既然是強類型語言,那編寫任一程式均要 ...
  • 獲取電腦內部信息 - ComputerInfoHelper 一、代碼 ComputerInfoHelper.cs ManagementBaseObjectPropertyName.cs WmiPath.cs 二、測試 1.電腦硬碟信息 2.我的電腦中的硬碟信息 3.測試代碼 4.輸出結果: 所有硬 ...
  • 大家在開發中會經常看到也會經常使用lambda表達式。 園子里也有很多詳解lambda表達式的文章,多是從橫向來講述。 但lambda表達式到底如何變成現在這個樣子,表達式的形式到底代表什麼含義,這些可能就不太明白了。 本文將從來源開始,縱向剖析,一直演化出我們常用的lambda表達式。 引子 為方 ...
  • 基於.netstandard的許可權控制組件 Intro 由於項目需要,需要在 基於 Asp.net mvc 的 Web 項目框架中做許可權的控制,於是才有了這個許可權控制組件。 項目基於 .NETStandard,同時支持 asp.net mvc(.NET faremwork4.5以上) 和 asp.n ...
  • 以下是我根據自身的情況來總結的ASP.NET 知識體系 ASP.NET 知識體系 1.語言C#——C#-知識梳理 2.ASP.NET 3.WinForm 4.ASP.NET MVC 5.EF ...
  • 1 from bs4 import BeautifulSoup 2 import requests 3 import html.parser 4 from openpyxl import Workbook,load_workbook 5 import os 6 class DouBan(object... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...