第一篇:黑马程序员Python教程:Python培训专家:6个常见面试题
传智播客Python培训专家:6个常见面试题
在面试中,有一定比例是字符串处理以及网络编程那块,当然了肯定还有些其他的问题,下面帮大家找了6道题目,接下来小试牛刀吧!很简单的哦。
第1题:
Q:是否遇到过python的模块间循环引用的问题,如何避免它? A:这是代码结构设计的问题,模块依赖和类依赖 如果老是觉得碰到循环引用可能的原因有几点: 1.可能是模块的分界线划错地方了 2.可能是把应该在一起的东西硬拆开了 3.可能是某些职责放错地方了 4.可能是应该抽象的东西没抽象
总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工
采取办法,从设计模式上来规避这个问题,比如: 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内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为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模块创建aexcel表格-1
python XlsxWriter模块创建aexcel表格-1
安装使用pip install XlsxWriter来安装,Xlsxwriter用来创建excel表格,功能很强大,下面具体介绍:
1.简单使用excel的实例:
#coding:utf-8
import xlsxwriter
workbook = xlsxwriter.Workbook('d:suq estdemo1.xlsx')#创建一个excel文件
worksheet = workbook.add_worksheet('TEST')#在文件中创建一个名为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类创建一个XlsxWriter的Workbook对象,代表整个电子表格文件,存储到磁盘上.add_worksheet():用来创建工作表,默认为sheet1 add_format():创建一个新的格式对象来格式化单元格,例如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):创建一个图表对象,内部是使用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.xiexiebang.com')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.xiexiebang.com worksheet.insert_image('B5','f:1.jpg',{'url':'http://www.xiexiebang.com'})
第三篇:黑马程序员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的安装,接下来我们先简单的介绍一下使用。
一、创建一个新的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 它通过创建一个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创建一个子类,并确定三个主要的、强制的属性:
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 对象
对他们进行实例化操作。你会发现Selector对象展示了文档的节点结构。因此,第一个实例化的selector必与根节点或者是整个目录有关。Selectors 有三种方法
path():返回selectors列表, 每一个select表示一个xpath参数表达式选择的节点.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 简单的使用就介绍这了,后面会继续为大家说明高级用法。
第五篇:黑马程序员PHP培训教程:Linux介绍
Linux介绍
1、计算机资源
计算机资源是由两部分组成:
硬件资源:键盘、显示器、鼠标、硬盘、内存等等。软件资源:应用程序,如office、qq等等。
问题:用户在键盘上的操作(打字)为什么会在word文档中显示出来? 流程:硬件→操作系统→程序→硬件(显示器)
操作系统:操作系统它是一个特殊的软件程序(软件资源的范畴)。
2、常见的操作系统
• Windows 它微软公司开发的一款桌面操作系统(闭源系统)。版本有dos、win98、win NT、win XP、win
7、winvista、win
8、win 10。服务器操作系统:winserver 2003、winserver 2008、winserver 2012。Mac 苹果公司开发的一款操作系统(闭源系统),目前最新的版本是IOS10。界面风格还是不错。对于系统底层的优化也是很好。Linux Linux是一个开源的操作系统,目前是市面上占有率极高的服务器操作系统。目前其分支有很多。Unix Unix是Linux操作系统的前身,Unix时间戳是指1970年1月1日0时0分0秒,1970年是Unix的时间元年,也就是Unix诞生的年份。•
3、为什么要使用Linux操作系统
之所以大部分的公司开发的时候都是使用Linux操作系统,取决于两个特性:
稳定性:取决于系统的底层架构,一般情况下Linux系统能做到很长时间不关机一点也不卡顿;
安全性:开源系统,所有人都可以贡献自己的源代码为Linux系统打补丁; 开源一定意味着免费么?
开源是指免费的将代码开放,实质上是进行服务收费。RedHat它是Linux系统的一个分支,服务收费价格大约是10万$/年。
4、Linux名字含义
狭义:是指有Linux作者(Linux之父)李纳斯(linus)所编写的一段代码; 广义:是指目前在各大公司所被广泛使用的Linux多种分支的集合。
Linux发展历史 Unix操作系统
• 1968年Multics项目
MIT、Bell实验室、美国通用电气有限公司走到了一起致力于开发Multics项目。到后期由于开发进度不是很好,MIT和Bell实验室相继离开这个项目的开发,最终导致项目搁浅。1970年UNIX诞生
当时在开发Multics项目的时候,实验室中有一个开发成员开发了一款游戏(travelspace:遨游太空),因为两个实验室相继离开项目开发,导致这名开发人员没法玩游戏,后来他提议组织人员重新在Multics项目之上重新的开发,也就出现了1970年的Unix。当时Unix操作系统是使用的汇编语言开发的。1973年用C语言重写UNIX 因为汇编语言有一个最大的局限性:对于计算机硬件过于依赖。导致移植性不好,所以后期在1973年使用了C语言对其进行重新开发。1975年Bell实验室允许大学使用UNIX 1975年,bell实验室允许大学使用unix操作系统用于教学作用,而不允许用于商业用途。•
Linux操作系统
• 人物
Linus
Linux的开发作者,李纳斯·托瓦兹。荷兰在校大学生。• 1991年
0.0.1版本
李纳斯当时学校使用的就是Unix操作系统,然后其对系统的底层代码进行了修改,放到了学校为学生开放的网站上,原先他把文件命名写成了Linus’sUnix,后期网络管理发现之后觉得这个名字不好,自己手动的将名字改成Linux。随后其他同学下载之后发现这个版本还是挺好用的,随后都把自己代码贡献给李纳斯。• 1992年
0.0.2版本 • 1994年
1.0版本 • 2003年
2.6版本
上面所说的版本是指Linux的内核版本,不是指分支的发行版本。
开源文化
Linux是开源的操作系统。所谓开源就是指开放源代码。
• 人物Stallman 斯特曼
开源文化的倡导人。• 1983年GNU计划 • 1985年FSF基金会
• 1990年Emacs、GCC、程序库
• 1991年 Stallman去找Linus,商谈让Linux加入其开源计划(GNU计划)• 1992年GNU/Linux Linux分支
目前分支比较多,常见的有centos、RedHat、乌班图、debian等等。具体的分支,可以查看【文件】中的Linux分支图。
文档为doc格式
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至: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:同步:同一个时间点只能执行一个进程。 HTML代码 window.onload=......
黑马程序员PHP培训教程:Ajax文件上传
Ajax文件上传 DOM方式只能获取字符串类型数据,不能获取二进制数据。可以通过FormData对象来获取二进制数据。 PHP页面 HTML页面 1 2window.onload=function{ 3 documen......
黑马程序员PHP培训教程:发表聊天记录
发表聊天记录 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 第十一步:选择磁盘类型,默认即可,点击【下一步】 第十二步:选择磁盘位置,选【创建新的磁盘】,然后点击【下一步】 第十三步:选择磁盘大小,默认20G 第十四步:设置磁盘文......
黑马程序员PHP培训教程:同步和异步介绍
什么是AJAX 1999年,微软公司发布IE5浏览器的时候嵌入的一种技术。起初名字是XMLHttp,直到2005年,google公司发布了一个邮箱产品gmail,内部的gtalk聊天工具有使用ajax技术,该事情......
黑马程序员PHP培训教程:Linux目录介绍
Linux目录介绍 /bin:存放的是一些二进制文件,但是在Linux中二进制文件是可以被执行的。这个目录中的命令文件是给普通用户使用(非超级管理员用户)。 /etc:Linux下所有的配置文件......