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

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

pythondev函數(shù) pythondev

python 基礎(chǔ)教程

運(yùn)算

創(chuàng)新互聯(lián)是一家專業(yè)提供鄞州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、H5建站、小程序制作等業(yè)務(wù)。10年已為鄞州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。

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 有一個不為 true"

if ( a or b ):

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

else:

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

a = 0

if ( a and b ):

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

else:

print "3 - 變量 a 和 b 有一個不為 true"

if ( a or b ):

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

else:

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

if not( a and b ):

print "5 - 變量 a 和 b 都為 false,或其中一個變量為 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è)置標(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: # 值小于零時輸出

print 'error'

else:

print 'roadman' # 條件均不成立時輸出

循環(huán)語句:

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ù)時跳過輸出

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時跳出循環(huán)

break

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

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

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

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

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

print "Good bye!"

獲取用戶輸入:raw_input

var = 1

while var == 1 : # 該條件永遠(yuǎn)為true,循環(huán)將無限執(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

訪問字符串的值

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)前時間戳:

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"))

獲取某個月日歷:calendar

import calendar

cal = calendar.month(2016, 1)

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

print cal

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

import datetime

i = datetime.datetime.now()

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

print ("ISO格式的日期和時間是 %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)前小時是 %s" %i.hour)

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

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

不定長參數(shù):*

lambda:匿名函數(shù)

def....

python模塊搜索路徑

獲取用戶輸入

str = raw_input("請輸入:")

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

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

open參數(shù)

write要自己添加換行符

讀取10個字符

重命名:os.rename

os.remove

os.mkdir os.chdir

os.getcwd

os.rmdir

open參數(shù)

file的方法

異常:

try:

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

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

except IOError:

print "Error: 沒有找到文件或讀取文件失敗"

else:

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

fh.close()

try:

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

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

finally:

print "Error: 沒有找到文件或讀取文件失敗"

用戶自定義異常:

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

| 序號 | 方法及描述 |

| 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 (不包含), 錯誤會忽略 |

| 9 |

os.dup(fd)

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

| 10 |

os.dup2(fd, fd2)

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

| 11 |

os.fchdir(fd)

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

| 12 |

os.fchmod(fd, mode)

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

| 13 |

os.fchown(fd, uid, gid)

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

| 14 |

os.fdatasync(fd)

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

| 15 |

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

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

| 16 |

os.fpathconf(fd, name)

返回一個打開的文件的系統(tǒng)配置信息。name為檢索的系統(tǒng)配置的值,它也許是一個定義系統(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的文件寫入硬盤。 |

| 20 |

os.ftruncate(fd, length)

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

| 21 |

os.getcwd()

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

| 22 |

os.getcwdu()

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

| 23 |

os.isatty(fd)

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

| 24 |

os.lchflags(path, flags)

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

| 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è)置從文件開始的計算的pos; SEEK_CUR或者 1 則從當(dāng)前位置計算; os.SEEK_END或者2則從文件尾部開始. 在unix,Windows中有效 |

| 30 |

os.lstat(path)

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

| 31 |

os.major(device)

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

| 32 |

os.makedev(major, minor)

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

| 33 |

os.makedirs(path[, mode])

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

| 34 |

os.minor(device)

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

| 35 |

os.mkdir(path[, mode])

以數(shù)字mode的mode創(chuàng)建一個名為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)建一個名為filename文件系統(tǒng)節(jié)點(diǎn)(文件,設(shè)備特別文件或者命名pipe)。

|

| 38 |

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

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

| 39 |

os.openpty()

打開一個新的偽終端對。返回 pty 和 tty的文件描述符。 |

| 40 |

os.pathconf(path, name)

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

| 41 |

os.pipe()

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

| 42 |

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

從一個 command 打開一個管道 |

| 43 |

os.read(fd, n)

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

| 44 |

os.readlink(path)

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

| 45 |

os.remove(path)

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

| 46 |

os.removedirs(path)

遞歸刪除目錄。 |

| 47 |

os.rename(src, dst)

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

| 48 |

os.renames(old, new)

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

| 49 |

