真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python函數(shù)追蹤 python中的查找函數(shù)

python 基礎(chǔ)教程

運(yùn)算

創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷,提供成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)站開(kāi)發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷、小程序設(shè)計(jì)、公眾號(hào)商城、等建站開(kāi)發(fā),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。

a = 21

b = 10

c = 0

c = a + b

print "1 - c 的值為:", c

c = a - b

print "2 - c 的值為:", c

c = a * b

print "3 - c 的值為:", c

c = a / b

print "4 - c 的值為:", c

c = a % b

print "5 - c 的值為:", c

a = 2

b = 3

c = a**b

print "6 - c 的值為:", c

a = 10

b = 5

c = a//b

print "7 - c 的值為:", c

python比較

a = 21

b = 10

c = 0

if ( a == b ):

print "1 - a 等于 b"

else:

print "1 - a 不等于 b"

if ( a != b ):

print "2 - a 不等于 b"

else:

print "2 - a 等于 b"

if ( a b ):

print "3 - a 不等于 b"

else:

print "3 - a 等于 b"

if ( a b ):

print "4 - a 小于 b"

else:

print "4 - a 大于等于 b"

if ( a b ):

print "5 - a 大于 b"

else:

print "5 - a 小于等于 b"

a = 5

b = 20

if ( a = b ):

print "6 - a 小于等于 b"

else:

print "6 - a 大于 b"

if ( b = a ):

print "7 - b 大于等于 a"

else:

print "7 - b 小于 a"

賦值

a = 21

b = 10

c = 0

c = a + b

print "1 - c 的值為:", c

c += a

print "2 - c 的值為:", c

c *= a

print "3 - c 的值為:", c

c /= a

print "4 - c 的值為:", c

c = 2

c %= a

print "5 - c 的值為:", c

c **= a

print "6 - c 的值為:", c

c //= a

print "7 - c 的值為:", c

邏輯運(yùn)算符:

a = 10

b = 20

if ( a and b ):

print "1 - 變量 a 和 b 都為 true"

else:

print "1 - 變量 a 和 b 有一個(gè)不為 true"

if ( a or b ):

print "2 - 變量 a 和 b 都為 true,或其中一個(gè)變量為 true"

else:

print "2 - 變量 a 和 b 都不為 true"

a = 0

if ( a and b ):

print "3 - 變量 a 和 b 都為 true"

else:

print "3 - 變量 a 和 b 有一個(gè)不為 true"

if ( a or b ):

print "4 - 變量 a 和 b 都為 true,或其中一個(gè)變量為 true"

else:

print "4 - 變量 a 和 b 都不為 true"

if not( a and b ):

print "5 - 變量 a 和 b 都為 false,或其中一個(gè)變量為 false"

else:

print "5 - 變量 a 和 b 都為 true"

in,not in

a = 10

b = 20

list = [1, 2, 3, 4, 5 ];

if ( a in list ):

print "1 - 變量 a 在給定的列表中 list 中"

else:

print "1 - 變量 a 不在給定的列表中 list 中"

if ( b not in list ):

print "2 - 變量 b 不在給定的列表中 list 中"

else:

print "2 - 變量 b 在給定的列表中 list 中"

a = 2

if ( a in list ):

print "3 - 變量 a 在給定的列表中 list 中"

else:

print "3 - 變量 a 不在給定的列表中 list 中"

條件

flag = False

name = 'luren'

if name == 'python': # 判斷變量否為'python'

flag = True # 條件成立時(shí)設(shè)置標(biāo)志為真

print 'welcome boss' # 并輸出歡迎信息

else:

print name

num = 5

if num == 3: # 判斷num的值

print 'boss'

elif num == 2:

print 'user'

elif num == 1:

print 'worker'

elif num 0: # 值小于零時(shí)輸出

print 'error'

else:

print 'roadman' # 條件均不成立時(shí)輸出

循環(huán)語(yǔ)句:

count = 0

while (count 9):

print 'The count is:', count

count = count + 1

print "Good bye!"

i = 1

while i 10:

i += 1

if i%2 0: # 非雙數(shù)時(shí)跳過(guò)輸出

continue

print i # 輸出雙數(shù)2、4、6、8、10

i = 1

while 1: # 循環(huán)條件為1必定成立

print i # 輸出1~10

i += 1

if i 10: # 當(dāng)i大于10時(shí)跳出循環(huán)

break

for letter in 'Python': # 第一個(gè)實(shí)例

print '當(dāng)前字母 :', letter

fruits = ['banana', 'apple', 'mango']

for fruit in fruits: # 第二個(gè)實(shí)例

print '當(dāng)前水果 :', fruit

print "Good bye!"

獲取用戶輸入:raw_input

var = 1

while var == 1 : # 該條件永遠(yuǎn)為true,循環(huán)將無(wú)限執(zhí)行下去

num = raw_input("Enter a number :")

