創(chuàng)建一個大小為K的數(shù)據(jù)容器,利用最大堆找到最大。
公司主營業(yè)務:成都網(wǎng)站設計、成都網(wǎng)站建設、外貿(mào)網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出濱海免費做網(wǎng)站回饋大家。
創(chuàng)建一個大小為K的數(shù)據(jù)容器來存儲最小的K個數(shù),然后遍歷整個數(shù)組,將每個數(shù)字和容器中的最大數(shù)進行比較,如果這個數(shù)大于容器中的最大值,則繼續(xù)遍歷,否則用這個數(shù)字替換掉容器中的最大值。
安全哈希加密技術,是當今世界最先近的加密算法。主要用于文件身份識別、數(shù)字簽名和口令加密等。對于長度小于64位的消息A,SHA1會產(chǎn)生一個160位的消息摘要B。通過散列算法可實現(xiàn)數(shù)字簽名實現(xiàn),數(shù)字簽名的原理是將要傳送的明文通過一種函數(shù)運算轉換成報文摘要,報文摘要加密后與明文一起傳送給接受方,接受方將接受的明文產(chǎn)生新的報文摘要與發(fā)送方的發(fā)來報文摘要解密比較,如果不一致表示明文已被篡改。
打開IDLE python GUI,點擊開始-所有程序-python2.7-IDLE python GUI,或者直接進入dos環(huán)境,或者其他的IDLE。
請點擊輸入圖片描述
首先,創(chuàng)建一個簡單的自定義函數(shù),定義為K函數(shù)。
請點擊輸入圖片描述
假如x==Kill,那么,就可以代入剛才所創(chuàng)建的K函數(shù),最后返回一個語句,x為任意字符,空白字符也可以。
請點擊輸入圖片描述
要注意的是,用def創(chuàng)建函數(shù)的時候,k(x)括號里面是不用雙引號的,而調用自定義函數(shù)的時候,在括號了就要加上雙引號。
上面的定義函數(shù)比較簡單,只用了一個print輸出語句,現(xiàn)在,定義一個累加的函數(shù),就要用到while函數(shù)和if函數(shù)了。
請點擊輸入圖片描述
A函數(shù)是用來計算累加的,其中用到了一個while循環(huán)和if判斷,x為自定義變量,假如現(xiàn)在X為100,也就是說此函數(shù)計算1+2+3+...+100的和。
請點擊輸入圖片描述
1、cmd007 作為自定義命令名稱
2、cmd007 hello --name=Lily 作為自定義功能1的名稱hello打招呼,輸出:Hi, Lily
3、cmd007 eat --food=fish 作為自定義功能2的名稱food吃東西,輸出:I like to eat fish
(一)目錄結構如下:
cmd007 # 文件夾必須和自定義命令同名
│ __init__.py
│ __main__.py
(二)實現(xiàn)自定義命令和功能1
在__main__.py中
View Code
來到cmd007的上級目錄下,調出命令行客戶端,執(zhí)行命名:
python cmd007
python cmd007 -V
python cmd007 hello --name=Lily --count=3
python cmd007 hello -n Lilei -c 2
分別輸出:
提示:如果將這個python包cmd007打包發(fā)布,然后安裝到python中去,那么每行命令就不用輸入python關鍵字了。
(三)實現(xiàn)自定義命令、功能1、功能2
在__main__.py中增加代碼
# 自定義功能2:eat
@cli.command(name="eat")
@click.option('-f', '--food', help="please input your like food")
@click.option('-a', '--and-you', help="ask echo other", default=False)
def hello_command(food, and_you):
print("I like to eat {0}".format(food))
if and_you in ['t', 'T', 'true', 'True', True, 1, "1"]:
print("And what is your favorite food ?")
完整版:
View Code
執(zhí)行
python cmd007 eat -f fish --and-you=1
輸出
延伸:
@click.option()中的參數(shù)詳解:
每個參數(shù)解釋如下:
name or flags - 選項字符串的名字或者列表,例如 foo 或者 -f, --foo。
action - 命令行遇到參數(shù)時的動作,默認值是 store。
store_const,表示賦值為const;
append,將遇到的值存儲成列表,也就是如果參數(shù)重復則會保存多個值;
append_const,將參數(shù)規(guī)范中定義的一個值保存到一個列表;
count,存儲遇到的次數(shù);此外,也可以繼承 argparse.Action 自定義參數(shù)解析;
nargs - 應該讀取的命令行參數(shù)個數(shù),可以是具體的數(shù)字,或者是?號,當不指定值時對于 Positional argument 使用 default,對于 Optional argument 使用 const;或者是 * 號,表示 0 或多個參數(shù);或者是 + 號表示 1 或多個參數(shù)。
const - action 和 nargs 所需要的常量值。
default - 不指定參數(shù)時的默認值。
type - 命令行參數(shù)應該被轉換成的類型。
choices - 參數(shù)可允許的值的一個容器。
required - 可選參數(shù)是否可以省略 (僅針對可選參數(shù))。
help - 參數(shù)的幫助信息,當指定為 argparse.SUPPRESS 時表示不顯示該參數(shù)的幫助信息.
metavar - 在 usage 說明中的參數(shù)名稱,對于必選參數(shù)默認就是參數(shù)名稱,對于可選參數(shù)默認是全大寫的參數(shù)名稱.
dest - 解析后的參數(shù)名稱,默認情況下,對于可選參數(shù)選取最長的名稱,中劃線轉換為下劃線.
關于編程,有三種方式
1、面向對象編程----類 關鍵字:class
2、面向過程編程----過程 關鍵字:def
3、函數(shù)式編程------函數(shù) 關鍵字:def
函數(shù)式編程:函數(shù)是邏輯化結構化和過程化的一種編程方式,如
def test(x):
"xxxxx"
x+=1
return x
def:定義函數(shù)的關鍵字
test:函數(shù)名稱
(x):傳入函數(shù)的參數(shù)
x+=1:泛指邏輯處理塊代碼
"xxxx"函數(shù)描述(非必要,但強列建議添加)
定義一個過程,過程無返回值
def fun1():
"fun1"
print('fun1')
定義一個函數(shù),函數(shù)有返回值
def fun2():
"fun2"
print('fun2')
return 0
函數(shù)和過程的調用是一致的:
fun1
fun2
在python中,過程就是一個沒有返回值的函數(shù),過程默認返因一個none,當函數(shù)有多個返回值時,將返回元組,這些值將被當做一個元組的元素,即:
返回值個數(shù)0:返回NONE
返回值個數(shù)1:返回object
返回值個數(shù)多個:返回元組
函數(shù)的功能:沒有函數(shù)的編程只是在寫邏輯(功能),脫離函數(shù),重用邏輯(實現(xiàn)功能),唯一的方式就是復制粘貼,使用函數(shù)后簡化代碼,可讀性變高,易擴展(保持一致性)
在定義函數(shù)時的參數(shù),我們稱為行參,如下面的x,y
而調用函數(shù)時傳入的參數(shù),我們稱之為實參,如下面的1、2。
def test(x,y)
print(x)
print(y)
test(1,2)
位置調用時行參與實參的位置關系是一一對應的
def test(x,y)
print(x)
print(y)
test(1,2)
關鍵字調用時,與實參的位置無關如
def test(x,y)
print(x)
print(y)
test(y=2,x=3)
當位置調用與關鍵字調用混用時,按照位置調用方式執(zhí)行,但要記位一句話,關鍵字參數(shù)不能寫在位置參數(shù)前面,即test(3,y=2,6)此種方式將會報錯,應寫成test(3,2,z=6)或test(3,z=2,y=6)
當函數(shù)中有默認的參數(shù)值時如
def test(x,y=1)
.....
return 0
當調用這個函數(shù)時,如果不傳入y的值時,y的值將采用默認值,如果傳入新的y的值時,默認y的值將被覆蓋。
默認值使用的場合:
1、軟件安裝的時候
2、連接數(shù)據(jù)庫的端口
等
參數(shù)組:當行參或實參數(shù)量不固定的時候時使用,可與默認參數(shù)或行參混用,參數(shù)組一定要最至最后
def test(*args)#接收N個位置參數(shù) #def test(name,*args) #def test(name,age=1,*args)
print(args)
test(1,2,3,4,5……)
test(*[1,2,3,4……])
最終實參會被變成一個元組如:
def fun(agr1,agr2,*args)
pass
fun(1,2,3,4,5)
====結果=====
1,2,(3,4,5)
這種方式是預留以后當需要傳多個參數(shù)時使用而不變動太多的代碼
傳入不定數(shù)量字典時:把N個關鍵字參數(shù)轉換成字典的方式,可與默認參數(shù)或行參混用,參數(shù)組一定要最至最后
def test(agrs1,agrs2,**kwargs) #接收N個關鍵字參數(shù)
# print(kwagrs)
# print(kwagrs['name'])
# print(kwagrs['age'])
pass
test(3,5,name='a',age=23,sex='F')#以關鍵字的方式傳值
=====結果====
3,5,{'name':'a','age':23,'sex':'f'}
test(**{name:'a',age:8,sex:'F'})
###位置參數(shù)不能寫在關鍵字參數(shù)后面,否則程序會報錯
函數(shù)調用函數(shù)
def test1()
print......
def test2()
print...
test1() #調用test1
print(test2()) #調用