os.rmdir(path)

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

| 50 |

os.stat(path)

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

| 51 |

os.stat_float_times([newvalue])

決定stat_result是否以float對象顯示時間戳

|

| 52 |

os.statvfs(path)

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

| 53 |

os.symlink(src, dst)

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

| 54 |

os.tcgetpgrp(fd)

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

| 55 |

os.tcsetpgrp(fd, pg)

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

| 56 |

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

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

| 57 |

os.tmpfile()

返回一個打開的模式為(w+b)的文件對象 .這文件對象沒有文件夾入口,沒有文件描述符,將會自動刪除。 |

| 58 |

os.tmpnam()

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

| 59 |

os.ttyname(fd)

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

| 60 |

os.unlink(path)

刪除文件路徑 |

| 61 |

os.utime(path, times)

返回指定的path文件的訪問和修改的時間。 |

| 62 |

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

輸出在文件夾中的文件名通過在樹中游走,向上或者向下。 |

| 63 |

os.write(fd, str)

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

Python函數(shù)的參數(shù)類型

Python函數(shù)的參數(shù)類型主要包括必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)和關(guān)鍵字參數(shù),本文介紹一下他們的定義以及可變數(shù)據(jù)類型參數(shù)傳遞需要注意的地方。

必選參數(shù)(Required arguments)是必須輸入的參數(shù),比如下面的代碼,必須輸入2個參數(shù),否則就會報錯:

其實(shí)上面例子中的參數(shù) num1和num2也屬于關(guān)鍵字參數(shù),比如可以通過如下方式調(diào)用:

執(zhí)行結(jié)果:

可選參數(shù)(Optional arguments)可以不用傳入函數(shù),有一個默認(rèn)值,如果沒有傳入會使用默認(rèn)值,不會報錯。

位置參數(shù)(positional arguments)根據(jù)其在函數(shù)定義中的位置調(diào)用,下面是pow()函數(shù)的幫助信息:

x,y,z三個參數(shù)的的順序是固定的,并且不能使用關(guān)鍵字:

輸出:

在上面的pow()函數(shù)幫助信息中可以看到位置參數(shù)后面加了一個反斜杠 / ,這是python內(nèi)置函數(shù)的語法定義,Python開發(fā)人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數(shù):

星號前面的參數(shù)為位置參數(shù)或者關(guān)鍵字參數(shù),星號后面是強(qiáng)制關(guān)鍵字參數(shù),具體介紹見強(qiáng)制關(guān)鍵字參數(shù)。

python3.8版本引入了強(qiáng)制位置參數(shù)(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數(shù)了,可以寫成如下形式:

來看下面的例子:

python3.8運(yùn)行:

不能使用關(guān)鍵字參數(shù)形式賦值了。

可變參數(shù) (varargs argument) 就是傳入的參數(shù)個數(shù)是可變的,可以是0-n個,使用星號( * )將輸入?yún)?shù)自動組裝為一個元組(tuple):

執(zhí)行結(jié)果:

關(guān)鍵字參數(shù)(keyword argument)允許將任意個含參數(shù)名的參數(shù)導(dǎo)入到python函數(shù)中,使用雙星號( ** ),在函數(shù)內(nèi)部自動組裝為一個字典。

執(zhí)行結(jié)果:

上面介紹的參數(shù)可以混合使用:

結(jié)果:

注意:由于傳入的參數(shù)個數(shù)不定,所以當(dāng)與普通參數(shù)一同使用時,必須把帶星號的參數(shù)放在最后。

強(qiáng)制關(guān)鍵字參數(shù)(Keyword-Only Arguments)是python3引入的特性,可參考:。 使用一個星號隔開:

在位置參數(shù)一節(jié)介紹過星號前面的參數(shù)可以是位置參數(shù)和關(guān)鍵字參數(shù)。星號后面的參數(shù)都是強(qiáng)制關(guān)鍵字參數(shù),必須以指定參數(shù)名的方式傳參,如果強(qiáng)制關(guān)鍵字參數(shù)沒有設(shè)置默認(rèn)參數(shù),調(diào)用函數(shù)時必須傳參。