print "You entered: ", num

print "Good bye!"

range,len

fruits = ['banana', 'apple', 'mango']

for index in range(len(fruits)):

print '當(dāng)前水果 :', fruits[index]

print "Good bye!"

python數(shù)學(xué)函數(shù):

abs,cell,cmp,exp,fabs,floor,log,log10,max,min,mod,pow,round,sqrt

randrange

訪問(wèn)字符串的值

var1 = 'Hello World!'

var2 = "Python Runoob"

print "var1[0]: ", var1[0]

print "var2[1:5]: ", var2[1:5]

轉(zhuǎn)義字符

格式化輸出

print "My name is %s and weight is %d kg!" % ('Zara', 21)

字符串函數(shù):

添加元素

list = [] ## 空列表

list.append('Google') ## 使用 append() 添加元素

list.append('Runoob')

print list

刪除元素

list1 = ['physics', 'chemistry', 1997, 2000]

print list1

del list1[2]

print "After deleting value at index 2 : "

print list1

列表操作

列表方法

刪除字典

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

del dict['Name']; # 刪除鍵是'Name'的條目

dict.clear(); # 清空詞典所有條目

del dict ; # 刪除詞典

print "dict['Age']: ", dict['Age'];

print "dict['School']: ", dict['School'];

字典的函數(shù):

當(dāng)前時(shí)間戳:

import time

time.time()

格式化日期輸出

import time

print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())

a = "Sat Mar 28 22:24:24 2016"

print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))

獲取某個(gè)月日歷:calendar

import calendar

cal = calendar.month(2016, 1)

print "以下輸出2016年1月份的日歷:"

print cal

當(dāng)前日期和時(shí)間

import datetime

i = datetime.datetime.now()

print ("當(dāng)前的日期和時(shí)間是 %s" % i)

print ("ISO格式的日期和時(shí)間是 %s" % i.isoformat() )

print ("當(dāng)前的年份是 %s" %i.year)

print ("當(dāng)前的月份是 %s" %i.month)

print ("當(dāng)前的日期是 %s" %i.day)

print ("dd/mm/yyyy 格式是 %s/%s/%s" % (i.day, i.month, i.year) )

print ("當(dāng)前小時(shí)是 %s" %i.hour)

print ("當(dāng)前分鐘是 %s" %i.minute)

print ("當(dāng)前秒是 %s" %i.second)

不定長(zhǎng)參數(shù):*

lambda:匿名函數(shù)

def....

python模塊搜索路徑

獲取用戶輸入

str = raw_input("請(qǐng)輸入:")

print "你輸入的內(nèi)容是: ", str

input可以接收表達(dá)式

open參數(shù)

write要自己添加換行符

讀取10個(gè)字符

重命名:os.rename

os.remove

os.mkdir os.chdir

os.getcwd

os.rmdir

open參數(shù)

file的方法

異常:

try:

fh = open("testfile", "w")

fh.write("這是一個(gè)測(cè)試文件,用于測(cè)試異常!!")

except IOError:

print "Error: 沒(méi)有找到文件或讀取文件失敗"

else:

print "內(nèi)容寫(xiě)入文件成功"

fh.close()

try:

fh = open("testfile", "w")

fh.write("這是一個(gè)測(cè)試文件,用于測(cè)試異常!!")

finally:

print "Error: 沒(méi)有找到文件或讀取文件失敗"

用戶自定義異常:

os 模塊提供了非常豐富的方法用來(lái)處理文件和目錄。常用的方法如下表所示:

| 序號(hào) | 方法及描述 |

| 1 |

os.access(path, mode)

檢驗(yàn)權(quán)限模式 |

| 2 |

os.chdir(path)

改變當(dāng)前工作目錄 |

| 3 |

os.chflags(path, flags)

設(shè)置路徑的標(biāo)記為數(shù)字標(biāo)記。 |

| 4 |

os.chmod(path, mode)

更改權(quán)限 |

| 5 |

os.chown(path, uid, gid)

更改文件所有者 |

| 6 |

os.chroot(path)

改變當(dāng)前進(jìn)程的根目錄 |

| 7 |

os.close(fd)

關(guān)閉文件描述符 fd |

| 8 |

os.closerange(fd_low, fd_high)

關(guān)閉所有文件描述符,從 fd_low (包含) 到 fd_high (不包含), 錯(cuò)誤會(huì)忽略 |

| 9 |

os.dup(fd)

復(fù)制文件描述符 fd |

| 10 |

os.dup2(fd, fd2)

將一個(gè)文件描述符 fd 復(fù)制到另一個(gè) fd2 |

| 11 |

os.fchdir(fd)

通過(guò)文件描述符改變當(dāng)前工作目錄 |

| 12 |

os.fchmod(fd, mode)

改變一個(gè)文件的訪問(wèn)權(quán)限,該文件由參數(shù)fd指定,參數(shù)mode是Unix下的文件訪問(wèn)權(quán)限。 |

