|
第一次接觸深拷貝和淺拷貝是在c++語言中,python中,也存在著深拷貝和淺拷貝。 淺拷貝,就是給你一個引用,當源數(shù)據(jù)改變的時候,你以前獲取的引用所指向的數(shù)據(jù)也會跟著變化;深拷貝,也是給你一個引用,不同的是它拷貝了份資源,給你的引用指向這份拷貝的資源,與源數(shù)據(jù)無任何聯(lián)系。 以代碼說明一切: - >>> ls = [2,7, 'ac', ['2a', 45,10], {'a' : 'a1', 'b':123, 'z': 4, 'r' : 33}, 0]
- >>> ls2 = ls
- >>> ls3 = ls[:]
- >>> import copy
- >>> ls4 = copy.deepcopy(ls)
- >>> ls
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls2
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls3
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls4
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> ls.append(2008)
- >>> print ls
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0, 2008]
- >>> print ls2
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0, 2008]
- >>> print ls3
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
- >>> print ls4
- [2, 7, 'ac', ['2a', 45, 10], {'a': 'a1', 'r': 33, 'b': 123, 'z': 4}, 0]
第1行,初始化一個list 第2—5行,淺拷貝與深拷貝 第6—13行,源數(shù)據(jù)發(fā)生變化前,打印出源數(shù)據(jù)以及淺拷貝和深拷貝的數(shù)據(jù) 第14行,源數(shù)據(jù)增加一個新數(shù)據(jù) 第15—22,打印出淺拷貝與深拷貝數(shù)據(jù) 看到結(jié)果,就明白淺拷貝與深拷貝了
operator提供了常用的數(shù)字操作,如: - >>> import operator
- >>> operator.add(2,5)
- 7
round函數(shù): - >>> round(3.2344,2)
- 3.23
- >>> round(3.2354,2)
- 3.2400000000000002
- >>>
random模塊中包含了許多隨機函數(shù),如: random() ,返回[0.0, 1.0]范圍中的浮點數(shù) uniform(),返回[0.0, 1.0)范圍中的浮點數(shù) randint(a,b) 返回[a,b]之間的一個隨機整數(shù) randrange()和randint類似 choice([a,b,c])返回序列[a,b,c]中的一項 decimal模塊中包含了許多十進制的整數(shù)算法: - >>> import decimal
- >>> d1 = decimal.Decimal('2.3456')
- >>> d1.to_integral()
- Decimal("2")
- >>> d1 = decimal.Decimal('2.53456')
- >>> d1.to_integral()
- Decimal("3")
- >>>
通常情況下,在其他語言中,包括在python中,除法一般都是如下計算: 但是,在數(shù)學計算中,應(yīng)該不是這樣的,正確的結(jié)果應(yīng)該是 1/2=0.5, 1/4=0.25才對,簡潔而強大的python也為程序員考慮了這一點: - >>> from __future__ import division
- >>> 1/2
- 0.5
- >>> 1/4
- 0.25
嗯……,這才是真正的除法。
python本來就是動態(tài)語言,做一些動態(tài)的東西,應(yīng)該說是得心應(yīng)手吧,下面咱們看看先: 有時候可能會有這種需求,動態(tài)的聲明變量,變量聲明還可以動態(tài)啊?感覺似乎比較炫。 那么變量標識符來自哪里呢?比如說可能來自配置文件,數(shù)據(jù)庫,調(diào)用接口等等,不管標識符來自,我們先得把它們保存到一個數(shù)據(jù)結(jié)構(gòu)中,如下例,假如保存到一個list中: - >>> ls = ['a1', 'a2', 'a3']
- >>> for i in ls:
- ... exec(i + '=None')
- ...
- >>> a1 is None
- True
- >>> a1
- >>> a2 is not None
- False
- >>> a3
- >>> a3 is None
- True
- >>>
上面的代碼中,第1行是來自外部的變量標識符,第2—3行是變量的動態(tài)聲明,第5—12是對聲明后的變量進行一下測試,聲明是否成功
模態(tài)對話框就是指在子對話框彈出時,焦點被強行集中于該子對話框,子對話框不關(guān)閉,用戶將無法操作其他的窗口。非模態(tài)相反,用戶仍然可以操作其他的窗口,包括該子對話框的父對話框。 如果從線程角度來講,模態(tài)對話框?qū)嶋H上是線程阻塞的,也就是子對話框是一個線程,但是在創(chuàng)建這個子線程之后,父窗口就阻塞了;模態(tài)對話框則不是阻塞型的線程模型,父子線程可以并行運行。 和所有流行的圖形類庫一樣,Qt也提供了創(chuàng)建模態(tài)和非模態(tài)對話框的機制。 在Qt中創(chuàng)建模態(tài)對話框,主要用到了QDialog的exec函數(shù): SonDialog dlg(this); int res = dlg.exec(); if (res == QDialog::Accepted) { QMessageBox::information(this, "INFORMATION", "You clicked OK button!"); } if (res == QDialog::Rejected) { QMessageBox::information(this, "INFORMATION", "You clicked CANCEL button!"); } 正如上面代碼所顯示的,可以通過exec函數(shù)的返回值來判斷用戶點擊了哪個按鈕使得模態(tài)對話框退出的,這可以使得我們能夠根據(jù)用戶的不同行為在推出退出模態(tài)對話框之后采取不同的處理方法。 在Qt中創(chuàng)建非模態(tài)對話框,主要用到了QDialog的show函數(shù): SonDialog *dlg; dlg = new SonDialog(this); dlg->show(); 由上面代碼,細心的讀者可能就會問了,既然new了,如果不delete,那么內(nèi)存不就存在了泄露的問題了嗎?確實如此!所以,我們希望該Qt窗口在退出時自動能夠delete掉自己,因此,我們在SonDialog的構(gòu)造函數(shù)里,添加這樣的一句代碼: setAttribute (Qt::WA_DeleteOnClose); 這樣,我們的SonDialog就能夠在它退出時自動的delete掉自己了,不會再造成內(nèi)存泄漏問題。
QPainter默認只能在paintEvent里面調(diào)用,但是: 在其他事件中繪制窗體,提示信息如下: QPainter::begin: Paint device returned engine == 0, type: 1
繪制操作應(yīng)該在paintEvent中完成.
有一個屬性值,在構(gòu)造函數(shù)中設(shè)置可以在paintEvent()之外進行繪制: this->setAttribute(Qt::WA_PaintOutsidePaintEvent);
但是只支持X11,對于 Windows, Mac OS X or Embedded Linux。。。。不予支持 void xx::paintEvent(QPaintEvent *p) { painter.begin(this); painter.drawImage(image); painter.end(); }
快手(AAuto Quicker)是一鶴軟件歷時五年傾情打造 - 專用于小型桌面工具、自動模擬軟件快速開發(fā),可一鍵發(fā)布為數(shù)百K的獨立EXE程序,快速開發(fā)網(wǎng)站提交機器人,全面支持游戲輔助工具技術(shù),一句代碼實現(xiàn)CALL外部程序函數(shù)。 完美支持靜態(tài)類型、動態(tài)類型,完美支持COM、DLL API、REMOTE EXE CALL API。 主要面向小型輕量快速開發(fā)應(yīng)用,專用于模擬自動化、web自動化、自動化測試、機器人程序開發(fā)。 AAuto廣泛吸收各種語言中的優(yōu)秀語法特性,拋棄另類怪異的設(shè)計風格,廣泛兼容通用標準,易學易用、支持快速開發(fā),你幾乎可以將任何主流編程語言中的代碼作很少的修改就可以在AAuto中更穩(wěn)定快速的執(zhí)行。 當前第1張截圖 (  點擊上圖查看所有截圖)
用記事本打開:Setup–>setup.sdb文件,將 [Product Key] YR3W8FCM2B7BKF9HMQFTCH7WK 改成 [Product Key] YCFHQ9DWCYDKV88T2TMHG7BHP 安裝的時候就默認是這個正版的序列號了。 還有一種方法就是,不改這個文件,安裝后,再添加刪除程序的時候可以輸入序列號: YCFHQ-9DWCY-DKV88-T2TMH-G7BHP 也可以變成正版。 安裝完成后,下載安裝Windows 自動化 API 3.0,Visual Studio 2010 的智能提示運行速度更快 http://support.microsoft.com/kb/981741/zh-cn
git://gitorious.org/qt-labs/doxygen2qthelp.git
|