執(zhí)行結(jié)果:

也可以在可變參數(shù)后面命名關(guān)鍵字參數(shù),這樣就不需要星號分隔符了:

執(zhí)行結(jié)果:

在Python對象及內(nèi)存管理機(jī)制中介紹了python中的參數(shù)傳遞屬于對象的 引用傳遞 (pass by object reference),在編寫函數(shù)的時候需要特別注意。

先來看個例子:

執(zhí)行結(jié)果:

l1 和 l2指向相同的地址,由于列表可變,l1改變時,l2也跟著變了。

接著看下面的例子:

結(jié)果:

l1沒有變化!為什么不是[1, 2, 3, 4]呢?

l = l + [4]表示創(chuàng)建一個“末尾加入元素 4“的新列表,并讓 l 指向這個新的對象,l1沒有進(jìn)行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個返回值:

結(jié)果:

下面的代碼執(zhí)行結(jié)果又是什么呢?

執(zhí)行結(jié)果:

和第一個例子一樣,l1 和 l2指向相同的地址,所以會一起改變。這個問題怎么解決呢?

可以使用下面的方式:

也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對象及內(nèi)存管理機(jī)制。這個問題在Python編程時需要特別注意。

本文主要介紹了python函數(shù)的幾種參數(shù)類型:必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)、強(qiáng)制位置參數(shù)、關(guān)鍵字參數(shù)、強(qiáng)制關(guān)鍵字參數(shù),注意他們不是完全獨(dú)立的,比如必選參數(shù)、可選參數(shù)也可以是關(guān)鍵字參數(shù),位置參數(shù)可以是必選參數(shù)或者可選參數(shù)。

另外,python中的參數(shù)傳遞屬于對象的 引用傳遞 ,在對可變數(shù)據(jù)類型進(jìn)行參數(shù)傳遞時需要特別注意,如有必要,使用python的拷貝方法。

參考文檔:

--THE END--

linux python下怎么安裝第三方函數(shù)庫?

最簡單的方式是使用Python的pip包管理器,pip可以自動根據(jù)包的名稱搜索并下載包,安裝包時,自動先安裝所依賴的包,十分簡單方便。

在linux中可以使用以下代碼安裝pip包管理器:

sudo?apt-get?install?python-pip

安裝好pip包管理器后,安裝包就可以使用簡單的一條語句

pip?install?包名稱

使用

pip?list

可以查看已經(jīng)安裝好的包。

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

Python是解釋性語言, 底層就是用c實(shí)現(xiàn)的, 所以用python調(diào)用C是很容易的, 下面就總結(jié)一下各種調(diào)用的方法, 給出例子, 所有例子都在ubuntu9.10, python2.6下試過

1. Python 調(diào)用 C (base)

想在python中調(diào)用c函數(shù), 如這兒的fact

#include Python.h

int fact(int n)

{

if (n = 1)

return 1;

else

return n * fact(n - 1);

}

PyObject* wrap_fact(PyObject* self, PyObject* args)

{

int n, result;

if (! PyArg_ParseTuple(args, "i:fact", n))

return NULL;

result = fact(n);

return Py_BuildValue("i", result);

}

static PyMethodDef exampleMethods[] =

{

{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},

{NULL, NULL}

};

void initexample()

{

PyObject* m;

m = Py_InitModule("example", exampleMethods);

}

把這段代碼存為wrapper.c, 編成so庫,

gcc -fPIC wrapper.c -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

然后在有此so庫的目錄, 進(jìn)入python, 可以如下使用

import example

example.fact(4)

2. Python 調(diào)用 C++ (base)

在python中調(diào)用C++類成員函數(shù), 如下調(diào)用TestFact類中的fact函數(shù),

#include Python.h

class TestFact{

public:

TestFact(){};

~TestFact(){};

int fact(int n);

};

int TestFact::fact(int n)

{

if (n = 1)

return 1;

else

return n * (n - 1);

}

int fact(int n)

{

TestFact t;

return t.fact(n);

}

PyObject* wrap_fact(PyObject* self, PyObject* args)