| 13 |

os.fchown(fd, uid, gid)

修改一個(gè)文件的所有權(quán),這個(gè)函數(shù)修改一個(gè)文件的用戶ID和用戶組ID,該文件由文件描述符fd指定。 |

| 14 |

os.fdatasync(fd)

強(qiáng)制將文件寫(xiě)入磁盤(pán),該文件由文件描述符fd指定,但是不強(qiáng)制更新文件的狀態(tài)信息。 |

| 15 |

os.fdopen(fd[, mode[, bufsize]])

通過(guò)文件描述符 fd 創(chuàng)建一個(gè)文件對(duì)象,并返回這個(gè)文件對(duì)象 |

| 16 |

os.fpathconf(fd, name)

返回一個(gè)打開(kāi)的文件的系統(tǒng)配置信息。name為檢索的系統(tǒng)配置的值,它也許是一個(gè)定義系統(tǒng)值的字符串,這些名字在很多標(biāo)準(zhǔn)中指定(POSIX.1, Unix 95, Unix 98, 和其它)。 |

| 17 |

os.fstat(fd)

返回文件描述符fd的狀態(tài),像stat()。 |

| 18 |

os.fstatvfs(fd)

返回包含文件描述符fd的文件的文件系統(tǒng)的信息,像 statvfs() |

| 19 |

os.fsync(fd)

強(qiáng)制將文件描述符為fd的文件寫(xiě)入硬盤(pán)。 |

| 20 |

os.ftruncate(fd, length)

裁剪文件描述符fd對(duì)應(yīng)的文件, 所以它最大不能超過(guò)文件大小。 |

| 21 |

os.getcwd()

返回當(dāng)前工作目錄 |

| 22 |

os.getcwdu()

返回一個(gè)當(dāng)前工作目錄的Unicode對(duì)象 |

| 23 |

os.isatty(fd)

如果文件描述符fd是打開(kāi)的,同時(shí)與tty(-like)設(shè)備相連,則返回true, 否則False。 |

| 24 |

os.lchflags(path, flags)

設(shè)置路徑的標(biāo)記為數(shù)字標(biāo)記,類似 chflags(),但是沒(méi)有軟鏈接 |

| 25 |

os.lchmod(path, mode)

修改連接文件權(quán)限 |

| 26 |

os.lchown(path, uid, gid)

更改文件所有者,類似 chown,但是不追蹤鏈接。 |

| 27 |

os.link(src, dst)

創(chuàng)建硬鏈接,名為參數(shù) dst,指向參數(shù) src |

| 28 |

os.listdir(path)

返回path指定的文件夾包含的文件或文件夾的名字的列表。 |

| 29 |

os.lseek(fd, pos, how)

設(shè)置文件描述符 fd當(dāng)前位置為pos, how方式修改: SEEK_SET 或者 0 設(shè)置從文件開(kāi)始的計(jì)算的pos; SEEK_CUR或者 1 則從當(dāng)前位置計(jì)算; os.SEEK_END或者2則從文件尾部開(kāi)始. 在unix,Windows中有效 |

| 30 |

os.lstat(path)

像stat(),但是沒(méi)有軟鏈接 |

| 31 |

os.major(device)

從原始的設(shè)備號(hào)中提取設(shè)備major號(hào)碼 (使用stat中的st_dev或者st_rdev field)。 |

| 32 |

os.makedev(major, minor)

以major和minor設(shè)備號(hào)組成一個(gè)原始設(shè)備號(hào) |

| 33 |

os.makedirs(path[, mode])

遞歸文件夾創(chuàng)建函數(shù)。像mkdir(), 但創(chuàng)建的所有intermediate-level文件夾需要包含子文件夾。 |

| 34 |

os.minor(device)

從原始的設(shè)備號(hào)中提取設(shè)備minor號(hào)碼 (使用stat中的st_dev或者st_rdev field )。 |

| 35 |

os.mkdir(path[, mode])

以數(shù)字mode的mode創(chuàng)建一個(gè)名為path的文件夾.默認(rèn)的 mode 是 0777 (八進(jìn)制)。 |

| 36 |

os.mkfifo(path[, mode])

創(chuàng)建命名管道,mode 為數(shù)字,默認(rèn)為 0666 (八進(jìn)制) |

| 37 |

os.mknod(filename[, mode=0600, device])

創(chuàng)建一個(gè)名為filename文件系統(tǒng)節(jié)點(diǎn)(文件,設(shè)備特別文件或者命名pipe)。

|

| 38 |

os.open(file, flags[, mode])

打開(kāi)一個(gè)文件,并且設(shè)置需要的打開(kāi)選項(xiàng),mode參數(shù)是可選的 |

| 39 |

os.openpty()

打開(kāi)一個(gè)新的偽終端對(duì)。返回 pty 和 tty的文件描述符。 |

