python

1、什么是函数的关键值参数,作用是什么,举例说明。

关键字参数是指使用形式参数的名字来确定输入的参数值。通过此方式指定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。

2、什么是模块?导入模块有哪些方法?

模块是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。

import X

from X import *

from X import a, b, c

3、什么是异常?Python的异常处理机制。

当python检测到一个错误时,解释器就会指出当前流已经无法执行下去,这是就出现了异常,异常就是当程序出现了错误,而这种错误又是在正常控制流以外的。默认异常处理器,try....except...,try...finally...,assert,with…as

4、什么是网络爬虫?爬虫的基本流程。

网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

发起请求:通过url向服务器发起request请求,请求可以包含额外的header信息。

获取响应内容:如果服务器正常响应,那我们将会收到一个response,response即为我们所请求的网页内容,或许包含HTML,Json字符串或者二进制的数据(视频、图片)等。

解析内容:如果是HTML代码,则可以使用网页解析器进行解析,如果是Json数据,则可以转换成Json对象进行解析,如果是二进制的数据,则可以保存到文件进行进一步处理。

保存数据:可以保存到本地文件,也可以保存到数据库。

5、什么是URL。

URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。基本URL包含模式、服务器名称、路径和文件名。

6、什么是多线程?说说线程同步常用的方法。

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,而多线程就是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。Lock(),RLock(),Semaphore(),Condition(),Event()

7、什么是进程、线程?

进程是操作系统中正在执行的不同应用程序的一个实例。

线程是进程中的一个实体,是被操作系统独立调度和分派处理器时间的基本单位。

8、面向对象程序设计的特点?

封装性、继承性、多态性

9、正则表达式的findall()函数的作用,匹配规则的设置,返回结果等。

正则表达式对象的findall(string[, pos[, endpos]])方法用于在字符串中查找所有符合正则表达式的字符串并返回列表。

匹配规则:找到所有匹配正则表达式的子串,并将它们作为一个迭代器返回。

10、len()函数的使用。

返回字符串、列表、字典、元组等长度,len(str)

11、Timer线程的功能

Timer是Thread的子类,是一个定时器功能的类,就是几秒钟之后执行某个方法。

7、range()函数的用法

range函数原型:range(start, end, scan)

参数含义:

start:计数的开始位置,默认是从0开始。

end: 计数的结束位置

scan:每次跳跃的间距,默认为1

7、字典和集合的特点:

1.字典采用了键(key)值(value)对的方式存储数据

2.字典中键不能重复,但是值可以

3.字典无序存储,并且运行时是动态调整存储空间

1.可以把集合看作是没有Value的字典,也就是集合的值不可变且不可重复

2.集合是分散存储,跟字典一样hash分布地址

3.允许数学运算

11、文件的基本操作,及不同访问模式的含义。

fo = open("foo.txt", "w")

"r" ,只读模式(默认模式,文件必须存在,不存在则抛出异常)

"w", 只写模式(不可读;不存在则创建;存在则清空内容)

"a",只追加写模式(不可读;不存在则创建;存在则只追加内容)

a,1=

1、Python语言的特点及书写规范。

特点: Python语言是一种面向对象的解释型语言

1、解释型,开源,简单,易学,免费

2. 可扩展性,丰富的库,可移植性,面向对象

3.规范的代码,可读性较强

书写规范:

缩进;注释;每个 import 只导入一个模块,尽量避免一次导入多个模块;语句太长可以在行尾使用续行符’ ’ ’ ’,来表示下面紧接的一行仍然属于当前的语句,也可以使用括号来包含多行内容;使用必要的空格和空行增强代码的可读性;适当使用异常处理结构增加代码的健壮性和可读性以及容错性。

 

a,2=

2、Python标识符的命名规则。

Python的标识符可以由字母、数字和下划线_组成,不能以数字开头; 标识符区分大小写,没有长度限制; 标识符不能使用计算机语言中预留的有特殊作用的关键字; 标识符的命名尽量符合见名知意的原则,从而提高代码的可读性。

 

a,3=

3、Python常用运算符。

1. 算术运算符

