def func():
10年積累的成都做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有建華免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
pass
btn = Button(root,text = "xxx",command = func)
btn_2 = Button(root,text = "xxx",command = func)
最近看了《Gray hat python》一書,這才知道為什么python是黑客必學(xué)的編程語言。通過python的ctypes模塊,可以直接調(diào)用動態(tài)鏈接庫中的導(dǎo)出函數(shù),而且甚至可以直接在python中構(gòu)建出復(fù)雜的C結(jié)構(gòu)體!!!使得python也具備了底層內(nèi)存操作的能力,再配合python本身強(qiáng)大的表達(dá)能力,能不讓人激動么。
之前為了在python中調(diào)用動態(tài)鏈接庫導(dǎo)出的函數(shù),你需要自行解析出這些導(dǎo)出函數(shù)的地址。而現(xiàn)在ctypes庫會替我們完成這個(gè)麻煩的過程,大大方便了我們直接在python中調(diào)用C函數(shù)的能力。
ctypes模塊中有三種不同的動態(tài)鏈接庫加載方式:cdll, windll, oledll。不同之處在于鏈接庫中的函數(shù)所遵從的函數(shù)調(diào)用方式(calling convention)以及返回方式有所不同。
cdll用于加載遵循cdecl標(biāo)準(zhǔn)函數(shù)調(diào)用約定的鏈接庫。windll則用于加載遵循stdcall調(diào)用約定的動態(tài)鏈接庫。oledll與windll完全相同,只是會默認(rèn)其載入的函數(shù)會統(tǒng)一返回一個(gè)Windows HRESULT錯(cuò)誤編碼。
先復(fù)習(xí)一下有關(guān)函數(shù)調(diào)用約定的知識:函數(shù)調(diào)用約定指的是函數(shù)參數(shù)入棧的順序、哪些參數(shù)入棧、哪些通過寄存器傳值、函數(shù)返回時(shí)棧幀的回收方式(是由調(diào)用者負(fù)責(zé)清理,還是被調(diào)用者清理)、函數(shù)名稱的修飾方法等等。基本上我們最常見的調(diào)用約定就是cdecl和stdcall兩種。在《程序員的自我修養(yǎng)--鏈接、裝載與庫》一書的第10章有對函數(shù)調(diào)用約定的更詳細(xì)介紹。
cdecl規(guī)定函數(shù)參數(shù)列表以從右到左的方式入棧,且由函數(shù)的調(diào)用者負(fù)責(zé)清除棧幀上的參數(shù)。stdcall的參數(shù)入棧方式與cdecl一致,但函數(shù)返回時(shí)是由被調(diào)用者自己負(fù)責(zé)清理?xiàng)6襰tdcall是Win32 API函數(shù)所使用的調(diào)用約定。OK,就這么多,夠了。
測試一下在Linux平臺和Windows平臺下通過ctypes模塊導(dǎo)入C庫中函數(shù)的小例子:
Windows 下:
from ctypes import *
msvcrt = cdll.msvcrt
msg = "Hello world!\n"
msvcrt.printf("Testing: %s", msg)
Linux下:
from ctypes import *
libc = CDLL("libc.so.6")
msg = "Hello, world!\n"
libc.printf("Testing: %s", msg)
可以看到動態(tài)鏈接庫中的printf被直接導(dǎo)入到python中來調(diào)用了。
那么,在python中怎么表示C的類型?不用擔(dān)心,下面這張表就能搞定。
有了這個(gè)映射關(guān)系,多復(fù)雜的C類型也能在python中表達(dá)出來。
在C中定義一個(gè)聯(lián)合:
union
{
long barley_long;
int barley_int;
char barley_char[8];
}barley_amount;
而在python中同等的定義為:注意一下python中定義數(shù)組的方式。
class barley_amount(Union):
_fields_ = [
("barley_long", c_long),
("barley_int", c_int),
("barley_char", c_char * 8),
]
測試一下這個(gè)例子,在python中定義一個(gè)聯(lián)合體,為其賦值,再分別訪問其成員。
from ctypes import *
class barley_amount(Union):
_fields_ = [
("barley_long", c_long),
("barley_int", c_int),
("barley_char", c_char * 8),
]
value = raw_input("Enter the amount of barley to put into the beer vat:")
my_barley = barley_amount(int(value))
print "Barley amount as a long: %ld" % my_barley.barley_long
print "Barley amount as an int: %d" % my_barley.barley_int
print "Barley amount as a char: %s" % my_barley.barley_char
selenium + phantomjs 模擬點(diǎn)擊按鈕,或者另寫代碼實(shí)現(xiàn)js函數(shù)openVideo();
順著第一步再去解析新頁面,看看能否找到視頻的原始地址;
假設(shè)視頻的原始地址第二步找到了,在通過視頻的原始地址下載視頻就OK啦。
用正則匹配
import?re
html?=?'''h3contact?us/h3
pcontact:?manager?wang/p
ptelephone:12345666/p
div?id="nav"
ul
lia?class="nav-first"?href="/"homepage/a/li
lia?href="/lista.php"111/a/li?
lia?href="/lista.php"222/a/li
lia?href="/order/setorder.php"333/a/li
lia?href="/what/cool/ista.php"444/a/li
/ul
/div'''
urls?=?re.findall('href=.*?',?html)??#?正則出a鏈接?href
urlList?=?[]??#?定義urlList
for?url?in?urls:
url?=?url.replace("href=\"",?'')??#?替換href="
urlList.append(url[:-2])??#?獲取的0到-2長度的字符串
print(urlList)
輸出:
['/',?'/lista.php',?'/lista.php',?'/order/setorder.php',?'/what/cool/ista.php']
1:python鏈接mysql的connect函數(shù)使用一般如下:
MySQLdb.connect(host=self.__host, user=self.__user, passwd=self.__passwd, db=self.__dbname,
port=self.__port)
2: 如果鏈接失敗,排查步驟如下:
(1) 使用mysql 命令,使用上面用戶名,密碼登陸,檢查mysql是否正常啟動, 用戶名,密碼是否正確。
(2) 使用 show database; 檢查鏈接的庫是否存在。
(3) use xxxx 登陸對應(yīng)的庫,檢查是否正常。
如果上述均正常,則說明mysql本身是正常的。
(4) print 各個(gè)入?yún)ⅲ_保入?yún)⒑皖A(yù)期一致。
如果都正確,只能根據(jù)錯(cuò)誤提示具體分析了。
quote函數(shù)一般用于處理URL鏈接里的特殊字符,比如一些非ASCII列表中的字母。
位置:該函數(shù)在Python27中位于urllib模塊下,在Python3中應(yīng)該是向下移動一級目錄,位于urllib.parse模塊中。
功能:替換字符串string中的一些特殊字符,并使用%xx的方式替換該特殊字符(xx為該字符的(uft-8)十六進(jìn)制數(shù)值)。正常字符ascii字母a-z,數(shù)字,還有符號'_.-'是不會被替換的。當(dāng)然使用函數(shù)的第二個(gè)參數(shù)(默認(rèn)值為/)可以指定哪些字符也不需要替換。
例子:
urllib.quote('/test')
'/test'
urllib.quote('/test',?safe='')
'%2Ftest'?#?2F?為/的uft-8的hex值。
其他:函數(shù)的第一個(gè)參數(shù)為需要轉(zhuǎn)換的字符串,格式應(yīng)該為str或者bytes。
函數(shù)的第三個(gè)字符為編碼方式。
當(dāng)前題目:python鏈接函數(shù) python 鏈接
本文來源:http://vcdvsql.cn/article2/hhpeoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、域名注冊、網(wǎng)站內(nèi)鏈、App開發(fā)、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)