| 40 |

os.pathconf(path, name)

返回相關(guān)文件的系統(tǒng)配置信息。 |

| 41 |

os.pipe()

創(chuàng)建一個(gè)管道. 返回一對(duì)文件描述符(r, w) 分別為讀和寫(xiě) |

| 42 |

os.popen(command[, mode[, bufsize]])

從一個(gè) command 打開(kāi)一個(gè)管道 |

| 43 |

os.read(fd, n)

從文件描述符 fd 中讀取最多 n 個(gè)字節(jié),返回包含讀取字節(jié)的字符串,文件描述符 fd對(duì)應(yīng)文件已達(dá)到結(jié)尾, 返回一個(gè)空字符串。 |

| 44 |

os.readlink(path)

返回軟鏈接所指向的文件 |

| 45 |

os.remove(path)

刪除路徑為path的文件。如果path 是一個(gè)文件夾,將拋出OSError; 查看下面的rmdir()刪除一個(gè) directory。 |

| 46 |

os.removedirs(path)

遞歸刪除目錄。 |

| 47 |

os.rename(src, dst)

重命名文件或目錄,從 src 到 dst |

| 48 |

os.renames(old, new)

遞歸地對(duì)目錄進(jìn)行更名,也可以對(duì)文件進(jìn)行更名。 |

| 49 |

os.rmdir(path)

刪除path指定的空目錄,如果目錄非空,則拋出一個(gè)OSError異常。 |

| 50 |

os.stat(path)

獲取path指定的路徑的信息,功能等同于C API中的stat()系統(tǒng)調(diào)用。 |

| 51 |

os.stat_float_times([newvalue])

決定stat_result是否以float對(duì)象顯示時(shí)間戳

|

| 52 |

os.statvfs(path)

獲取指定路徑的文件系統(tǒng)統(tǒng)計(jì)信息 |

| 53 |

os.symlink(src, dst)

創(chuàng)建一個(gè)軟鏈接 |

| 54 |

os.tcgetpgrp(fd)

返回與終端fd(一個(gè)由os.open()返回的打開(kāi)的文件描述符)關(guān)聯(lián)的進(jìn)程組 |

| 55 |

os.tcsetpgrp(fd, pg)

設(shè)置與終端fd(一個(gè)由os.open()返回的打開(kāi)的文件描述符)關(guān)聯(lián)的進(jìn)程組為pg。 |

| 56 |

os.tempnam([dir[, prefix]])

返回唯一的路徑名用于創(chuàng)建臨時(shí)文件。 |

| 57 |

os.tmpfile()

返回一個(gè)打開(kāi)的模式為(w+b)的文件對(duì)象 .這文件對(duì)象沒(méi)有文件夾入口,沒(méi)有文件描述符,將會(huì)自動(dòng)刪除。 |

| 58 |

os.tmpnam()

為創(chuàng)建一個(gè)臨時(shí)文件返回一個(gè)唯一的路徑 |

| 59 |

os.ttyname(fd)

返回一個(gè)字符串,它表示與文件描述符fd 關(guān)聯(lián)的終端設(shè)備。如果fd 沒(méi)有與終端設(shè)備關(guān)聯(lián),則引發(fā)一個(gè)異常。 |

| 60 |

os.unlink(path)

刪除文件路徑 |

| 61 |

os.utime(path, times)

返回指定的path文件的訪問(wèn)和修改的時(shí)間。 |

| 62 |

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

輸出在文件夾中的文件名通過(guò)在樹(shù)中游走,向上或者向下。 |

| 63 |

os.write(fd, str)

寫(xiě)入字符串到文件描述符 fd中. 返回實(shí)際寫(xiě)入的字符串長(zhǎng)度 |

Python 幾個(gè)重要的內(nèi)置函數(shù)

在學(xué)習(xí)Python的過(guò)程中,有幾個(gè)比較重要的內(nèi)置函數(shù):help()函數(shù)、dir()函數(shù)、input()與raw_input()函數(shù)、print()函數(shù)、type()函數(shù)。

第一、help()函數(shù)

Help()函數(shù)的參數(shù)分為兩種:如果傳一個(gè)字符串做參數(shù)的話,它會(huì)自動(dòng)搜索以這個(gè)字符串命名的模塊、方法等;如果傳入的是一個(gè)對(duì)象,就會(huì)顯示這個(gè)對(duì)象的類型的幫助。比如輸入help(‘print’),它就會(huì)尋找以‘print’為名的模塊、類等,找不到就會(huì)看到提示信息;而print在Python里是一個(gè)保留字,和pass、return同等,而非對(duì)象,所以help(print)也會(huì)報(bào)錯(cuò)。

第二、dir()函數(shù)