和其他大多数的语言一样,python 也有 +(加)、-(减)、*(乘)、/(除)、%(取余)这 5 个运算符,除此之外还有两个特殊的运算符,分别是 //(整除)和 **(幂运算符,或叫乘方运算符)。

2. 比较运算符

和其他大多数的语言一样,python 的比较运算符包括 <、<=、>、>=、==、!=。比较运算符根据表达式的值的真假返回布尔值 True 或 False。

3. 逻辑运算符

逻辑运算符就是我们常说的与、或、非,在 python 里分别表示为 and、or、not。

使用逻辑运算符可以将任意的表达式连接在一起,并得到一个布尔值。

3.赋值运算符。

= 最简单的赋值,简单的说就是用来给变量赋值。+= 加法赋值运算符,一般情况下用来做自增。-=  减法赋值运算符,用来做自减。*= 乘法赋值运算符。/= 除法赋值运算符。%= 取模赋值运算。**= 次方赋值运算。// = 取整除赋值运算 。

4.位运算。

&  将十进制转换为2进制,然后每一位都进行与运算。

| 按位或运算符,也是将十进制先转换为二进制,然后逐位进行或运算后,在转换为十进制,和&一样,只不过每一位都是或运算。

^ 按位异或运算符,将两个数都转换为二进制,两个数的同一位相异时,这一位就为1,相同就为0。

<< 左移动运算位,将准备运算的数从十进制转换成二进制,往左移几位,右边不够的地方用0填。

>> 右移动运算位,将准备运算的数从十进制转换成二进制,往右移几位,如果没地方移了,从右边开始删几位。

 

a,4=

4、字符串切片操作。

slice()函数:第一个参数是:起始位置。第二个参数是:结束位置。第三个参数是:间距、步长。

列表 list:元组列表可以互相转换,list(str) 将tuple转为list。

元组 tuple:元素值不能修改,不能删除。可以使用del语句来删除整个元组。可以进行截取,组合。

tuple(str) 将list转为tuple。

字典 dictionary 。 

 

5、格式化输出。

 

aa,1=

6、Python常用的数据类型有哪些?如何查看数据类型?哪些是可变数据类型?哪些是不可变数据类型?

基本数据类型主要可分为以下几种:1.数字(Number);2.字符串(String);3.列表(List);4.字典(Dictionary);5.元组(Tuple);6.集合(set)。

python里可以通过type()函数来查看数据类型。如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象。

可变:集合 列表 字典。不可变的有:整型,字符串,元组。

 

aa,2=

7、range()函数的用法。

python中range()函数可创建一个整数列表,一般用在for循环中。

range()函数语法: range(start,stop[,step])。 

参数说明:star: 计数从star开始.默认是从0开始;stop: 计数到stop结束,但不包括stop;step: 步长,默认为1。

 

aa,3=

8、字典的特点及常用方法。

特点:字典是一个无序的数据集合,通常输出的顺序和定义的顺序不一致,key-value键-值对,不支持索引和切片,但可通过key值查询values值,key值唯一。

增加:dec[ ‘ key ’] = ‘value’

删除:del dec(‘key’)

删除:dec.pop(‘key’) 返回值是value

清空:dec.clear() 

查看字典的所有key值:dec.keys()

查看字典的所有values值:dec.values()

查字典的key-value值:dec.items()

查看key的value值:dec.get(‘key’)

 

aa,4=

9、集合的特点。

有的可变,有的不可变;元素无次序,不可重复。

集合中的元素不能重复,可作为一种简单高效的元素去重方式。

集合没有索引,它的元素无次序,不是序列。

利用set()和{}建立集合时,集合中的元素必须是不可变的。

利用set()创建的集合是可变集合,set()创建的集合,整体上是可变的,可以增、删;但集合中的元素(个体)是不可变的,不能被修改,且集合中的元素不能是列表、字典等可变类型的对象。

 

aaa,1=

10、函数的定义和调用,如何定义全局变量。

1.函数的定义主要有如下要点:def:表示函数的关键字 • 函数名:函数的名称,调用时根据函数名调用函数。函数体:函数中进行一系列的逻辑计算或是该函数的功能内容。参数:为函数体提供数据。

返回值:当函数执行完毕后,可以给调用者返回数据。

