python基礎和注意點概要

來源:互聯網
上載者:User

標籤:執行個體   寫入內容   不可變對象   english   jin   write   www   無效   enc   

1. 只有在形參表末尾的那些參數可以有預設參數值
例如,def func(a, b=1) 是有效,但是 def func(a=1, b) 是無效的。

2. 預設參數的值是不可變的對象,比如None、True、False、數字或字串
例如;def print_info( a , b = [] ): 就是錯誤的

3. 回呼函數
定義:
一般情況下,應用程式會時常通過API調用庫裡所預先備好的函數。但是有些庫函數卻要求應用先傳給它一個函數,
好在合適的時候調用,以完成目標任務。這個被傳入的、後又被調用的函數就稱為回呼函數。

打個比方:
有一家旅館提供叫醒服務,但是要求旅客自己決定叫醒的方法。可以是打客房電話,也可以是派服務員去敲門,
睡得死怕耽誤事的,還可以要求往自己頭上澆盆水。
“叫醒”這個行為是旅館提供的,相當於庫函數,
“叫醒的方式”是由旅客決定並告訴旅館的,也就是回呼函數;
而旅客告訴旅館怎麼叫醒自己的動作,也就是把回呼函數傳入庫函數的動作,稱為登記回呼函數。

執行個體:
http://blog.csdn.net/tchenjx/article/details/51661173

4. 所有的變數都可以理解是記憶體中一個對象的“引用”
可變對象一旦建立之後還可改變但是地址不會發生改變,即該變數指向的還是原來的對象,不可變對象相反
strings, tuples, 和numbers是不可更改的對象,而 list, dict, set 等則是可以修改的對象

值傳遞:將參數a的值作為參數傳遞進去,程式運行完a的值不改變
引用傳遞:將參數a的地址傳遞進去,程式運行完a的值隨之改變

python不允許程式員選擇傳值還是傳引用,
如果函數接受的是一個不可變對象,則為值傳遞;
如果函數接受的是一個可變對象,則為引用傳遞。

匿名函數
lambda x,y: x+y
filter(lambda x:x>3,[1,2,3,4,5])

反轉字串 text="abcdef"
1)text[::-1]
2)轉換成list,用其reverse函數


[:end:]和range(,end,) 都是輸出到end-1,比如:
text="abcdef"
print text[:5] #abcde

部落格:
https://changchen.me/about/
http://ssdxiao.github.io/ 虛擬化

a = [1,2,3]
b = [4,5,6]
zipped = zip(a,b) # 打包為元組的列表[(1, 4), (2, 5), (3, 6)]
zip(*zipped) # 與 zip 相反,可理解為解壓,返回二維矩陣式[(1, 2, 3), (4, 5, 6)]


函數調用問題(下面代碼會輸出什麼)
https://www.cnblogs.com/zhangqigao/p/6397853.html 問題6
第3次是建立在第1次函數調用的基礎上,l = [0,1]

 


5. 執行個體方法/類方法/靜態方法

6. yield
iterables -> generators -> yield

列表推導式: mylist = [x*x for x in range(3)]

產生器也是迭代器的一種,但是你只能迭代它們一次.
原因很簡單,因為它們不是全部存在記憶體裡,它們只在要調用的時候在記憶體裡產生
mygenerator = (x*x for x in range(3))
產生器和迭代器的區別就是用()代替[],還有你不能用for i in mygenerator第二次調用產生器

Yield的用法和關鍵字return差不多,會返回一個產生器
Yield你必須先理解當你調用函數的時候,函數裡的代碼並沒有運行.函數僅僅返回產生器對象
每當for語句迭代產生器的時候你的代碼才會運轉


7. 當函數的參數不確定時,可以使用*args 和**kwargs,*args 沒有key值,**kwargs有key值。
http://blog.csdn.net/chenjinyu_tang/article/details/8136841

 

 


8. 爬蟲
1. urllib2庫、xpath
擷取標籤內的text
info = bloger[0].xpath(‘string(.)‘).encode(‘utf-8‘).strip()

檔案轉化為html格式進行分析
from lxml import etree
record = open("test.html",‘r‘)
tree = etree.HTML(record.read())
desc = tree.xpath("//dt[text()=‘Bugzilla:‘]")[0].getnext().xpath(‘string(.)‘)
pattern = re.compile("CVE-\d+-\d+ .*:")
print re.findall(r" (.*):", pattern.findall(desc)[0])[0]


2. excel
import xlwt
workbook = xlwt.Workbook()
sheet = workbook.add_sheet(‘sheet‘,cell_overwrite_ok=True)
sheet.write(0, 0, ‘EnglishName‘) #(行,列,寫入內容)
workbook.save(‘test.xls‘)


3. 正則
record = open(suse_path+cve,"r").read()#常值內容轉化為string
pattern = re.compile("h4\>\n.*\n\<hr\>")
print pattern.findall(record)[0]


9. 新式類是廣度優先,舊式類是深度優先

10. 淺拷貝和深拷貝
直接賦值:傳遞對象的引用而已,原始列表改變,被賦值的b也會做相同的改變
淺拷貝:子物件沒有拷貝,所以未經處理資料改變,子物件會改變
深拷貝:全部拷貝,未經處理資料怎麼變也不會導致拷貝後的元素改變

11.使用for從序列中得到的每一個對象,事實上都是從原序列中複製了一份。
因此對此對象進行處理時,只是處理了複製體,並沒有影響到原序列

 

python基礎和注意點概要

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.