dir()函數(shù)返回任意對(duì)象的屬性和方法列表,包含模塊對(duì)象、函數(shù)對(duì)象、字符串對(duì)象、列表對(duì)象、字典對(duì)象等。盡管查找和導(dǎo)入模塊相對(duì)容易,但是記住每個(gè)模塊包含什么卻不是這么簡(jiǎn)單,您并不希望總是必須查看源代碼來(lái)找出答案。Python提供了一種方法,可以使用內(nèi)置的dir()函數(shù)來(lái)檢查模塊的內(nèi)容,當(dāng)你為dir()提供一個(gè)模塊名的時(shí)候,它返回模塊定義的屬性列表。dir()函數(shù)適用于所有對(duì)象的類型,包含字符串、整數(shù)、列表、元組、字典、函數(shù)、定制類、類實(shí)例和類方法。

第三、input與raw_input函數(shù)

都是用于讀取用戶輸入的,不同的是input()函數(shù)期望用戶輸入的是一個(gè)有效的表達(dá)式,而raw_input()函數(shù)是將用戶的輸入包裝成一個(gè)字符串。

第四、Print()函數(shù)

Print在Python3版本之間是作為Python語(yǔ)句使用的,在Python3里print是作為函數(shù)使用的。

第五、type()函數(shù)

Type()函數(shù)返回任意對(duì)象的數(shù)據(jù)類型。在types模塊中列出了可能的數(shù)據(jù)類型,這對(duì)于處理多種數(shù)據(jù)類型的函數(shù)非常有用,它通過(guò)返回類型對(duì)象來(lái)做到這一點(diǎn),可以將這個(gè)類型對(duì)象與types模塊中定義類型相比較。

目標(biāo)跟蹤(5)使用 Opencv 和 Python 進(jìn)行對(duì)象跟蹤

在本教程中,我們將學(xué)習(xí)如何基于 Opencv 和 Python 實(shí)現(xiàn)對(duì)象跟蹤。

首先必須明確目標(biāo)檢測(cè)和目標(biāo)跟蹤有什么區(qū)別:

我們將首先討論對(duì)象檢測(cè),然后討論如何將對(duì)象跟蹤應(yīng)用于檢測(cè)。

可能有不同的應(yīng)用,例如,計(jì)算某個(gè)區(qū)域有多少人,檢查傳送帶上有多少物體通過(guò),或者計(jì)算高速公路上的車輛。

當(dāng)然,看過(guò)本教程后,您會(huì)很容易地想到數(shù)以千計(jì)的想法應(yīng)用于現(xiàn)實(shí)生活或可能應(yīng)用于工業(yè)。

在本教程中,我們將使用 3 個(gè)文件:

首先我們需要調(diào)用highway.mp4文件并創(chuàng)建一個(gè)mask:

正如您在示例代碼中看到的,我們還使用了 createBackgroundSubtractorMOG2 函數(shù),該函數(shù)返回背景比率(background ratio),然后創(chuàng)建mask。

mask可視化結(jié)果:

但是,如您所見(jiàn),圖像中有很多噪點(diǎn)。因此,讓我們通過(guò)刪除所有較小的元素來(lái)改進(jìn)提取,并將我們的注意力集中在大于某個(gè)面積的對(duì)象上。

使用 OpenCV 的cv2.drawContours函數(shù)繪制輪廓,我們得到了這個(gè)結(jié)果。

就本教程而言,分析整個(gè)窗口并不重要。我們只對(duì)計(jì)算在某個(gè)點(diǎn)通過(guò)的所有車輛感興趣,因此,我們必須定義一個(gè)感興趣的區(qū)域 ROI 并僅在該區(qū)域應(yīng)用mask。

結(jié)果可視化如下:

函數(shù) cv2.createBackgroundSubtractorMOG2 是在開(kāi)始時(shí)添加的,沒(méi)有定義參數(shù),現(xiàn)在讓我們看看如何進(jìn)一步改進(jìn)我們的結(jié)果。history是第一個(gè)參數(shù),在這種情況下,它設(shè)置為 100,因?yàn)橄鄼C(jī)是固定的。varThreshold改為 40,因?yàn)樵撝翟降?,誤報(bào)的可能性就越大。在這種情況下,我們只對(duì)較大的對(duì)象感興趣。

在繼續(xù)處理矩形之前,我們對(duì)圖像進(jìn)行了進(jìn)一步的清理。為此,閾值函數(shù)就派上用場(chǎng)了。從我們的mask開(kāi)始,我們告訴它我們只想顯示白色或黑色值,因此通過(guò)編寫(xiě)254, 255,只會(huì)考慮 254 和 255 之間的值。

然后我們將找到的對(duì)象的坐標(biāo)插入到 if 條件中并繪制矩形

這是最終結(jié)果:

我們現(xiàn)在只需導(dǎo)入和集成跟蹤功能。

一旦創(chuàng)建了對(duì)象,我們必須獲取邊界框的每個(gè)位置并將它們插入到單個(gè)數(shù)組中。