2.函数的调用:重函数体至上而下进行函数操作;调用是运行函数代码的方式;调用时要给出实际参数;实际参数替换定义中的参数;函数调用后得到返回值。

3.定义全局变量:如定义在类或者函数体外,在函数或者类中引用需要用到 global声明;直接在函数或类中定义,需要先执行函数或者类,才能执行输出。

 

aaa,2=

11、文件的基本操作,及不同访问模式的含义。

基本操作:创建文件对象;读或者写(分清读写模式);关闭对象。

不同访问模式的含义:

 

aaa,3=

12、threading中的Timer线程(Thread的子类)的功能。

这个类表示一个动作应该在一个特定的时间之后运行 — 也就是一个计时器。Timer是Thread的子类, 因此也可以使用函数创建自定义线程。

 

aaa,4=

13、字符串相加的结果。

def sum_str(str1):

  len1=len(str1) #首先将字符串str1的长度赋值给len1

  sum = n = 0 #建立一个值为0的空变量sun #建立一个值为0的空变量n

  for i in range(len1): #用i来遍历字符串的长度

    if 49 <= ord(str1[i]) <= 57: #判断字符ascii码是否在数字ascii值范围内

      n = n * 10 #n *= 10

      n = int(str1[i]) + n #n += int(str1[i])

    else:

      sum = n + sum #sum += n

      n = 0

    # 上面6行代码的意思是从0下标开始,遍历字符串,如果是数字,用n加上其数字,

    #执行逻辑是,碰见一个数字,用n加上,如果下一个还是数字,就将上一个数字乘10加这个数字,依次循环

    #比如:连续数字df123asd = ((1*10+2)*10)+3

    #如果不是数字,就将n值加到变量sum中,保存,并且将n重新赋值为0,再次进入for循环,(sun只在碰见字母的时候出现,把数字之前的数字的值收集起来)

    # 下次再碰到数字(满足if条件),循环(if)条件下面的逻辑

  sum = n +sum

  print(sum)

str1 = "b532x2x3c4b5"

sum_str(str1) #调用函数

 

aaaa,1=

14、Python循环有哪些方式?如何退出循环?

while循环:while循环是通过一个条件来控制是否要继续反复执行循环体中的语句。

for循环:for循环是一个计次循环,一般应用在循环次数已知的情况下。通常适用于枚举或遍历序列,以及迭代对象中的元素。

循环嵌套:在Python中,允许在一个循环体中嵌入另一-个循环,这称为循环嵌套。在Python中,for循环和while循环都可以进行循环嵌套。

退出循环:1.可使用while循环让程序在用户在愿意的时不断运行。在其中定义一个退出值,只要用户输入的不是这个,程序就接着运行。2.用break退出:当明确遇到某些条件即退出时使用。当程序执行到break,不管后面直接退出循环。3.在循环中使用continue:当循环中需要跳过一些值时使用。当程序执行到continue,直接跳出本次循环,进入下一次循环。在遇到continue的时候,不管后面的else直接进入下一次while。

 

aaaa,2=

15、面向对象程序设计的特点?

面向对象程序设计方法是一种支持模块化设计和软件重用的编程方法。它把程序设计的主要活动集中在建立对象和对象之间的联系上。面向对象程序设计的特点是抽象、封装、继承、多态。抽象是将同一类事物的共同特点概括出来的过程。在完成抽象后,通过某种语法形式,将数据(即属性)和用以操作数据的算法(即方法)捆绑在一起,在形式上写成一个整体(类),这个过程就叫作封装。继承就是在编写一个类的时候,以现有的类作为基础,使得新类从现有的类派生而来,从而达到代码扩充和代码重用的目的。多态则是指不同种类的对象都具有名称相同的行为,而具体行为的实现方式却有所不同。

 

aaaa,3=

16、什么是进程、线程?

1.进程是系统中正在运行的一个程序,程序一旦运行就是进程。进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。

2.线程是进程的一个实体,是进程的一条执行路径。线程是进程的一个特定执行路径。当一个线程修改了进程的资源,它的兄弟线程可以立即看到这种变化。