{

int n, result;

if (! PyArg_ParseTuple(args, "i:fact", n))

return NULL;

result = fact(n);

return Py_BuildValue("i", result);

}

static PyMethodDef exampleMethods[] =

{

{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},

{NULL, NULL}

};

extern "C" //不加會導(dǎo)致找不到initexample

void initexample()

{

PyObject* m;

m = Py_InitModule("example", exampleMethods);

}

把這段代碼存為wrapper.cpp, 編成so庫,

g++ -fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

然后在有此so庫的目錄, 進(jìn)入python, 可以如下使用

import example

example.fact(4)

3. Python 調(diào)用 C++ (Boost.Python)

Boost庫是非常強(qiáng)大的庫, 其中的python庫可以用來封裝c++被python調(diào)用, 功能比較強(qiáng)大, 不但可以封裝函數(shù)還能封裝類, 類成員.

首先在ubuntu下安裝boost.python, apt-get install libboost-python-dev

#include boost/python.hpp

char const* greet()

{

return "hello, world";

}

BOOST_PYTHON_MODULE(hello)

{

using namespace boost::python;

def("greet", greet);

}

把代碼存為hello.cpp, 編譯成so庫

g++ hello.cpp -o hello.so -shared -I/usr/include/python2.5 -I/usr/lib/python2.5/config -lboost_python-gcc42-mt-1_34_1

此處python路徑設(shè)為你的python路徑, 并且必須加-lboost_python-gcc42-mt-1_34_1, 這個庫名不一定是這個, 去/user/lib查

然后在有此so庫的目錄, 進(jìn)入python, 可以如下使用

import hello

hello.greet()

'hello, world'

4. python 調(diào)用 c++ (ctypes)

ctypes is an advanced ffi (Foreign Function Interface) package for Python 2.3 and higher. In Python 2.5 it is already included.

ctypes allows to call functions in dlls/shared libraries and has extensive facilities to create, access and manipulate simple and complicated C data types in Python - in other words: wrap libraries in pure Python. It is even possible to implement C callback functions in pure Python.

#include Python.h

class TestFact{

public:

TestFact(){};

~TestFact(){};

int fact(int n);

};

int TestFact::fact(int n)

{

if (n = 1)

return 1;

else

return n * (n - 1);

}

extern "C"

int fact(int n)

{

TestFact t;

return t.fact(n);

}

將代碼存為wrapper.cpp不用寫python接口封裝, 直接編譯成so庫,

g++ -fPIC wrapper.cpp -o example.so -shared -I/usr/include/python2.6 -I/usr/lib/python2.6/config

進(jìn)入python, 可以如下使用

import ctypes

pdll = ctypes.CDLL('/home/ubuntu/tmp/example.so')

pdll.fact(4)

12

Python中的input()、isinstance()函數(shù)如何使用?

Python解釋器內(nèi)置了許多函數(shù),這意味著我們無需定義,始終可以它們。接下來和大家一起討論一個常用的內(nèi)建函數(shù)-input()和isinstance()。

input()

input()函數(shù)讀取用戶輸入,并轉(zhuǎn)換成字符串:

a?=?input()??#?將input()返回的值賦值給a

Python

a????????????#?查看a的值(為字符串'Python')

'Python'

input()函數(shù)可以提供一個參數(shù),用來提示用戶:

b?=?input('請輸入你最喜歡的水果:??')???#?給用戶必要的提示

請輸入你最喜歡的水果:??香蕉

b

'香蕉'

需要注意的是,input()函數(shù)返回的值總是字符串,當(dāng)用戶輸入的是數(shù)字也是這樣,所以當(dāng)使用它時一定要注意:

num?=?input('請輸入一個數(shù)字:?')

請輸入一個數(shù)字:?10

num?+?9????????????????????????????#?試圖把num和數(shù)字相加

Traceback?(most?recent?call?last):

File?"",?line?1,?in

TypeError:?must?be?str,?not?int

num

'10'

type(num)???????????????????????????#?查看num的數(shù)字類型

class?'str'

isinstance()