通過(guò)在屏幕上顯示結(jié)果,您可以看到所有通過(guò) ROI 的通道是如何被識(shí)別的,以及它們的位置是如何插入到特定的數(shù)組中的。顯然,識(shí)別的摩托車越多,我們的數(shù)組就越大。

現(xiàn)在讓我們將帶有位置的數(shù)組傳遞給tracker.update()。我們將再次獲得一個(gè)包含位置的數(shù)組,但此外,將為每個(gè)對(duì)象分配一個(gè)唯一的 ID。

從代碼中可以看出,我們可以使用 for 循環(huán)分析所有內(nèi)容。此時(shí)我們只需要繪制矩形并顯示車輛 ID。

在圖像中,您可以看到結(jié)果

main.py

從視頻中也可以看到,我們已經(jīng)獲得了我們?cè)诒窘坛涕_(kāi)始時(shí)設(shè)置的結(jié)果。

但是,您必須將其視為練習(xí)或起點(diǎn),因?yàn)殛P(guān)于這個(gè)主題有很多話要說(shuō),而本教程的目的只是讓您了解對(duì)象跟蹤的原理。

如果你想將 Object Tracking 集成到你的項(xiàng)目中,你應(yīng)該使用更可靠和先進(jìn)的對(duì)象檢測(cè)方法,以及跟蹤方法。

完整代碼地址:私信“333”直接獲取或者「鏈接」

Python的函數(shù)都有哪些?

Python 函數(shù)

函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。

函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。

定義一個(gè)函數(shù)

你可以定義一個(gè)由自己想要功能的函數(shù),以下是簡(jiǎn)單的規(guī)則:

函數(shù)代碼塊以?def?關(guān)鍵詞開(kāi)頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()。

任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間。圓括號(hào)之間可以用于定義參數(shù)。

函數(shù)的第一行語(yǔ)句可以選擇性地使用文檔字符串—用于存放函數(shù)說(shuō)明。

函數(shù)內(nèi)容以冒號(hào)起始,并且縮進(jìn)。

return [表達(dá)式]?結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回 None。

語(yǔ)法

def functionname( parameters ): ? "函數(shù)_文檔字符串"

function_suite

return [expression]

默認(rèn)情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的順序匹配起來(lái)的。

實(shí)例

以下為一個(gè)簡(jiǎn)單的Python函數(shù),它將一個(gè)字符串作為傳入?yún)?shù),再打印到標(biāo)準(zhǔn)顯示設(shè)備上。

實(shí)例(Python 2.0+)

def printme( str ): ? "打印傳入的字符串到標(biāo)準(zhǔn)顯示設(shè)備上"

print str

return

函數(shù)調(diào)用

定義一個(gè)函數(shù)只給了函數(shù)一個(gè)名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結(jié)構(gòu)。

這個(gè)函數(shù)的基本結(jié)構(gòu)完成以后,你可以通過(guò)另一個(gè)函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。

如下實(shí)例調(diào)用了printme()函數(shù):

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 定義函數(shù)def printme( str ): ? "打印任何傳入的字符串"

print str

return

# 調(diào)用函數(shù)printme("我要調(diào)用用戶自定義函數(shù)!")printme("再次調(diào)用同一函數(shù)")

以上實(shí)例輸出結(jié)果:

我要調(diào)用用戶自定義函數(shù)!再次調(diào)用同一函數(shù)

參數(shù)傳遞

在 python 中,類型屬于對(duì)象,變量是沒(méi)有類型的:

a=[1,2,3]

a="Runoob"

以上代碼中,[1,2,3]?是 List 類型,"Runoob"?是 String 類型,而變量 a 是沒(méi)有類型,她僅僅是一個(gè)對(duì)象的引用(一個(gè)指針),可以是 List 類型對(duì)象,也可以指向 String 類型對(duì)象。

可更改(mutable)與不可更改(immutable)對(duì)象

在 python 中,strings, tuples, 和 numbers 是不可更改的對(duì)象,而 list,dict 等則是可以修改的對(duì)象。

不可變類型:變量賦值?a=5?后再賦值?a=10,這里實(shí)際是新生成一個(gè) int 值對(duì)象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當(dāng)于新生成了a。

可變類型:變量賦值?la=[1,2,3,4]?后再賦值?la[2]=5?則是將 list la 的第三個(gè)元素值更改,本身la沒(méi)有動(dòng),只是其內(nèi)部的一部分值被修改了。

python 函數(shù)的參數(shù)傳遞:

不可變類型:類似 c++ 的值傳遞,如 整數(shù)、字符串、元組。如fun(a),傳遞的只是a的值,沒(méi)有影響a對(duì)象本身。比如在 fun(a)內(nèi)部修改 a 的值,只是修改另一個(gè)復(fù)制的對(duì)象,不會(huì)影響 a 本身。