3.关系和区别:一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。线程与进程的一个主要区别是,统一进程内的一个主要区别是,同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时,每个线程还拥有自己的寄存器和栈,其他线程可以读写这些栈内存。

 

aaaa,4=

17、正则表达式的findall()函数的作用,匹配规则的设置,返回结果等。

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

findall(pattern,string)

pattern.findall(string)

pattern : 匹配模式   string : 待匹配的字符串

 

b,1=

18、len()函数的使用。

1:作用:返回字符串、列表、字典、元组等长度;2:语法:len(str);3:参数:str:要计算的字符串、列表、字典、元组等;4:返回值:字符串、列表、字典、元组等元素的长度。

 

b,2=

19、lambda函数的使用。

lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。

a = lambda x,y,z:(x+8)*y-z

print(a(5,6,8))

 

b,3=

20、socket库的作用。

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket通常被叫做“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。python中socket模块为操作系统的socket实现提供了一个python接口。

 

b,4=

21、什么是函数的关键值参数,作用是什么,举例说明。

关键字参数是指使用形式参数的名字来确定输入的参数值。通过该方式指定实际参数时,不再需要与形式参数的位置完全一致。只要将参数名写正确即可。这样可以避免用户需要牢记参数位置的麻烦,使得函数的调用和参数传递更加灵活方便。

 

bb,1=

22、什么是模块?导入模块有哪些方法?

模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。

方法:1、导入整个模块:一般格式为:import 模块名。

2、与form联用导入整个模块:一般格式为:form 模块名 import* 这种方式导入模块后,调用模块中的函数或类,仅使用函数名或类名,代码简洁,但可读性差,不容易理解。

3、与form联用导入一个或多个对象:一般格式为:form 模块名 import 对象1[,对象2[,对象…]]

这种方式只导入模块中的一个或多个对象,调用模块中的对象时,仅使用对象名。

4.import 模块名 as 别名

5.from 模块名 import 功能名 as 别名

 

bb,2=

23、什么是异常?Python的异常处理机制。

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行,运行期检测到的错误被称为异常。

1、默认异常处理器。 2、try....except.... 3、try....except....finally  

4、try...finally.... 5、Assert 6、with...as

 

bb,3=

24、什么是网络爬虫?爬虫的基本流程。

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。

基本流程:发起请求 => 获取响应内容 => 解析数据 => 保存数据。

 

bb,4=

25、什么是URL。

URL是Uniform Resource Location的缩写,译为“统一资源定位符”。通俗地说,URL是Internet上用来描述信息资源的字符串zhi,主要用在各种客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

 

bbb,1=

26、什么是多线程?说说线程同步常用的方法。

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有acquire方法和 release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和 release方法之间。

 

bbb,2=

27、编写函数,接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并以元组形式返回结果。

def getNum(a):

    c=d=e=f=0

    for row in a :

        if 'A'<=row and row<='Z':

            c=c+1

        elif 'a'<=row and row<='z':

            d=d+1

        elif '0'<=row and row<='9':

            e=e+1

        else:

            f=f+1

    return (c,d,e,f)

a=input()

print(getNum(a))

 

bbb,3=

28、定义一个类,创建属性(包括共有属性和私有属性)和方法,并实例化对象完成相关操作。

属性和类的具体使用方法

def __init__(self):

self.变量名1 = 值1 # 定义一个公有属性

self.__变量名2 = 值2 # 定义一个私有属性

def 方法名1(self):# 定义一个公有属性

pass

def __方法名2(self):# 定义个私有方法

Pass

 

bbb,4=

29、对一个列表里的数据用冒泡法实现排序。

list = [3, 5, 2, 1, 8, 4]

n= len(list)

for j in range(n-1):

  for x in range(n-1):

    if list[x] < list[x+1]:

      t = list[x]

      list[x] = list[x+1]

      list[x+1] = t

print(list)

 

bbbb,1=

30、列表的切片,常用方法(排序)

列表切片是处理列表的部分元素,也就是把整个列表切开。

[start:end:step]

start:起始索引,从0开始

end:结束索引,但是end-1为实际的索引值

step:步长,步长为正时,从左向右取值。步长为负时,反向取值

1. 利用切片,根据位置信息提取列表中的元素