isinstance()函數(shù)用于檢查對象是否為指定類(或者說數(shù)據(jù)類型)的實(shí)例。isintance()的第一個參數(shù)為一個對象,第二個參數(shù)為要檢查的數(shù)據(jù)類型。

舉個例子,比如有有一個變量,你想檢查它是否為數(shù)字類型,可以使用isinstance()函數(shù):

score?=?90

result?=?isinstance(score,?int)

if?result:

...?????print('score為int數(shù)據(jù)類型')

...?else:

...?????print('score不為int數(shù)據(jù)類型')

...

score為int數(shù)據(jù)類型

除了能檢查是否為int類型外,isintance()還能檢查其他數(shù)據(jù)類型(當(dāng)然了),下面是一個綜合示例:

pi?=?3.14

name?=?'Wang'

complex_num?=?1?+?2j

isinstance(pi,?float)??????????????#?3.14為浮點(diǎn)數(shù)類型

True

isinstance(name,?str)??????????????#?'Wang'為字符串類型

True

isinstance(complex_num,?complex)???#??1?+?2j為復(fù)數(shù)

True

isinstance()還可以驗(yàn)證某個對象是否為自定義的類型:

class?Developer:?????????????????????????????#?定義一個叫做Developer的類

...

...?????def?__init__(self,?name):????????????????#?__init__方法中,需要輸入名字

...?????????self.name?=?name

...?????def?display(self):???????????????????????#?定義了display()方法

...?????????print("Developer:",?self.name,?"-")

...

class?PythonDeveloper(Developer):????????????#?PythonDeveloper類,繼承了Developer類

...

...?????def?__init__(self,?name,?language):

...?????????self.name?=?name

...?????????self.language?=?language

...

...?????def?display(self):????????????????????????#?覆蓋了父類的display方法

...?????????print("Python?Developer:",?self.name,?"language:",?self.language,?"-")

...

dev?=?Developer('Zhang')?????????????????????#?創(chuàng)建一個Developer對象

dev.display()????????????????????????????????#?調(diào)用display()方法,以查看該對象

Developer:?Zhang?-

isinstance(dev,?Developer)???????????????????#?判斷dev是否為Developer類,答案是肯定的

True

isinstance(dev,?PythonDeveloper)?????????????#?判斷dev是否為PythonDeveloper類,當(dāng)然不是

False

python_dev?=?PythonDeveloper('Liu',?'Python')??#?創(chuàng)建一個PythonDeveloper對象,注意PythonDeveloper是Developer的子類

python_dev.display()??????????????????????????#?調(diào)用display方法

Python?Developer:?Liu?language:?Python?-

isinstance(python_dev,?Developer)?????????????#?判斷python_dev是否為Developer類,答案是肯定的

True

isinstance(python_dev,?PythonDeveloper)??????#?判斷python是否為PythonDeveloper類,答案也是肯定的

True

關(guān)于Python的基礎(chǔ)問題可以看下這個網(wǎng)頁的視頻教程,網(wǎng)頁鏈接,希望我的回答能幫到你。

Python當(dāng)中有哪些包或者函數(shù)可以求時間序列的倒譜系數(shù)

Python當(dāng)中有哪些包或者函數(shù)可以求時間序列的倒譜系數(shù)

python是一種對縮進(jìn)有嚴(yán)格要求的語言, Python腳本可以使用非常多的工具進(jìn)行編寫,筆者在Linux系統(tǒng)使用JEdit進(jìn)行Python腳本編寫,由于在Linux編寫腳本比較痛苦,比如想一眼看出相同的變量在哪個地方使用就非常不方便,所以想轉(zhuǎn)到Window系統(tǒng)上進(jìn)行編寫,在Windows上有一個非常輕量級的腳本編寫工具:Note Pad++, 還有一個Eclipse上的插件pydev。

但是直接將linux上的Python腳本直接移到window上編寫時出現(xiàn)了大量的縮進(jìn)問題,因?yàn)長inux和window上對待tab是不同的方式,有的是看做是一個space有的看作是幾個space,非常的麻煩。


分享題目:pythondev函數(shù) pythondev
URL網(wǎng)址:http://weahome.cn/article/hjcigd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部