第一篇:黑馬程序員Python教程:Python培訓專家:6個常見面試題
傳智播客Python培訓專家:6個常見面試題
在面試中,有一定比例是字符串處理以及網絡編程那塊,當然了肯定還有些其他的問題,下面幫大家找了6道題目,接下來小試牛刀吧!很簡單的哦。
第1題:
Q:是否遇到過python的模塊間循環(huán)引用的問題,如何避免它? A:這是代碼結構設計的問題,模塊依賴和類依賴 如果老是覺得碰到循環(huán)引用可能的原因有幾點: 1.可能是模塊的分界線劃錯地方了 2.可能是把應該在一起的東西硬拆開了 3.可能是某些職責放錯地方了 4.可能是應該抽象的東西沒抽象
總之微觀代碼規(guī)范可能并不能幫到太多,重要的是更宏觀的劃分模塊的經驗技巧,推薦uml,腦圖,白板等等圖形化的工具先梳理清楚整個系統(tǒng)的總體結構和職責分工
采取辦法,從設計模式上來規(guī)避這個問題,比如: 1.使用 “__all__” 白名單開放接口 2.盡量避免 import
第2題:
Q: Python中如何定義一個函數
A: 有2種方法:
第1種:
def func(arg, *args, **kwagrs):
#普通函數
func_body
return
第2種:
lambda x: x **2
#匿名函數
第3題:
Q:請寫出一段Python代碼實現刪除一個list里面的重復元素 A:
>>> L1 = [4,1,3,2,3,5,1]
>>> L2 = []
>>> [L2.append(i)for i in L1 if i not in L2]
>>> print L2
[4, 1, 3, 2, 5]
運行結果如下圖:
第4題:
Q:Python是如何進行內存管理的
A: python內部使用引用計數,來保持追蹤內存中的對象,Python內部記錄了對象有多少個引用,即引用計數,當對象被創(chuàng)建時就創(chuàng)建了一個引用計數,當對象不再需要時,這個對象的引用計數為0時,它被垃圾回收。所有這些都是自動完成,不需要像C一樣,人工干預,從而提高了程序員的效率和程序的健壯性。
第5題:
Q:寫一個簡單的Python socket編程
A: socket是用來進行網絡編程用的接口,網絡編程分為服務器端和客戶端
服務器端代碼如下: import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8001))
sock.listen(5)
while True:
conn, addr = sock.accept()
try:
conn.settimeout(5)
buff = conn.recv(1024)
if buff == '1':
conn.send('Hello, Client...')
else:
conn.send('Please, Go Out...')
except socket.timeout:
print 'Socket Time Out...'
finally:
conn.close()
客戶端代碼如下: import socket
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8001))
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()
第6題:
Q:src = “security/afafsff/?ip=123.4.56.78&id=45”,請寫一段代碼用正則匹配出IP
A:
import re
src = “security/afafsff/?ip=123.4.56.78&id=45”
m = re.search('ip=(d{1,3}.d{1,3}.d{1,3}.d{1,3})', src, re.S)# re.S 改變'.'的行為
print m.group(1)
# 輸出結果 >>> 123.4.56.78
運行結果如下:
第二篇:黑馬程序員Python教程python XlsxWriter模塊創(chuàng)建aexcel表格-1
python XlsxWriter模塊創(chuàng)建aexcel表格-1
安裝使用pip install XlsxWriter來安裝,Xlsxwriter用來創(chuàng)建excel表格,功能很強大,下面具體介紹:
1.簡單使用excel的實例:
#coding:utf-8
import xlsxwriter
workbook = xlsxwriter.Workbook('d:suq estdemo1.xlsx')#創(chuàng)建一個excel文件
worksheet = workbook.add_worksheet('TEST')#在文件中創(chuàng)建一個名為TEST的sheet,不加名字默認為sheet1
worksheet.set_column('A:A',20)
#設置第一列寬度為20像素
bold = workbook.add_format({'bold':True})#設置一個加粗的格式對象
worksheet.write('A1','HELLO')
#在A1單元格寫上HELLO
worksheet.write('A2','WORLD',bold)
#在A2上寫上WORLD,并且設置為加粗
worksheet.write('B2',U'中文測試',bold)#在B2上寫上中文加粗
worksheet.write(2,0,32)
#使用行列的方式寫上數字32,35,5
worksheet.write(3,0,35.5)
#使用行列的時候第一行起始為0,所以2,0代表著第三行的第一列,等價于A4
worksheet.write(4,0,'=SUM(A3:A4)')#寫上excel公式 worksheet.insert_image('B5','f:1.jpg')#插入一張圖片
workbook.close()
2.常用方法說明 1.Workbook類
Workbook類創(chuàng)建一個XlsxWriter的Workbook對象,代表整個電子表格文件,存儲到磁盤上.add_worksheet():用來創(chuàng)建工作表,默認為sheet1 add_format():創(chuàng)建一個新的格式對象來格式化單元格,例如bold=workbook.add_format({'bold':True})還可以使用set_bold,例如:bold=workbook.add_format()bold.set_bold()
#border:邊框,align:對齊方式,bg_color:背景顏色,font_size:字體大小,bold:字體加粗
top = workbook.add_format({'border':1,'align':'center','bg_color':'cccccc','font_size':13,'bold':True})
add_chart(options):創(chuàng)建一個圖表對象,內部是使用insert_chart()方法來實現的,options(dict類型)為圖表指定一個字典屬性 close():關閉文件
2.Worksheet類
worksheet代表一個Excel的工作表,是XlsxWriter的核心,下面是幾個核心方法
write(row,col,*args):寫普通數據到工作表的單元格,row行坐標,col列坐標,起始都是以0開始,*args為寫入的內容,可以是字符串,文字,公式等,writer方法已經作為其它更具體數據類型方法的別名
write_string():寫入字符串類型,worksheet.write_string(0,0,'your text')write_number():寫入數字類型,worksheet.write_number('A2',1.1)write_blank():寫入空類型數據,worksheet.write_blank('A2',None)wirte_formula():寫入公式類型,worksheet.write_formula(2,0,'=SUM(B1:B5))write_datetime():寫入日期類型數據,worksheet.write_datetime(7,0,datetime.datetime.strptime('2014-01-02','%Y-%m-%d),workbook.add_format({'num_format':'yyyy-mm-dd'}));write_boolean():寫入邏輯類數據,worksheet.write_boolean(0,0,True)write_url():寫入超鏈接類型數據,worksheet.write_url('A1','ftp://www.tmdps.cn')write_column():寫入到一列,后面接一個數組 wirte_row():寫入到一行,后面接一個數組
set_row(row,height,cell_format,options):此方法設置行單元格的屬性,row指定行位置,height指定高度,單位是像素,cell_format指定格式對象,參數options設置hiddeen(隱藏),level(組合分級),collapsed(折疊,例如: cell_format=workbook.add_format({'bold':True})worksheet.set_row(0,40,cell_format)設置第一行高40,加粗
set_column(first_col,last_col,width,cell_format,options):設置列單元格的屬性,具體參數說明如上.worksheet.set_column(0,1,10)worksheet.set_column('C:D',20)insert_image(row,col,image[,options]):此方法是插入圖片到指定單元格 例如插入一個圖片的超鏈接為www.tmdps.cn worksheet.insert_image('B5','f:1.jpg',{'url':'http://www.tmdps.cn'})
第三篇:黑馬程序員Python教程python re 模塊及正則表達式調用認識-2
python re 模塊及正則表達式調用認識-2
foo匹配foo,也可以是foobar。而正則foo$只配foo.>>> print re.search(r'foo$','foo').group()
foo
>>> print re.search(r'foo$','foobar').group()#匹配失敗
Traceback(most recent call last):
File “
”, line 1, in
print re.search(r'foo$','foobar').group()
AttributeError: 'NoneType' object has no attribute 'group'
>>>
在 'foo1nfoo2n' 中用foo.$進行匹配可以得到foo2,但在MULTILINE模式中得到的是foo1.對$在’foon‘中進行searching,則會匹配到兩個空白,一個在新行之前,一個在字符串的結尾。
>>> print re.search(r'foo.$','foo1nfoo2n').group()
foo2
>>> print re.search(r'foo.$','foo1nfoo2n',re.M).group()
foo1
>>>
>>> print re.search(r'$','foo1nfoo2n').group()
>>>
'*'----匹配前一個字符0次或無限次
>>> print re.search(r'fo*','foooo').group()
foooo
>>> print re.search(r'fo*','f').group()#可以匹配前一個字符零次
f
>>>
’+‘----匹配前一個字符1次或無限次。ab+將匹配a之后的b至少一次。
>>> print re.search(r'fo+','foooo').group()
foooo
>>> print re.search(r'fo+','f').group()
Traceback(most recent call last):
File “
”, line 1, in
print re.search(r'fo+','f').group()
AttributeError: 'NoneType' object has no attribute 'group'
>>>
’?‘----匹配前一個字符0次或一次。ab? 將匹配a 或者ab
>>> print re.search(r'fo?','foooo').group()
fo
>>> print re.search(r'fo?','f').group()
f
>>>
*?, +?,??----'*','+','?'都是貪婪匹配限定符;盡可能多的匹配內容,但有時候沒必要這樣,’<.*>'對'
title
'進行匹配,將會匹配整個字符串不只是'',對其限定符后添加‘?’,這樣就會得到非貪婪匹配或者得到最小匹配。盡可能的少匹配字符;用.*?在表達式之前,則會只匹配''。
>>> print re.search(r'fo*?','foeeeerrfoeeb').group()# *匹配零次
f
>>> print re.search(r'fo*?','foooorrfooob').group()
f
>>> print re.search(r'fo+?','foeeeerrfoeeb').group()# + 匹配一次
fo
>>> print re.search(r'fo+?','foooorrfooob').group()
fo
>>> print re.search(r'fo??','foeeeerrfoeeb').group()# ?匹配一次
f
>>> print re.search(r'fo??','foooorrfooob').group()
f
>>>
>>> print re.search(r'<.*>','
title
').group()title
>>> print re.search(r'<.*?>','
title
').group()>>>
對其限定符后添加‘?’,這樣就會得到非貪婪匹配或者得到最小匹配
{m}---剛好匹配m次,不少也不多
>>> print re.search(r'fo{3}','foooo').group()
fooo
>>> print re.search(r'fo{2}','foooo').group()
foo >>>
{m,n}----匹配正則m到n次,a{3,5} will match from 3 to 5'a' characters。m缺省時表示0,n缺省時表示無限次。a{4,}b will matchaaaab or a thousand'a' characters followed by ab, but notaaab.中間的逗號不能省略。
>>> print re.search(r'a{,4}b','aaab').group()
aaab >>> print re.search(r'a{4,}b','aaab').group()
Traceback(most recent call last):
File “
”, line 1, in
print re.search(r'a{4,}b','aaab').group()
AttributeError: 'NoneType' object has no attribute 'group' >>>
{m,n}?----非貪婪模式,匹配最少的m次。For example, on the 6-character string 'aaaaaa', a{3,5} will match 5'a' characters,while a{3,5}? will only match 3 characters.>>> print re.search(r'a{3,5}b','aaaaaab').group()
aaaaab
>>> print re.search(r'a{3,5}?b','aaaaaab').group()#這種后面還有字符的情況容易出錯,實際還是以n來計算的
aaaaab
>>> print re.search(r'a{3,5}?','aaaaaab').group()
aaa
>>>
‘'----轉義字符,用來匹配 *,?等等。不是使用raw string的情況下,Python also uses the backslash as an escape sequence in string literals;也就是不使用r'XXX時,要使用兩次反斜杠才能表示一個反斜杠,用raw簡單些。
>>> print re.search(r'a*?','aa*?b').group()
a*?
>>> print re.search('a*?','aa*?b').group()
a*?
>>>
[ ]---存放字符集,1)中括號中的字符可以是單個的,e.g.[amk] will match'a','m', or'k'.>>> print re.search('[amk]','sdafgfhmrtykyy').group()
a >>> print re.search('[amk].','sdafgfhmrtykyy').group()
af
>>> print re.search('[mka].','sdafgfhmrtykyy').group()
af
是或關系,匹配了a,就沒有再匹配 m,k。
第四篇:黑馬程序員C語言教程:帶你淺出python爬蟲框架scrapy二)
帶你深入淺出python爬蟲框架scrapy(二)之前我們學習了scrapy的安裝,接下來我們先簡單的介紹一下使用。
一、創(chuàng)建一個新的Scrapy項目
scrapy startproject itcast 結構如下
│ scrapy.cfg │
└─itcast │ items.py
│ pipelines.py
│ settings.py
│ __init__.py
│
└─spiders __init__.py
這些文件主要是:
? ? ? ? ? ? scrapy.cfg: 項目配置文件
itcast/: 項目python模塊, 呆會代碼將從這里導入 itcast/items.py: 項目items文件 itcast/pipelines.py: 項目管道文件 itcast/settings.py: 項目配置文件 itcast/spiders: 放置spider的目錄
二、定義提取的Item 它通過創(chuàng)建一個scrapy.item.Item類來聲明,定義它的屬性為scrpy.item.Field對象,就像是一個對象關系映射(ORM).我們通過將需要的item模型化,來控制從dmoz.org獲得的站點數據,比如我們要獲得站點的名字,url和網站描述,我們定義這三種屬性的域。要做到這點,我們編輯在itcast目錄下的items.py文件,我們的Item類將會是這樣
from scrapy.item import Item, Field class DmozItem(Item): title = Field()link = Field()desc = Field()
三、寫一個Spider用來爬行站點,并提取Items
Spider是用戶編寫的類,用于從一個域(或域組)中抓取信息。
他們定義了用于下載的URL的初步列表,如何跟蹤鏈接,以及如何來解析這些網頁的內容用于提取items。要建立一個Spider,你必須為scrapy.spider.BaseSpider創(chuàng)建一個子類,并確定三個主要的、強制的屬性:
? ? name:爬蟲的識別名,它必須是唯一的,在不同的爬蟲中你必須定義不同的名字.start_urls:爬蟲開始爬的一個URL列表。爬蟲從這里開始抓取數據,所以,第一次下載的數據將會從這些URLS開始。其他子URL將會從這些起始URL中繼承性生成。
? parse():爬蟲的方法,調用時候傳入從每一個URL傳回的Response對象作為參數,response將會是parse方法的唯一的一個參數, 這個方法負責解析返回的數據、匹配抓取的數據(解析為item)并跟蹤更多的URL。from scrapy.spider import BaseSpider
class DmozSpider(BaseSpider): name = “dmoz”
allowed_domains = [“dmoz.org”] start_urls = [ “http://#topics-selectors 這是一些XPath表達式的例子和他們的含義
? ? ? ? /html/head/title: 選擇HTML文檔
元素下面的//div[@class=”mine“]: 選擇所有包含 class=”mine“ 屬性的div 標簽元素
這只是幾個使用XPath的簡單例子,但是實際上XPath非常強大。
為了方便使用XPaths,Scrapy提供XPathSelector 類,有兩種口味可以選擇,HtmlXPathSelector(HTML數據解析)和XmlXPathSelector(XML數據解析)。為了使用他們你必須通過一個 Response 對象
對他們進行實例化操作。你會發(fā)現Selector對象展示了文檔的節(jié)點結構。因此,第一個實例化的selector必與根節(jié)點或者是整個目錄有關。Selectors 有三種方法
? ? ? path():返回selectors列表, 每一個select表示一個xpath參數表達式選擇的節(jié)點.extract():返回一個unicode字符串,該字符串為XPath選擇器返回的數據 re():返回unicode字符串列表,字符串作為參數由正則表達式提取出來
現在我們嘗試從網頁中提取數據
from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector
class DmozSpider(BaseSpider): name = ”dmoz“
allowed_domains = [”dmoz.org“] start_urls = [ ”http://XPathSelector(response)sites = hxs.path('//fieldset/ul/li')#sites = hxs.path('//ul/li')for site in sites: title = site.path('a/text()').extract()link = site.path('a/@href').extract()desc = site.path('text()').extract()#print title, link, desc print title, link
保存抓取的數據
保存信息的最簡單的方法是通過以下命令來保存數據: scrapy crawl dmoz-o items.json-t json 簡單的使用就介紹這了,后面會繼續(xù)為大家說明高級用法。
第五篇:黑馬程序員PHP培訓教程:Linux介紹
Linux介紹
1、計算機資源
計算機資源是由兩部分組成:
硬件資源:鍵盤、顯示器、鼠標、硬盤、內存等等。軟件資源:應用程序,如office、qq等等。
問題:用戶在鍵盤上的操作(打字)為什么會在word文檔中顯示出來? 流程:硬件→操作系統(tǒng)→程序→硬件(顯示器)
操作系統(tǒng):操作系統(tǒng)它是一個特殊的軟件程序(軟件資源的范疇)。
2、常見的操作系統(tǒng)
? Windows 它微軟公司開發(fā)的一款桌面操作系統(tǒng)(閉源系統(tǒng))。版本有dos、win98、win NT、win XP、win
7、winvista、win
8、win 10。服務器操作系統(tǒng):winserver 2003、winserver 2008、winserver 2012。Mac 蘋果公司開發(fā)的一款操作系統(tǒng)(閉源系統(tǒng)),目前最新的版本是IOS10。界面風格還是不錯。對于系統(tǒng)底層的優(yōu)化也是很好。Linux Linux是一個開源的操作系統(tǒng),目前是市面上占有率極高的服務器操作系統(tǒng)。目前其分支有很多。Unix Unix是Linux操作系統(tǒng)的前身,Unix時間戳是指1970年1月1日0時0分0秒,1970年是Unix的時間元年,也就是Unix誕生的年份。?
3、為什么要使用Linux操作系統(tǒng)
之所以大部分的公司開發(fā)的時候都是使用Linux操作系統(tǒng),取決于兩個特性:
穩(wěn)定性:取決于系統(tǒng)的底層架構,一般情況下Linux系統(tǒng)能做到很長時間不關機一點也不卡頓;
安全性:開源系統(tǒng),所有人都可以貢獻自己的源代碼為Linux系統(tǒng)打補丁; 開源一定意味著免費么?
開源是指免費的將代碼開放,實質上是進行服務收費。RedHat它是Linux系統(tǒng)的一個分支,服務收費價格大約是10萬$/年。
4、Linux名字含義
狹義:是指有Linux作者(Linux之父)李納斯(linus)所編寫的一段代碼; 廣義:是指目前在各大公司所被廣泛使用的Linux多種分支的集合。
Linux發(fā)展歷史 Unix操作系統(tǒng)
? 1968年Multics項目
MIT、Bell實驗室、美國通用電氣有限公司走到了一起致力于開發(fā)Multics項目。到后期由于開發(fā)進度不是很好,MIT和Bell實驗室相繼離開這個項目的開發(fā),最終導致項目擱淺。1970年UNIX誕生
當時在開發(fā)Multics項目的時候,實驗室中有一個開發(fā)成員開發(fā)了一款游戲(travelspace:遨游太空),因為兩個實驗室相繼離開項目開發(fā),導致這名開發(fā)人員沒法玩游戲,后來他提議組織人員重新在Multics項目之上重新的開發(fā),也就出現了1970年的Unix。當時Unix操作系統(tǒng)是使用的匯編語言開發(fā)的。1973年用C語言重寫UNIX 因為匯編語言有一個最大的局限性:對于計算機硬件過于依賴。導致移植性不好,所以后期在1973年使用了C語言對其進行重新開發(fā)。1975年Bell實驗室允許大學使用UNIX 1975年,bell實驗室允許大學使用unix操作系統(tǒng)用于教學作用,而不允許用于商業(yè)用途。?
Linux操作系統(tǒng)
? 人物
Linus
Linux的開發(fā)作者,李納斯·托瓦茲。荷蘭在校大學生。? 1991年
0.0.1版本
李納斯當時學校使用的就是Unix操作系統(tǒng),然后其對系統(tǒng)的底層代碼進行了修改,放到了學校為學生開放的網站上,原先他把文件命名寫成了Linus’sUnix,后期網絡管理發(fā)現之后覺得這個名字不好,自己手動的將名字改成Linux。隨后其他同學下載之后發(fā)現這個版本還是挺好用的,隨后都把自己代碼貢獻給李納斯。? 1992年
0.0.2版本 ? 1994年
1.0版本 ? 2003年
2.6版本
上面所說的版本是指Linux的內核版本,不是指分支的發(fā)行版本。
開源文化
Linux是開源的操作系統(tǒng)。所謂開源就是指開放源代碼。
? 人物Stallman 斯特曼
開源文化的倡導人。? 1983年GNU計劃 ? 1985年FSF基金會
? 1990年Emacs、GCC、程序庫
? 1991年 Stallman去找Linus,商談讓Linux加入其開源計劃(GNU計劃)? 1992年GNU/Linux Linux分支
目前分支比較多,常見的有centos、RedHat、烏班圖、debian等等。具體的分支,可以查看【文件】中的Linux分支圖。
![下載黑馬程序員Python教程:Python培訓專家:6個常見面試題[五篇范例]word格式文檔](http://static.xiexiebang.com/skin/default/images/icon_word.png)

文檔為doc格式
聲明:本文內容由互聯網用戶自發(fā)貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發(fā)現有涉嫌版權的內容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。
黑馬程序員PHP培訓教程:GET請求
GET請求 語法:open(get|post,URL地址) PHP頁面......
黑馬程序員PHP培訓教程:AJAX聊天室
AJAX聊天室 設計message表:用來保存聊天信息 獲取最新的聊天記錄 PHP頁面:大于最大聊天編號的記錄肯定是新的聊天記錄 1 2 3 4 5 6 7 8 9......
黑馬程序員PHP培訓教程:同步和異步
同步和異步 req.open(參數傳遞的方法,URL,[true|false]) true:異步:同一個時間點允許多個進程,【默認】 false:同步:同一個時間點只能執(zhí)行一個進程。 HTML代碼 window.onload=......
黑馬程序員PHP培訓教程:Ajax文件上傳
Ajax文件上傳 DOM方式只能獲取字符串類型數據,不能獲取二進制數據。可以通過FormData對象來獲取二進制數據。 PHP頁面 HTML頁面 1 2window.onload=function{ 3 documen......
黑馬程序員PHP培訓教程:發(fā)表聊天記錄
發(fā)表聊天記錄 HTML頁面 function sendMessage{ var frm=document.getElementById('frm'); var fd=new FormData(frm); var req=new XMLHttpRequest; req.open('post......
黑馬程序員PHP培訓教程:Linux安裝-3
Linux安裝-3 第十一步:選擇磁盤類型,默認即可,點擊【下一步】 第十二步:選擇磁盤位置,選【創(chuàng)建新的磁盤】,然后點擊【下一步】 第十三步:選擇磁盤大小,默認20G 第十四步:設置磁盤文......
黑馬程序員PHP培訓教程:同步和異步介紹
什么是AJAX 1999年,微軟公司發(fā)布IE5瀏覽器的時候嵌入的一種技術。起初名字是XMLHttp,直到2005年,google公司發(fā)布了一個郵箱產品gmail,內部的gtalk聊天工具有使用ajax技術,該事情......
黑馬程序員PHP培訓教程:Linux目錄介紹
Linux目錄介紹 /bin:存放的是一些二進制文件,但是在Linux中二進制文件是可以被執(zhí)行的。這個目錄中的命令文件是給普通用戶使用(非超級管理員用戶)。 /etc:Linux下所有的配置文件......