2. 利用切片逆序列表

3. 利用切片插入多个元素

4. 利用切片复制列表

list = [12, 35, 99, 18, 76]

list1 = list[起始位置:结束位置:步长] -1代表从末尾开始

从头切到尾 list1 = list[::]

从尾切到头 list1 = list[::-1]

print(list1)

排序方法sort()

list.sort

 

bbbb,2=

31、分支语句的语法规则及应用。

(1)if语句

if语句也是最简单的判断语句,可以单独使用,应用于只需要判断出所需结果的情况。

(2)if...else语句

if...else语句应用于只需要判断出两种结果的情况。

(3)if...elif...else语句

if...elif...else语句应用于需要判断出三种结果及以上的情况。

 

bbbb,3=

32、列表推导式。

[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

list_b = [b for b in range(5)]

print(list_b)

[0, 1, 2, 3, 4]

 

qb,1=

简单解释Python中以下划线开头的变量名特点

答:在Python中,以下划线开头的变量名有特殊的含义,尤其是在类的定义中。用下划线作为变量前缀和后缀来表示类的特殊成员:

1._xxx:这样的对象叫做保护变量,不能用'from module import *'导入,只有类对象和子类对象能访问这些变量;

2.__xxx__:系统定义的特殊成员名字;

3.__xxx:类中的私有成员,只有类对象自己能访问,子类对象也不能访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。Python中没有纯粹的C++意义上的私有成员。

 

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有 acquire 方法和 release 方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire 和 release 方法之间。

 

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

findall(pattern,string)

pattern.findall(string)

pattern : 匹配模式 string : 待匹配的字符串

 

就是在形式参数中必须要提供”传递参数名=传递参数值”

 

定义一个函数: def 函数名():

调用一个函数: 函数名()

定义一个全局变量: global 变量名

 

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

 

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

 

列表——list:类型相同的元素,可以改变元素的值,即可进行增删改查操作。用中括号表示[num1,num2,num3]

元组——tuple:和列表功能相似,但不能改变其元素的值,即不可以进行增删改的操作,只能执行查询操作。用小括号表示(num1,num2,num3)

字典——infor:类型不同的元素,由键值对组成,与列表一样可以进行增删改查。用大括号表示{key1:value1,key2:value2,key3:value3}

列表中的元素可以是元组和字典。

另外,在python中,大部分参数是不可以被修改的,如字符串,数字,元组,而列表和字典中的内容是可以被修改的,所以在字典中,列表和字典是不可以被当作key值的

 

列表中使用“+ ”和append()函数的区别?速度如何?并列举实例。

答:append(): 可添加任何对象,但无论是什么对象,统统算一个元素在列表末尾添加;原地修改列表,不会引起id的变化;

+ : 只能执行列表之间的操作;会拷贝成一个新对象,引起id的变化;

append()的添加速度比+快

 

采面向对象的方法,构建一个交通工具类(至包含颜色和品牌两个属性),然后构建一个其派生出的子类: 小汽汽类(除了继承自基类的属性,包含排量属性) ;并通过重载(写)的方法在每个类里面实现一个输出当前对象属性的方法display () ;最后构建几个小汽车类的对象,并将其放入一个列表中,然后通过在循环中调用display () 方法输出此列表中每个对象的属性。

   class Vechicle:

    def __init__(self,brand,color):

        self.brand = brand

        self.color = color

    def display(self):

        print("这个交通工具颜色是" + self.color)

        print("这个交通工具牌子是" + self.brand)

class Car(Vechicle):

 

    def __init__(self,brand,color,displacement):

        Vechicle.__init__(self,brand,color)

        self.displacement = displacement

    def display(self):

        print("这个汽车的颜色是" + self.color)

        print("这个汽车的牌子是" + self.brand)

        print("这个汽车的排量是" + self.displacement)

 

C = []

c1 = Car('a','red','1.0')

C.append(c1)

c2 = Car('b','red','2.0')

C.append(c2)

for i in C: 

    i.display()

 

标识符可以由字母数字和下划线组成,不能以数字开头.不能和关键字重名,区分大小写,单个单词都是用小写字母

如果标识符有多个单词使用驼峰命名法

 

什么是模块?导入模块有哪些方法?包含Python代码的源文件(通常包含用户自定义的变量、函数和类),其扩展名为.py。常用的有三种方式,分别为

import 模块名 [as 别名]

lfrom 模块名 import 对象名[ as 别名]

lfrom math import *

 

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。

准备工作 => 请求数据 => 解析数据 => 保存数据

 

是一种解释性、交互式、面向对象、跨平台语言

 

slice()函数 第一个参数是:起始位置

第二个参数是:结束位置

第三个参数是:间距、步长

列表 list 元组列表可以互相转换 list(str) 将tuple转为list

元组 tuple 元素值不能修改 ,不能删除

可以使用del语句来删除整个元组

可以进行截取,组合

tuple(str) 将list转为tuple

字典 dictionary  

 

元组是小括号

列表是中括号

字典是大括号,元素由键值对组成

元组定义好之后便不可以对其进行改变,不可以增加修改删除等,通常存储不同类型的数据

列表使用频率最高,可以进行增加修改删除等操作,通常存储相同类型的数据

字典与元组、列表不同的是不可以有重复的key,元素存储没有顺序。

 

1、缩进

2、注释

3、每个 import 只导入一个模块,尽量避免一次导入多个模块

4、语句太长可以在行尾使用续行符’ ’ ’ ’,来表示下面紧接的一行仍然属于当前的语句,也可以使用括号来包含多行内容

5、使用必要的空格和空行增强代码的可读性

6、适当使用异常处理结构增加代码的健壮性和可读性以及容错性

 

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

 

def Sorted(v):

    t = v[::]

    r = []

    while t:

        tt = min(t)

        r.append(tt)

        t.remove(tt)

    return r

 

简述面向对象程序设计的三个特征:封装,继承,多态

 

threading中的Timer线程(Thread的子类)的功能。

设置定时器

 

编写函数,接收一个字符串,分别统计大写字母、小写母、数字、其他字符的个数,并以元组形式返回结果。

s = input('请输入一个字符串:\n')

lower = []

capital = []

digit = []

others = []

for i in s:

    if i.islower():

        lower.append(i)

    elif i.isupper():

        capital.append(i)

    elif i.isdigit():

        digit.append(i)

    else:

        others.append(i)

print('小写字母的个数:{}'.format(len(lower)))

print('大写字母的个数:{}'.format(len(capital)))

print('数字的个数:{}'.format(len(digit)))

print('其他字符的个数:{}'.format(len(others)))

print('小写字母为:', tuple(lower))

print('大写字母为:', tuple(capital))

print('数字为:', tuple(digit))

print('其他字符为:', tuple(others))

 

open(file , mode) 打开一个文件 ; close()关闭一个文件

read([size])从文件中读取指定字节数

write(str) 将字符串写入文件,返回的是写入的字符长度

File: 必需 文件路径 

Mode : 文件打开模式 没有文件都会自动创建

r :只读的方式打开 rb : 以二进制的格式打开一个文件用于只读   

w : 只写的方式打开 wb: 以二进制的格式打开一个文件用于只写

a :打开一个文件用于追加 ab:以二进制格式打开一个文件用于追加

 

编写程序,在D盘根目录下创建一个文本文件test.txt,并向其中写入字符串hello world。

答:

fp = open(r’D:\test.txt’, ‘a+’)

print(‘hello world’, file=fp)

fp.close()

 

阅读下面的代码,并分析假设文件“D:\test.txt”不存在的情况下两段代码可能发生的问题。

代码1:

>>> try:

 fp = open(r'd:\test.txt')

 print('Hello world!', file=fp)

finally:

 fp.close()

代码2:

>>> try:

 fp = open(r'd:\test.txt', 'a+')

 print('Hello world!', file=fp)

finally:

 fp.close()

答:

假设文件“D:\test.txt”不存在,那么第一段代码会抛出异常,提示fp没有定义;第二段代码执行正常。原因是第二段代码使用内置函数open()打开指定文件时如果不存在则会创建该文件,从而不会抛出异常。

 

线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执

 

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行,运行期检测到的错误被称为异常。

1.内部抛出异常(try-except)2.主动抛出异常(raise)3.自定义异常(继承系统异常类)4.断言assert条件

异常处理机制: try...except... try...except...finally

try...finally finally语句无论如何 都要执行

异常和错误有什么区别?(异常是指因为程序执行过程中出错而在正常控制流以外采取的行为。严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而访问不存在的对象,或者试图访问不存在的文件,等等。)

简单解释Python中短字符串驻留机制?(对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享改副本。)

 

特点:字典是一个无序的数据集合,通常输出的顺序和定义的顺序不一致,key-value键-值对,不支持索引和切片,但可通过key值查询values值,key值唯一

增加: dec(‘key’ , ’value’)

删除: del dec(‘key’)

删除: dec.pop(‘key’) 返回值是value

popitem删除最后一个key-value值对

item = dec.popitem()

清空: dec.clear() 

查看字典的所有key值 : dec.keys()

查看字典的所有values值: dec.values()

查字典的key-value值: dec.items()

查看key的value值: dec.get(‘key’)

 

简单解释TCP和UDP协议的区别,他们分别用于哪些场合:输控制协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由IETF的RFC 793说明。在简化的计算机网络OSI模型中,它完成运输层所指定的功能。

与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。   

 

UDP 适用于不需要 TCP 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。 UDP 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。

 

统一资源定位系统,专为标识Internet网上资源位置而设的一种编址方式。

 

1.设计一个课程类,包括课程编号、课程名称、任课教师、上课地点等属性,把上课地点设为私有,增加属性初始化方法和显示课程信息的方法。

class Class:

    def __init__(self,numble,name,tea,place):

        self.numble = numble

        self.name = name

        self.tea = tea

        self.__place = place

def outclass(self):

        return '课程编号{}、课程名称{}、任课教师{}、上课地点{}。'.format(self.numble,self.name,self.tea,self.__place)

a = Class(1,'python','老师','学校')

print(a.outclass())

 

编写程序,生成包含1000个100到200之间的随机整数,并统计每个元素的出现次数。

import random x = [random.randint(100,200) for i in range(1000)]

 

 

list = [7, 4, 3, 67, 34, 1, 8]

for a in range(len(list)):

    for b in range(len(list)-a-1):

        if list[b] > list[b+1]:

            list[b+1],list[b]=list[b],list[b+1]

print(list)

 

 

kecheng,5=

1.设计一个课程类,包括课程编号、课程名称、任课教师、上课地点等属性,把上课地点设为私有,增加属性初始化方法和显示课程信息的方法。

class Class:

    def __init__(self,numble,name,tea,place):

        self.numble = numble

        self.name = name

        self.tea = tea

        self.__place = place

def outclass(self):

        return '课程编号{}、课程名称{}、任课教师{}、上课地点{}。'.format(self.numble,self.name,self.tea,self.__place)

a = Class(1,'python','老师','学校')

print(a.outclass())

 

suiji,5=

编写程序,生成包含1000个100到200之间的随机整数,并统计每个元素的出现次数。

import random x = [random.randint(100,200) for i in range(1000)]

 

maopao,5=

list = [7, 4, 3, 67, 34, 1, 8]

for a in range(len(list)):

    for b in range(len(list)-a-1):

        if list[b] > list[b+1]:

            list[b+1],list[b]=list[b],list[b+1]

print(list)

 

qb,2=

1.假设列表对象sList的值为[3, 4, 5, 6, 7,9, 11, 13, 15, 17],那么切片aList[2:7]得到的值是[5, 6, 7, 9, 11]

2.Lock对象有两个状态,分别是locked和 unlocked

3.假设设per为类Person的对象且包含一个私有数据成员“_ _value",那么在类的外部通过对象per直接将其私有数据成员“_ _value”的值设置为3的语句可以写作per._Person__value=3

4.range(1,5)返回一个列表,请写出面的元素1,2,3,4

5.Python标准库socket对Socket进行了二次封装,支持Socket接口的问,大幅度简化了网络程序的开发。

6.Python语句list(range(1,10,3))执行结果为[1,4,7]

7.面对对象程序设计的三要素分别为封装、继承和多态

8.表达式’a’ + ‘b’的值为‘ab’

9.Python语句print(tuple(range(2)), list(range(2)))的运行结果是(0, 1) [0, 1]

10.表达式re.findall(r’x[0-9]x’,’x2x,xyx,x10x,x8x’ )的结果为['x2x', 'x8x']

1.在循环体中使用( break )语句可以跳出循环体。

2.每个模块都有一个(__name__)属性,使程序块只能在模块自身运行时执行。

3.Python内置的集成开发工具是IDLE

4.使用( return )语句可以返回函数值并退出函数。

5.子类通过( super() )可以成功地访问父类的成员。

6.在现有类基础上构建新类,新的类称作子类,现有的类称 (父类)。

7.在Python中,可以使用( class )关键字来声明一个类。

8.线程对象的( join() )方法用来阻塞当前线程,指定线程运行结束或超时后继续运行当前线程。

9.TCP/IP的传输层包含两个传输协议:面向连接的TCP和非面向连接的( UDP )。

10.在列表中查找元素时可以使用(not in)和in运算符。

 

一、填空题

1. Python 使用符号#标示注释;以缩进对齐划分语句块。

2、Python 序列类型包括字符串、列表、元组三种;

字典是 Python 中唯一的映射类型。

3、Python 中的可变数据类型有列表和字典,不可变数据类型有字符串、数字、元组

4、Python 的数字类型分为整数、长整数 、浮点、复数等子类型。

5、Python 提供了两个对象身份比较操作符is和is not 来测试两个变量是否指向同一个对象,也可以通过内建函数type()来测试对象的类型。

6、设 s=‘ abcdefg ’,则 s[3] 值是‘ d’, s[3:5]值‘ de’,

s[:5]值是‘ abcdf ’,s[3:]值是‘defg ’,s[ : :2]值是‘ aceg’ ,

s[::-1]值是‘gfedcba ’,s[-2:-5]值是‘’。

 

二、选择题

1. 下列哪个语句在 Python 中是非法的? 

B、x = (y = z + 1) 

2. 关于 Python 内存管理,下列说法错误的是 

B 、变量无须先创建和赋值而直接使用

3、下面哪个不是 Python 合法的标识符 

B、40XL

4、下列哪种说法是错误的 

A、除字典类型外,所有标准对象均可以用于布尔测试

5、下列表达式的值为True 的是

C、(3,2)< ( ‘ a’, ’b’)

6、Python 不支持的数据类型有 

A、char

7、关于 Python 中的复数,下列说法错误的是 

C、虚部必须后缀 j ,且必须是小写

8、关于字符串下列说法错误的是

B、字符串以 \0 标志字符串的结束

9、以下不能创建一个字典的语句是 

C、dict3 = {[1,2,3]: “uestc ”}

10、下列 Python 语句正确的是 ( )

D 、while True: pass

三、编程题.

1 、Python 如何定义一个函数,并试写一个函数,给定 n,返回 n 以内的斐波那契数列。

 

2、什么是模块,模块是如何导入解释器的,分别有哪几种方法?

并把上题中的斐波那契数列以模块方式导入, 在解释器交互届面调入该函数。

答:当代码量变得相当大的时候, 我们最好把代码分成一些有组织的代码段,前提是保证

它们的彼此交互。这些代码片段相互间有一定的联系 ,可能是一个包含数据成员和方法的 类, 也可能是一组相关但彼此独立的操作函数。这些代码段是共享的,所以 Python允许 " 调入 "一个模块 , 允许使用其他模块的属性来利用之前的工作成果,实现代码重用 . 这个把其他模块中属性附加到你的模块中的操作叫做导入 (import)。那些自我包含并且有组织 的代码片断就是模块 ( module ) 。

如果说模块是按照逻辑来组织 Python 代码的方法 , 那么文件便是物理层上组织模块的方法。 因此 , 一个文件被看作是一个独立模块 , 一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名 .py 。这里我们需要讨论一些关于模块文件结构 的问题。 与其它可以导入类 (class) 的语言不同 , 在 Python 中你导入的是模块或模块属性。

导入方式有: 1, import module name 2 ,from modulename import 模块内对象名

 

3, from modulename import *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值