可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過(guò)去,修改后fun外部的la也會(huì)受影響

python 中一切都是對(duì)象,嚴(yán)格意義我們不能說(shuō)值傳遞還是引用傳遞,我們應(yīng)該說(shuō)傳不可變對(duì)象和傳可變對(duì)象。

python 傳不可變對(duì)象實(shí)例

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

def ChangeInt( a ): ? ?a = 10

b = 2ChangeInt(b)print b # 結(jié)果是 2

實(shí)例中有 int 對(duì)象 2,指向它的變量是 b,在傳遞給 ChangeInt 函數(shù)時(shí),按傳值的方式復(fù)制了變量 b,a 和 b 都指向了同一個(gè) Int 對(duì)象,在 a=10 時(shí),則新生成一個(gè) int 值對(duì)象 10,并讓 a 指向它。

傳可變對(duì)象實(shí)例

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫(xiě)函數(shù)說(shuō)明def changeme( mylist ): ? "修改傳入的列表"

mylist.append([1,2,3,4])

print "函數(shù)內(nèi)取值: ", mylist

return

# 調(diào)用changeme函數(shù)mylist = [10,20,30]changeme( mylist )print "函數(shù)外取值: ", mylist

實(shí)例中傳入函數(shù)的和在末尾添加新內(nèi)容的對(duì)象用的是同一個(gè)引用,故輸出結(jié)果如下:

函數(shù)內(nèi)取值: ?[10, 20, 30, [1, 2, 3, 4]]函數(shù)外取值: ?[10, 20, 30, [1, 2, 3, 4]]

參數(shù)

以下是調(diào)用函數(shù)時(shí)可使用的正式參數(shù)類型:

必備參數(shù)

關(guān)鍵字參數(shù)

默認(rèn)參數(shù)

不定長(zhǎng)參數(shù)

必備參數(shù)

必備參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時(shí)的數(shù)量必須和聲明時(shí)的一樣。

調(diào)用printme()函數(shù),你必須傳入一個(gè)參數(shù),不然會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫(xiě)函數(shù)說(shuō)明def printme( str ): ? "打印任何傳入的字符串"

print str

return

#調(diào)用printme函數(shù)printme()

以上實(shí)例輸出結(jié)果:

Traceback (most recent call last):

File "test.py", line 11, in module

printme()TypeError: printme() takes exactly 1 argument (0 given)

關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來(lái)確定傳入的參數(shù)值。

使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時(shí)參數(shù)的順序與聲明時(shí)不一致,因?yàn)?Python 解釋器能夠用參數(shù)名匹配參數(shù)值。

以下實(shí)例在函數(shù) printme() 調(diào)用時(shí)使用參數(shù)名:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫(xiě)函數(shù)說(shuō)明def printme( str ): ? "打印任何傳入的字符串"

print str

return

#調(diào)用printme函數(shù)printme( str = "My string")

以上實(shí)例輸出結(jié)果:

My string

下例能將關(guān)鍵字參數(shù)順序不重要展示得更清楚:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫(xiě)函數(shù)說(shuō)明def printinfo( name, age ): ? "打印任何傳入的字符串"

print "Name: ", name

print "Age ", age

return

#調(diào)用printinfo函數(shù)printinfo( age=50, name="miki" )

以上實(shí)例輸出結(jié)果:

Name: ?mikiAge ?50

默認(rèn)參數(shù)

調(diào)用函數(shù)時(shí),默認(rèn)參數(shù)的值如果沒(méi)有傳入,則被認(rèn)為是默認(rèn)值。下例會(huì)打印默認(rèn)的age,如果age沒(méi)有被傳入:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫(xiě)函數(shù)說(shuō)明def printinfo( name, age = 35 ): ? "打印任何傳入的字符串"

print "Name: ", name

print "Age ", age

return

#調(diào)用printinfo函數(shù)printinfo( age=50, name="miki" )printinfo( name="miki" )

以上實(shí)例輸出結(jié)果:

Name: ?mikiAge ?50Name: ?mikiAge ?35

不定長(zhǎng)參數(shù)

你可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù)。這些參數(shù)叫做不定長(zhǎng)參數(shù),和上述2種參數(shù)不同,聲明時(shí)不會(huì)命名?;菊Z(yǔ)法如下:

def functionname([formal_args,] *var_args_tuple ): ? "函數(shù)_文檔字符串"

function_suite

return [expression]

加了星號(hào)(*)的變量名會(huì)存放所有未命名的變量參數(shù)。不定長(zhǎng)參數(shù)實(shí)例如下:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫(xiě)函數(shù)說(shuō)明def printinfo( arg1, *vartuple ): ? "打印任何傳入的參數(shù)"

print "輸出: "

print arg1

for var in vartuple: ? ? ?print var

return

# 調(diào)用printinfo 函數(shù)printinfo( 10 )printinfo( 70, 60, 50 )

