hh.i = 10; -是指針指向其成員的運(yùn)算符 .是結(jié)構(gòu)體的成員運(yùn)算符。最大的區(qū)別是-前面放的是指針,而.前面跟的是結(jié)構(gòu)體變量。2、例如:
為臨西等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及臨西網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、臨西網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
使用timeit模塊,先介紹下:
timeit 模塊
timeit?模塊定義了接受兩個(gè)參數(shù)的?Timer?類。兩個(gè)參數(shù)都是字符串。 第一個(gè)參數(shù)是你要計(jì)時(shí)的語句或者函數(shù)。 傳遞給?Timer?的第二個(gè)參數(shù)是為第一個(gè)參數(shù)語句構(gòu)建環(huán)境的導(dǎo)入語句。 從內(nèi)部講,?timeit?構(gòu)建起一個(gè)獨(dú)立的虛擬環(huán)境, 手工地執(zhí)行建立語句,然后手工地編譯和執(zhí)行被計(jì)時(shí)語句。
一旦有了?Timer?對(duì)象,最簡單的事就是調(diào)用?timeit(),它接受一個(gè)參數(shù)為每個(gè)測試中調(diào)用被計(jì)時(shí)語句的次數(shù),默認(rèn)為一百萬次;返回所耗費(fèi)的秒數(shù)。
Timer?對(duì)象的另一個(gè)主要方法是?repeat(), 它接受兩個(gè)可選參數(shù)。 第一個(gè)參數(shù)是重復(fù)整個(gè)測試的次數(shù),第二個(gè)參數(shù)是每個(gè)測試中調(diào)用被計(jì)時(shí)語句的次數(shù)。 兩個(gè)參數(shù)都是可選的,它們的默認(rèn)值分別是?3?和?1000000。?repeat()?方法返回以秒記錄的每個(gè)測試循環(huán)的耗時(shí)列表。Python?有一個(gè)方便的?min?函數(shù)可以把輸入的列表返回成最小值,如: min(t.repeat(3, 1000000))
你可以在命令行使用?timeit?模塊來測試一個(gè)已存在的?Python?程序,而不需要修改代碼。
再給你個(gè)例子,你就知道怎么做了。
#?-*-?coding:?utf-8?-*-
#!/bin/env?python
def?test1():
n=0
for?i?in?range(101):
n+=i
return?n
def?test2():
return?sum(range(101))
def?test3():
return?sum(x?for?x?in?range(101))
if?__name__=='__main__':
from?timeit?import?Timer
t1=Timer("test1()","from?__main__?import?test1")
t2=Timer("test2()","from?__main__?import?test2")
t3=Timer("test3()","from?__main__?import?test3")
print?t1.timeit(1000000)
print?t2.timeit(1000000)
print?t3.timeit(1000000)
print?t1.repeat(3,1000000)
print?t2.repeat(3,1000000)
print?t3.repeat(3,1000000)
sum是python中一個(gè)很實(shí)用的函數(shù),但是要注意它的使用,我第一次用的時(shí)候,就把它這樣用了:
s
=
sum(1,2,3)
結(jié)果就悲劇啦
其實(shí)sum()的參數(shù)是一個(gè)list
例如:
sum([1,2,3])
sum(range(1,11))
還有一個(gè)比較有意思的用法
a
=
range(1,11)
b
=
range(1,10)
c
=
sum([item
for
item
in
a
if
item
in
b])
c
輸出:
45
8個(gè)超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。
這次來梳理下8個(gè)好用的python內(nèi)置函數(shù)
1、set()
當(dāng)需要對(duì)一個(gè)列表進(jìn)行去重操作的時(shí)候,set()函數(shù)就派上用場了。
用于創(chuàng)建一個(gè)集合,集合里的元素是無序且不重復(fù)的。集合對(duì)象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問如何用python寫一個(gè)四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會(huì)用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時(shí)候就需要用到sorted() ,它可以對(duì)任何可迭代對(duì)象進(jìn)行排序,并返回列表。對(duì)列表升序操作:
對(duì)元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:
根據(jù)自定義規(guī)則,對(duì)元組構(gòu)成的列表進(jìn)行排序:
4、reversed()如果需要對(duì)序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個(gè)序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時(shí)候,假如要對(duì)序列里的每個(gè)單詞進(jìn)行大寫轉(zhuǎn)化操作。這個(gè)時(shí)候就可以使用map()函數(shù)。
map()會(huì)根據(jù)提供的函數(shù),對(duì)指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會(huì)把序列里的每一個(gè)元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個(gè)例子,對(duì)列表里的每個(gè)數(shù)字作平方處理:
6、reduce()前面說到對(duì)列表里的每個(gè)數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個(gè)元素相乘,該怎么做呢?這時(shí)候用到reduce()函數(shù)。
reduce()會(huì)對(duì)參數(shù)序列中元素進(jìn)行累積。第一、第二個(gè)元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個(gè)元素進(jìn)行函數(shù)操作,以此類推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個(gè)例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因?yàn)樗匾恕?/p>
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個(gè)迭代器對(duì)象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個(gè)元素映射到函數(shù),最終返回結(jié)果。我們?cè)僭囋?,如何從許多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個(gè)場景,同時(shí)打印出序列里每一個(gè)元素和它對(duì)應(yīng)的順序號(hào),我們用enumerate()函數(shù)做做看。
enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對(duì)序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個(gè)例子說明,對(duì)字符串進(jìn)行標(biāo)注,返回每個(gè)字母和其索引。