裝飾器及內建函式
聽名字應該知道這是一個裝飾的東西,我們今天就來講解一下裝飾器,有的鐵子們應該聽說,有的沒有聽說過.沒有關係我告訴你們這是一個很神奇的東西
這個有多神奇呢? 我們先來複習一下閉包
def func1(): name = "alex" def func2(): print(name) # 閉包 func2() func1()
這就是閉包,那剛剛說的很神奇的東西呢?,為什麼又說閉包了呢? 機智的鐵子們已經猜到,裝飾器和閉包是有點關係的,是滴沒錯.
那什麼是裝飾器呢?裝飾器是幹什麼的呢?
裝飾器的本質其實就是閉包
現在你在公司,領導讓你寫一個函式,來測試另一個函式的執行效率,你怎麼做?
我先告訴大家一個檢視時間的東西
time.time() 獲取都是一個字串我們可以通過這個來計算執行時間
def func():
print(
'嘻嘻更健康'
)
import time
start_time = time.time()
time.sleep(0.1)
func()
end_time = time.time()
print(
'----> 執行效率%s'
%(end_time - start_time))
上面你已經寫完了,但是你應該放在函式中,這樣減少重複程式碼,可讀性好,ok繼續做。
def func():
print(
'嘻嘻更健康'
)
def timmer(f):
start_time = time.time()
time.sleep(0.1)
f()
end_time = time.time()
print(
'----> 執行效率%s'
%(end_time - start_time))
好你又寫完了,但是執行之前的函式只是func(),而你寫玩了這個之後,還得加一步timmer(func),如果要是領導讓你測試500個函式的執行效率呢?好,你又進一步改,如下
func()
f1 = func # func
func = timmer # timmer
func(f1)
將他的執行結果改了一下,這樣看似func(f1)與原來的呼叫差不多,但是加了好幾步,而且添加了f1引數
現在你請教了我,我說來,寫個裝飾器就能解決。
def timmer(f):
def inner():
start_time = time.time()
time.sleep(0.1)
f()
end_time = time.time()
print(
'----> 執行效率%s'
% (end_time - start_time))
return
inner
func = timmer(func) # inner
func() # inner()
這樣,就寫好了,這是最簡單的裝飾器,裝飾任何函式,只需要加一句func = timmer(func)
#簡單的裝飾器
def func():
print(
'嘻嘻更健康'
)
def timmer(f):
def inner():
start_time = time.time()
time.sleep(0.1)
f()
end_time = time.time()
print(
'----> 執行效率%s'
% (end_time - start_time))
return
inner
func = timmer(func) # inner
func() # inner()
但是Python認為你這個還是不簡單,所以Python給你提供了一個更見的方式就是語法糖。
#語法糖 @
def timmer(f):
def inner():
start_time = time.time()
time.sleep(0.1)
f()
end_time = time.time()
print(
'----> 執行效率%s'
% (end_time - start_time))
return
inner
@timmer # func = timmer(func)
語法糖的用意
@裝飾器函式 == 重新定義被裝飾函式=裝飾器函式(被裝飾函式)
def func():
print(
'嘻嘻更健康'
)
func() # inner()
內建函式
什麼是內建函式?就是python幫我們提供的一個工具,拿過直接用就行,比如我們的print,input,type,id等等.截止到python3.6.2版本
中一共提供了68個內建函式.他們就是python直接提供給我們的,有一些我們已經用過了.有一些還沒有用過.還有一我們需要學完面向物件才能繼續學習.今天我們認識一下python的內建函式
作用域相關
locals() 返回當前作用域中的名字
globals() 返回全域性作用域中的名字
迭代器相關
range() 生成資料
next() 迭代器向下執行一次,內部實際使用了next()方法返回迭代器的下一個專案
iter() 獲取迭代器,內部實際使用的是iter()方法來獲取迭代器
字串型別程式碼的執行
eval() 執行字串型別的程式碼,並返回最終結果
print(eval(
'2+8'
))
結果:
10
n = 8
print(eval(
'n + 10'
))
結果:
18
exec() 執行字串型別的程式碼
exec(
''
'
for
i
in
range(10):
print(i)
''
')
# 我們按照python能夠識別的語法寫程式碼,這次寫入的是字串也可以執行
exec(
''
'
def func():
print(
"444"
)
func()
''
')
結果:
444
通過上邊的測試發現,只要是exec就沒有返回值,eval就是有返回值的
輸入和輸出相關
input() 獲取使用者輸入的內容
print() 列印 輸出
print裡的sep
print(
'alex'
,
'wusir'
,
'baoyuan'
)
print(
'alex'
,
'wusir'
,
'baoyuan'
,sep=
'|'
)
# 結果:
# alex wusir baoyuan
# alex|wusir|baoyuan
print預設sep是一個空格,咱們打印出來的是以空格分開的,我們修改了sep打印出來的就是以管道符分開的
print裡的end
print(
'alex'
)
print(
'alex'
)
print(
'alex'
)
# 結果:
# alex
# alex
# alex
print(
'alex'
,end=
''
)
print(
'alex'
,end=
''
)
print(
'alex'
,end=
''
)
# 結果:
# alexalexalex
print 預設end是一個\n,打印出來的效果是有換行功能,咱們改成空字串,打印出來的效果就是一行顯示
記憶體相關
hash() 獲取物件的雜湊值(int.str,bool,tuple)
print(hash((1,2,4)))
print(hash(
'你好'
))
print(hash(111))
print(hash(False))
id() 獲取到物件的記憶體地址
name =
'alex'
print(id(name))
結果:2376700908072
檔案操作相關
open() 用於開啟一個檔案,建立一個檔案控制代碼
模組相關
import() 匯入,引入
import time
print(time.time())
幫助
help() 函式用於檢視函式或模組用途的詳細說明
help(input)
結果:
Help
on
built-
in
function input
in
module builtins:
input(prompt=None, /)
Read a
string
from
standard input. The trailing newline
is
stripped.
The prompt
string
,
if
given,
is
printed to standard output without a
trailing newline before reading input.
If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
On *nix systems, readline
is
used
if
available.
呼叫相關
callable() 用於檢查一個物件是否是可呼叫的,如果返回True,object有可能呼叫失敗,要是返回False,那呼叫絕對就完犢子
def func():
pass
name =
'meet'
print(callable(func)) 結果 True
print(callable(name)) 結果 Fasle
檢視記憶體屬性
dir() 檢視物件的內建屬性,方法,訪問的是物件的dir()方法
print(dir(input))
# 結果:
# ['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
數字相關:
bool() 將給定的資料轉換成bool值,如果不給值.返回False
print(
bool
())
結果:
False
int() 將給定的資料轉換成int值,如果不給值,返回0
print(
int
())
結果:
0
float() 將給定的資料轉換成float值,也就上次小數
print(
float
())
結果:
0.0
compilex() 建立一個複數,第一個引數為實部,第二個引數為虛部.或者第一個引數直接用字串來描述複數
print(complex(120))
結果:
120+0j
進位制轉換:
bin() 將給的引數轉換成二進位制
otc() 將給的引數轉換成八進位制
hex() 將給的引數轉換成十六進位制
數字運算:
abs() 求絕對值
print(abs(-100))
結果:
100
divmod() 返回商和餘數
print(divmod(20,6))
結果:
(3, 2)
第一個引數是商,第二引數是餘數
round() 四捨五入
print(round(3.56))
結果:
4
print(round(3.56,1))
結果:
3.6
後邊的引數是指定小數點後邊的數字進行四捨五入,咱們指定的數字要小於咱們小時候點後邊的位數
pow(a,b) 求a的b次冪,如果有個三次引數,則求萬次冪後對第三方個數取餘
print(pow(2,4))
結果:
16
print(pow(2,4,3))
結果:
1
三個引數 前來個引數是求2的3次冪,第三個引數是這個總和去除3然後獲取的是餘數
sum() 求和
print(sum([1,2,3,4,5]))
結果:
15 引數必須是可迭代物件
min() 求最小值
print(min([1,2,3,4,5]))
結果:
1 引數必須是可迭代物件
max() 求最大值
print(max([1,2,3,4,5]))
結果:
5 引數必須是可迭代物件
資料結構相關
列表和元祖
list() 將一個可迭代物件轉換成列表
tuple() 將一個可迭代物件轉換成元祖
reversed() 將一個序列反轉,返回反轉序列的迭代器
print(list(reversed(
'你好啊'
)))
結果:
[
'啊'
,
'好'
,
'你'
]
字串相關:
str() 將資料轉化成字串
format() 與具體數相關,用於計算各種小數,精算等
字串
# 字串
# print(format('meet','<20')) #左對齊
# print(format('meet','>20')) #右對齊
# print(format('meet','^20')) #居中
結果:
meet
meet
meet
數值 自己練習
#數值
print(format(3,
'b'
)) # 二進位制
print(format(97,
'c'
)) # 轉換成unicodezif
print(format(11,
'd'
)) #十進位制
print(format(56)) #和d一樣
print(format(11,
'n'
)) #十進位制
print(format(11,
'o'
)) #八進位制
print(format(11,
'x'
)) # 十六進位制(小寫字母)
print(format(11,
'X'
)) # 十六進位制(大寫字母)
# 浮點數
print(format(1234567890,
'e'
)) #科學計演算法,預設使用6位
print(format(123456789,
'0.2e'
))# 科學計算,保留2位小數(小寫)
print(format(123456789,
'0.2E'
))# 科學計算,保留2位小數(大寫)
print(format(1.23456789,
'f'
)) #小數點計數法,保留6位小數
print(format(1.23456789,
'0.2f'
)) # 小數點計數法,保留2位數
print(format(1.23456789,
'0.10f'
)) # 小數點計數法,保留2位數
print(format(1.23456789e+1000,
'F'
)) # 小數點計數法
bytes() 把字串轉換成bytes型別
s =
'你好武大'
bs = s.encode(
'utf-8'
)
print(bs)
結果:b
'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\xad\xa6\xe5\xa4\xa7'
s1 = bs.decode(
'utf-8'
)
print(s1)
結果: 你好武大
bs = bytes(s,encoding=
'utf-8'
)
print(bs)
結果: b
'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\xad\xa6\xe5\xa4\xa7'
把字串編碼成utf-8
bytearray() 返回一個新位元組陣列,每個元素的值的範圍是0~256對應的是ascii碼錶
ret = bytearray(
'meet'
,encoding=
'utf-8'
)
print(ret)
print(ret[0])
結果:
bytearray(b
'meet'
)
109
memoryview() 檢視bytes的記憶體地址
s = memoryview(
'麻花藤'
.encode(
'utf-8'
))
print(s)
# 結果:
# <memory at 0x000001F332E0E288>
ord() 輸入字元找帶字元編碼的位置
print(ord(
'a'
))
print(ord(
'中'
))
print(ord(
'國'
))
結果:
97
20013
22269
對應的是當前編碼
chr() 輸入位置數字找出對應的字元
print(chr(97)) # 找到對應位置的字元
print(chr(20013)) # 找到對應位置的字元
# 結果:
a
中
ascii() 是ascii碼中的返回值 不是就返回\u
print(ascii(
'a'
)) 判斷字串在不在ascii碼錶中
print(ascii(
'中'
))
結果:
'a'
'\u4e2d'
如果不存在就返回\u...
repr() 返回一個物件本質的形式
name =
'alex'
print(repr(name)) #返回這個物件本質的表示形式
結果:
'alex'
name =
'我叫%r'
print(name%
'meet'
) %r 用的就是repr
結果:
我叫
'meet'
資料集合
dict() 建立一個字典
d = dict(k=
'v'
,key1=
'v2'
)
print(d)
結果:
{
'k'
:
'v'
,
'key1'
:
'v2'
}
set() 建立一個集合
s =
set
([1,2,4,5,6])
print(s)
結果:
{1, 2, 4, 5, 6}
其他相關
len() 返回一個物件的元素個數
enumerate() 獲取列舉物件
lst = [
'alex'
,
'wusir'
,
'taibai'
]
for
i,k
in
enumerate(lst):
print(
'這是序號'
,i)
print(
'這是元素'
,k)
all() 可迭代物件中全部是True,結果才是True
lst = [1,2,3,4,True,0,False]
lst1 = [1,2,3,4,True]
print(all(lst))
print(all(lst1))
結果:
False
True
any() 可迭代物件中有一個是True,就是True
lst = [1,2,3,4,True,0,False]
lst1 = [1,2,3,4,True]
print(any(lst))
print(any(lst1))
結果:
False
True
zip() 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成一個個元祖,
然後返回由這些元祖組成的內容,如果各個迭代器的元素個數不一致,則按照長度最短的返回
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,
相關推薦
裝飾器及內建函式
裝飾器
聽名字應該知道這是一個裝飾的東西,我們今天就來講解一下裝飾器,有的鐵子們應該聽說,有的沒有聽說過.沒有關係我告訴你們這是一個很神奇的東西
這個有多神奇呢? 我們先來複習一下閉包
def func1():
name = "alex"
def func2():
函式進階四(裝飾器、內建函式)
一. 昨日內容回顧生成器,本質就是迭代器,自己用Python程式碼構建的迭代器1.生成器函式(yield)2.生成器表示式(i for i in range(21))生成器物件:gentor next(gentor) send(gentor) for 迴圈yield 與 return 的區別send: 給上一
python 學習彙總52:迭代器常用內建函式map,filter,zip,reduce(入門學習- tcy)
迭代器常用內建函式 2018/9/15
1.內建函式
map(function, iterA, iterB, ...) ->iterator #建立迭代器等同於itertools.starmap();
filter(function,iterable) ->i
匿名函式及內建函式
1 匿名函式python 使用 lambda 來建立匿名函式語法:lambda [arg1 [,arg2,.....argn]]:expressionlambda 只是一個表示式,函式體比 def 簡單很多。 lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lam
JavaScript 的定時器及內建物件
定時器
(1)setInterval();迴圈定時器:固定時間間隔指定一次,像鬧鐘 一樣,不關閉繼續執行。
(2)setTimeout();炸彈定時器:只執行一次,不能執行下一次了。
1. SetInterval() 語法結構: setInterval(code,millisec,lan
python(四)上:列表生成式、生成器、迭代器和內建函式
目錄
列表生成式
生成器
迭代器
內建函式
一、列表生成式
列表生成式即List Comprehensions,是Python內建的非常簡單卻強大的可以用來建立list的生成式。
舉個例子,要生成list [1, 2, 3, 4, 5, 6,
內建函式和裝飾器
內建函式補充
callable() #檢測一個東西能否被呼叫
def f1():
pass
f2 =123
print(callable(f1))
print(callable(f2))
# chr() 數字
20181130(裝飾器補充,疊加多個裝飾器,有參裝飾器,三元表示式,生成式,匿名函式,內建函式)
一、裝飾器的補充
1、函式屬性的傳遞
Python裝飾器(decorator)在實現的時候,被裝飾後的函式其實已經是另外一個函數了(函式名等函式屬性會發生改變),為了不影響,Python的functools包中提供了一個叫wraps的decorator來消除這樣的副作用。寫一個decora
day 12 內建函式,裝飾器,遞迴函式
內建函式
內建函式:python給咱們提供了一些他認為你會經常用到的函式,68種
內建函式
abs()
dict()
help()
m
裝飾器/內建函式
裝飾器:
def wrapper(f):
def inner(*a
python3_內建函式__全部內建函式及使用_all/repr/bytearray/exec/compile/filter/map/format/property
1.內建函式列表如下:
內
置
函
數
abs()
dict()
help()
min()
setattr()
GLSL(著色器語言)中的內建函式
x*y: 如果x和y都是向量,那麼該運算子進行的是逐分量的相乘計算;如果是矩陣相乘,那麼該運算子會返回一個線性相乘(線性代數中正常的矩陣乘法)的矩陣,而不是一個逐分量的相乘結果(如果想得到的是逐分量的相乘結果,那就需要使用matrixCompMult函式)。
dot(x,y
大資料入門教程系列之Hive內建函式及自定義函式
本篇文章主要介紹Hive內建函式以及自定義UDF函式和UDFT函式,自定義UDF函式通過一個國際轉換中文的例子說明。
操作步驟:
①、準備資料和環境
②、演示Hive內建函式
③、自定義UDF函式編寫、演示
詳細步驟:
一、準備資料和
python學習(十七)——補充內建函式、使用迭代器協議實現斐波那契數列、描述符、pycharm的問題
一、補充內建函式
#--------------------------isinstance/isinbclass--------------
class Foo:
pass
class Bar(Foo):
pass
b1=Bar()
print(isinstance(b1,
[Python3] 內建函式修飾器@property
為什麼要使用@property
需求如下:
我們希望對一個成員屬性的訪問加以限制,按照常規思路是寫一個或多個訪問函式來實現訪問修改等操作
如果我們仍然想通過屬性(變數)名來訪問屬性可不可以呢
答案是可以的,這裡Python提供了了一種很神奇的方案,名為@p
Numpy 內建函式及基本統計功能
a=np.arange(6)
np.cos(a)
np.exp(a)
np.sqrt(a)
基本統計功能
a=np.random.randint(1,5,6)
a.sum()
a.mean()平均值
a.std()方差
a.min()最小值
a.max()
python內建函式及匿名函式
locals 本地作用域/區域性作用域 會隨著位置的改變而改變globals 全域性作用域 永遠不變 永遠是全域性
a = 1
b = 2
print(locals())
Python內建函式總結及詳解
………………吧啦吧啦………………
2個多月來,將3.5版本中的68個內建函式,按順序逐個進行了自認為詳細的解析。為了方便記憶,將這些內建函式進行了如下分類:
數學運算(7個)
型別轉換(24個)
序列操作(8個)
物件操作(7個)
反射操作(8個)
變數操
Hive 內建函式及自定義函式
1.內建函式
使用如下命令檢視當前hive版本支援的所有內建函式
show functions;
部分截圖:
可以使用如下命令檢視某個函式的使用方法及作用,比如檢視 upper函式
desc function upper;
如果想要檢
python編碼獲取排列組合的全部情況數及Python內建函式獲取排列組合
def permutations(iterable, r=None):
# permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
# permutations(range(3))