以上實(shí)例輸出結(jié)果:

輸出:10輸出:706050

匿名函數(shù)

python 使用 lambda 來(lái)創(chuàng)建匿名函數(shù)。

lambda只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。

lambda的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。

lambda函數(shù)擁有自己的命名空間,且不能訪問(wèn)自有參數(shù)列表之外或全局命名空間里的參數(shù)。

雖然lambda函數(shù)看起來(lái)只能寫(xiě)一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率。

語(yǔ)法

lambda函數(shù)的語(yǔ)法只包含一個(gè)語(yǔ)句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

如下實(shí)例:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫(xiě)函數(shù)說(shuō)明sum = lambda arg1, arg2: arg1 + arg2

# 調(diào)用sum函數(shù)print "相加后的值為 : ", sum( 10, 20 )print "相加后的值為 : ", sum( 20, 20 )

以上實(shí)例輸出結(jié)果:

相加后的值為 : ?30相加后的值為 : ?40

return 語(yǔ)句

return語(yǔ)句[表達(dá)式]退出函數(shù),選擇性地向調(diào)用方返回一個(gè)表達(dá)式。不帶參數(shù)值的return語(yǔ)句返回None。之前的例子都沒(méi)有示范如何返回?cái)?shù)值,下例便告訴你怎么做:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫(xiě)函數(shù)說(shuō)明def sum( arg1, arg2 ): ? # 返回2個(gè)參數(shù)的和."

total = arg1 + arg2

print "函數(shù)內(nèi) : ", total

return total

# 調(diào)用sum函數(shù)total = sum( 10, 20 )

以上實(shí)例輸出結(jié)果:

函數(shù)內(nèi) : ?30

變量作用域

一個(gè)程序的所有的變量并不是在哪個(gè)位置都可以訪問(wèn)的。訪問(wèn)權(quán)限決定于這個(gè)變量是在哪里賦值的。

變量的作用域決定了在哪一部分程序你可以訪問(wèn)哪個(gè)特定的變量名稱。兩種最基本的變量作用域如下:

全局變量

局部變量

全局變量和局部變量

定義在函數(shù)內(nèi)部的變量擁有一個(gè)局部作用域,定義在函數(shù)外的擁有全局作用域。

局部變量只能在其被聲明的函數(shù)內(nèi)部訪問(wèn),而全局變量可以在整個(gè)程序范圍內(nèi)訪問(wèn)。調(diào)用函數(shù)時(shí),所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。如下實(shí)例:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

total = 0 # 這是一個(gè)全局變量# 可寫(xiě)函數(shù)說(shuō)明def sum( arg1, arg2 ): ? #返回2個(gè)參數(shù)的和."

total = arg1 + arg2 # total在這里是局部變量.

print "函數(shù)內(nèi)是局部變量 : ", total

return total

#調(diào)用sum函數(shù)sum( 10, 20 )print "函數(shù)外是全局變量 : ", total

以上實(shí)例輸出結(jié)果:

函數(shù)內(nèi)是局部變量 : ?30函數(shù)外是全局變量 : ?0

用C++/Qt 寫(xiě)Python調(diào)試器遇到的問(wèn)題

在C++中,“類函數(shù)指針”和傳統(tǒng)的“函數(shù)指針”,是兩個(gè)完全不同的東西。

你取一個(gè)類的成員函數(shù)的地址,得到的是一個(gè)類函數(shù)指針,也叫成員函數(shù)指針。即使你的成員函數(shù)定義看起來(lái)和普通函數(shù)原型完全一樣,它也和這個(gè)原型的普通函數(shù)指針完全不同,彼此之間不能轉(zhuǎn)換。

PyEval_SetTrace要求傳入的是一個(gè)傳統(tǒng)的函數(shù)指針,你傳入一個(gè)類函數(shù)指針,當(dāng)然是不行的。編譯器報(bào)錯(cuò)是說(shuō)無(wú)法將一個(gè)類函數(shù)指針轉(zhuǎn)換為函數(shù)指針。

C++的類函數(shù)指針,是一個(gè)非常難用的東西,有非常多奇怪的特性,而且不同編譯器對(duì)它的支持大不相同,是C++著名的復(fù)雜性來(lái)源之一,建議不要使用。

你想要的東西,實(shí)際上是一個(gè)“委托”的概念,不過(guò)可惜的是C++并不支持委托。使用boost::function可以實(shí)現(xiàn)類似功能,但python的C API接口卻不支持boost::function,所以也不行。

你這種情況,最簡(jiǎn)單的方法還是用傳統(tǒng)的函數(shù)指針,使用普通函數(shù)包裝下類的成員函數(shù),然后把普通函數(shù)的指針傳給python。


本文標(biāo)題:python函數(shù)追蹤 python中的查找函數(shù)
文章分享:http://weahome.cn/article/hhojsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部