唐抉的个人博客

python学习笔记(十二)

字数统计: 5k阅读时长: 21 min
2022/10/19

python语言特点

python语言特点:

  • 开源
  • 免费
  • 跨平台
  • 解析执行

复制=、copy()和deepcopy()

  • 用=复制元素,原object改变,现object也随之改变
  • 用copy()复制object,原object改变,现object不变,若object中包含了list,改变原object的list元素,现object的list元素也随之改变。
  • 用deepcopy()复制object,原object改变,现object的任何元素都不会变。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a#a变b也变,
c = copy.copy(a)#a变c不变,a里的list['a', 'b']变,c也会变
d = copy.deepcopy(a)#a变d不变,a里的list['a', 'b']变,d也不会变
a.append(5)
a[4].append('c')
print(a)
print(b)
print(c)
print(d)
#运行结果如下
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
[1, 2, 3, 4, ['a', 'b', 'c']]
[1, 2, 3, 4, ['a', 'b']]

Python自带的模块

Python有着形形色色爬虫相关的库,以下哪个库Python自带不需要额外下载。A

A.urlib python内置,用于爬虫

B.urlib3 第三方库

C.Requests python内置,用于http

D.lxml 第三方库

extend方法

extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表),添加数据时要用[]把数据括起来。

在Python3中,程序运行结果为: lists = [1, 1, 2, 3, 4, 5, 6] lists.remove(1) lists.extend([7,8,9]) print(lists)。C

A.[2,3,4,5,6]

B.[1,2,3,4,5,6,[7,8,9]]

C.[1,2,3,4,5,6,7,8,9]

D.[2,3,4,5,6,7,8,9]

del方法

将列表内的所有元素均删除,且列表存在,使用del方法

字符串变换

字符串是不可变类型,无法直接修改字符串的某一位字符。replace()函数用于替换字符串,其用法为字符串序列.replace(旧子串, 新子串, 替换次数)

若a = 'abcd',若想将a变为'ebcd',则下列语句正确的是。 D

A.a[0] = 'e'

B.a.replace('a", "e')

C.a[1] = 'e'

D.a = 'e' + "bcd"

divmod()函数

divmod(a,b)函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a//b,a%b)

下面代码的输出结果是 x=10 y=3 print(divmod(x,y))。D

A.(1, 3)

B.3,1

C.1,3

D.(3, 1)

python2与python3除法的区别

在python2中,由于“地板除”的 缘故,每次除完后只剩整数。在python3中的除法是精确计算。

在Python3中,下列程序循环的次数为: n = 1000 while n > 1: print(n) n = n / 2。B

A.9

B.10

C.11

D.无限循环

python2里只有9次,因为500、250、125、62、31、15、7、3、1 。python3里有10次,因为500、250、125、62.5、31.25、15.625、7.8125、3.90625、1.953125、0.9765625。

函数返回值

以下程序的输出结果是 def hub(ss, x = 2.0,y = 4.0): ss += x * y ss = 10 print(ss, hub(ss, 3))。B

A.22.0 None

B.10 None 函数hub设置没有返回值,ss默认为10,hub默认返回done

C.22 None

D.10.0 22.0

python查找顺序

当使用import导入模块时,按python查找模块的不同顺序可划分为以下几种: ①环境变量中的PYTHONPATH ②内建模块 ③python安装路径 ④当前路径,即执行python脚本文件所在的路径 其中查找顺序正确的一组是。C

A.①④②③ B.②①④③ C.②④①③ D.①②③④

range范围

range(n)实际上是取值0~n-1。

sum([i*i for i in range(3)])的计算结果是。B

A.3

B.5

C.2

D.14

readlines函数

read(size)方法,每次最多读取size个字节的内容。不需要通过close函数关闭文件。

关于以下代码的描述,错误的选项是()with open( ' abtxt ' , ' r+' ) as f:lines = f.readlines() for item in lines:print(item)。A

A.执行代码后,abc.txt文件未关闭,必须通过close()函数关闭

B.打印输出abc.txt文件内容

C.item是字符串类型

D.lines是列表类型

lambda表达式

  • lambda只是一个表达式不是代码块,而def是一个语句。
  • 在内部只能包含一行代码,自动返回最后一个表达式的值,没有return,参数列表不需要用括号。
  • if、for或print语句不能用于lambda中,不能共享给其他程序调用。

关于匿名函数叙述正确的是()。ABC

A.lambda只是一个表达式,函数体比def简单很多

B.lambda的主体不是一个代码块

C.lambda函数只能写一行

D.可以访问全局变量和函数体以外的变量

运算符优先级

  1. 括号:()
  2. 幂运算:**
  3. 按位取反:~
  4. 正号、负号:+、-
  5. 乘除、取模、取整除:*、/、%、//
  6. 加、减:+、-
  7. 左移、右移:<<、>>
  8. 按位“与”:&
  9. 按位“异或”、按位“或”:^、|
  10. 比较运算符:<=、<、>、>=
  11. 等于、不等于:==、!=
  12. 赋值运算符:=、%=、/=、//、//=、-=、+=、*=、**=
  13. 身份运算符:is、is not
  14. 成员运算符:in、not in
  15. 逻辑运算符:and、or、not

Python中,运算符由高到低为。C

A.逻辑运算符>比较运算符>赋值运算符>位运算符

B.位运算符>赋值运算符>比较运算符>逻辑运算符

C.位运算符>比较运算符>赋值运算符>逻辑运算符

D.逻辑运算符>赋值运算符>比较运算符>位运算符

下列哪些语句在Python中是合法的。ACD

A.x = y = z=1

B.x =(y = z+ 1)

C.x,y = y,x

D.x+= y

for i,x in enumerate() 函数

enumerate是枚举的意思,把元素一个个列举出来,它返回的是元素以及对应的索引。例如:

1
2
3
4
5
6
7
8
9
>>> line = [1,2,3,4,5]
>>> for i,j in enumerate(line):
... print(i,j)
...
0 1
1 2
2 3
3 4
4 5

在Python3中,下列程序运行结果为: lists = [1, 2, 3, 4] tmp = 0 for i,j in enumerate(lists): tmp += i * j print(tmp) 。A

A.20 tmp=0+1*2+2*3+3*4=2+6+12=20

B.30

C.100

D.None

replace函数

replace函数不会改变原string的内容。

执行以下程序,输入”93python22”,输出结果是 w = input("请输入数字和字母构成的字符串:") for x in w: if '0'<= x <= '9': continue else: w.replace(x,'') print(w)。C

A.python9322

B.python

C.93python22

D.9322

floor函数

math.floor(x)函数用于将x向下取整,它接收数字/数字表达式并返回不大于数字的最大整数值math.ceil(x)函数用于x向上取整,它接收数字/数字表达式并返回最接近的数字最小整数值

以下代码运行结果是什么?0import math print math.floor(5.5)。A

A.5

B.5.0

C.5.5

D.6

按位与&计算

python 中 & (按位与) 和 | (按位或) 是把 2个数据转为二进制然后在做相应的计算。如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
a = 10  # 10的二进制为1010
b = 18 # 18的二进制为10010
"""
按位与运算符:
& : 如果两个相应位都为1,则该位的结果为1,否则为0
01010
10010
计算的结果为:
00010
把二进制00010转10进制结果为2,所以下面的打印结果应该为2
"""
print(a & b) # 打印结果为2


"""
按位或运算符:
| : 只要对应的二个二进位有一个为1时,结果位就为1
01010
10010
计算的结果为:
11010
把二进制11010转10进制结果为26,所以下面的打印结果应该为26
"""
print(a | b) # 打印结果为26
"""
按位异或运算符:
^ : 当两对应的二进位相异时,结果为1
01010
10010
计算的结果为:
11000
把二进制11000转10进制结果为24,所以下面的打印结果应该为24
"""
print(a ^ b) # 打印结果为24
"""
按位取反运算符:
~ : 对数据的每个二进制位取反,即把1变为0,把0变为1
01010
计算的结果为:
10101
把二进制10101转10进制结果为-11,所以下面的打印结果应该为-11
"""
print(~a) # 打印结果为-11

下面描述正确的是。ABC

A. 在python中逻辑与运算符不能写作&&,要写作and

B.&是两个数字按二进制位作与运算的操作符

C.3&2的结果为2 00011 00010=>00010=2

D.3&3的结果为0 00011 00011=>00011=3

python保留字符

以下哪些是Python中的保留字符?ABCD

A.def

B.global

C.finally

D.yield

可变数据类型和不可变数据类型

可变数据类型:list(列表)、dict(字典)、set(集合)

不可变数据类型:数值类型(int、float、bool)、string(字符串)、tuple(元组)

下列选项属于不可变类型的是。CD

A.列表

B.字典

C.元组

D.字符串

python内置函数

内置函数
Aabs()aiter()all()any()anext()ascii() Bbin()bool()breakpoint()bytearray()bytes() Ccallable()chr()classmethod()compile()complex() Ddelattr()dict()dir()divmod() Eenumerate()eval()exec() Ffilter()float()format()frozenset() Ggetattr()globals() Hhasattr()hash()help()hex() Iid()input()int()isinstance()issubclass()iter() Llen()list()locals() Mmap()max()memoryview()min() Nnext() Oobject()oct()open()ord() Ppow()print()property() Rrange()repr()reversed()round() Sset()setattr()slice()sorted()staticmethod()str()sum()super() Ttuple()type() Vvars() Zzip() **_**__import__()

以下属于python3内置函数的是。ABCD

A.str()

B.sum()

C.zip()

D.sorted()

python数据类型

python中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Dict(字典)
  • Tuple(元组)
  • Set(集合)

其中Number里包含了int、float、bool、complex(复数)。在python3中只有一种整数类型int,没有python2中的长整型long。

以下哪些是Python的数字类型。ACD

A.long

B.double

C.float

D.complex

控制循环语句

continue:将控制返回到循环的开始

break:将控制带出循环

pass:编写空循环,除此之外还用于空的控制语句、函数和类

Python中,循环控制语句有。BCD

A.goto

B.break

C.continue

D.pass

__name__

__name__是python的一个内置类属性,它存储模块的名称。

python模块既可以被调用,也可以独立运行。而调用时__name__存储的是py文件名(模块名称),独立运行时存储的是__main__。其作用主要是用来区分当前模块是独立运行还是被调用。

关于__name__的说法,下列描述正确的是。BCD

A.它是Python提供的一个方法

B.每个模块内部都有一个__name__属性

C.当它的值为’main‘时,表示模块自身在运行

D.当它的值不为’main’时,表示模块被引用

json.dumps()与json.loads()

json.dumps():将python对象编码成Json字符串

json.dump():将python对象转化成Json储存到文件中

json.loads():将Json字符串解码成python对象

json.load():将文件中的json格式转化成python对象提取

运行下列代码段,输出结果为True的是( )。BD

1
2
3
4
import json
data='{"one":"1","two":"2","three":"3","four":"4","five":"5"}'
text = json.loads(data)
print(type(data)==type(text))
1
2
data='{"one":"1","two":"2","three":"3","four":"4","five":"5"}'
print(type(data)==type('123'))
1
2
3
4
import json
data='{"one":"1","two":"2","three":"3","four":"4","five":"5"}'
text = json.loads(data)
print('1' in text)
1
2
3
4
import json
data = '{"one":"1","two":"2","three":"3","four":"4","five":"5"}'
text = json.dumps(data)
print('1' in text)

类定义体组成

类定义体组成:

  • 成员的控制访问信息(public、protected、private)
  • 数据成员
  • 成员函数

在类的定义形式中,组成了类定义体是。ABC

A.成员的访问控制信息

B.数据成员

C.成员函数

D.私有消息

关于return函数

在python中,关于函数return语句的正确说法是。ACD

A.return指定函数返回值,用来结束函数

B.在python中return语句只可返回一个值

C.无返回值函数中可以没有return语句

D.如果不给return,函数默认返回None

无返回值函数是指void这一类的函数。

万物皆为对象

容器对象(list、dict、set等)中可以存放任何对象,包括整数、字符串,函数也可以作存放到容器对象中。

Python中函数是对象,描述正确的是。ABCD

A.函数可以赋值给一个变量

B.函数可以作为元素添加到集合对象中

C.函数可以作为参数值传递给其它函数

D.函数可以当做函数的返回值

切片取数

L[0:3]表示从索引0开始取数,直到索引3为止,但不包括索引3的元素。

若输入的字符串str=’asdfgh’,想要输出为’asdfg’,则可以使用以下方法。AC

A.str[:-1]

B.str[:-2]

C.str[:5]

D.str[:4]

下列可以得到字符串'ccc'的Python语句是。ABD

A.cc'+'c'

B.'c'*3

C.'bcccb'[1:3]

D.'bcccb'[1:4]

若a = range(100),以下哪些操作是合法的。ABCD

A.a[-3]

B.a[2:13]

C.a[::3]

D.a[2-3]

函数调用

在模块A导入B模块的函数func(),并执行函数调用,下列写法正确的是。AC A. 导入:import B 调用 B.func() B. 导入:import B 调用 func() C. 导入:form B import func 调用 func() D. 导入:form B import func 调用B. func()

python不能正常启动

python不能正常启动的项有:

  • 拼写错误
  • 错误表达式
  • 缩进错误

只有手动抛出异常才能正常启动。

python的六种进程间通信方式

  • msg_queue(消息队列)
  • pipeline for single duplex(单工管道)
  • pipeline for half duplex(双工管道)
  • name pipeline(命名管道)
  • share memory(共享内存)
  • semaphore(信号量)

在python3中进程之间通信通常可以采用如下哪些方式。ABD

A.Queue

B.Pipe

C.全局变量

D.共享数据

__new____init__的区别

相同点:

  • 两者都是python面向对象语言的函数。

不同点:

  • __new__是在实例创建之前被调用的,是个静态方法。因为它的任务是创建实例然后返回该实例对象。
  • __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,是一个实例方法。通常用于初始化一个类实例

关于__new____init__的区别,说法正确的是。ABCD

A.__new__是一个静态方法,而__init__是一个实例方法

B.__new__方法会返回一个创建的实例,而__init__什么都不返回

C.只有在__new__返回一个创建的实例时,后面的__init__才能被调用

D.当创建一个新实例时调用__new__,初始化一个实例时用__init__

输入输出总结

单行输入

  • 同一行里空格分隔输入两个数a,b=list(map(int,input().split()))

  • 同一行里逗号分隔输入两个数a,b=list(map(int,input().split(',')))

  • 使用sys模块输入多位数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import sys
    #输入数据,返回一个包含多个字符串的列表a,strip()用于截取掉末尾的换行符
    a=sys.stdin.readline().strip()

    #a中的数据以逗号分隔时,去掉逗号,返回一个包含多个字符串的列表b
    b=list(map(int,a.split(',')))

    #a中的数据以空格分隔时,去掉空格,返回一个包含多个字符串的列表c
    c=list(map(int,a.split()))

    #同一行中输入以空格分隔的两位数n,m
    n,m=list(map(int,sys.stdin.readline().strip().split()))

多行输入

  • 把所有行合在一个列表中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import sys
    list=[]
    list_new=[]
    for line in sys.stdin:
    list_new=line.split()
    list.append(list_new)
    # list.extend(list_new)
    print(list)
    #使用append的输出结果:
    3 2
    [['3', '2']]
    1 5 6
    [['3', '2'], ['1', '5', '6']]
    1 3
    [['3', '2'], ['1', '5', '6'], ['1', '3']]
    #使用extend的输出结果:
    3 2
    ['3', '2']
    1 5 6
    ['3', '2', '1', '5', '6']
    1 3
    ['3', '2', '1', '5', '6', '1', '3']
  • 行数固定且第一行给出,各行独立获取:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import sys
    lines=sys.stdin.readlines()
    n=int(lines[0])
    x1=list(map(int,lines[1].split()))
    x2=list(map(int,lines[2].split()))
    x3=list(map(int,lines[3].split()))
    print(n,x1,x2,x3)
    #运行结果如下:
    输入:
    3
    1 5 6
    1
    8
    windows系统同时按下ctrl+z+enter结束输入
    输出结果为:
    3 [1, 5, 6] [1] [8]
  • 第一行输入人数n和科目m,后续每行录入每人的m科成绩:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    n,m=list(map(int,input().split()))
    lines=[]
    for i in range(n):
    lines.append(list(map(int,input().split())))
    print(lines)
    #运行结果如下:
    输入:
    2 3
    15 32 23
    58 20 69
    输出结果为:
    [[15, 32, 23], [58, 20, 69]]
  • 行数未知时,输入多行数字序列:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    res=[]
    while True:
    try:
    res.append(list(map(int,input().split())))
    except:
    break
    print(res)
    #运行结果如下:
    输入:
    3 63 72 72 1
    1 52 62 5 1
    2 4 7
    5 8 9 3 53 12 74
    windows系统同时按下ctrl+z+enter结束输入
    输出结果为:
    [[3, 63, 72, 72, 1], [1, 52, 62, 5, 1], [2, 4, 7], [5, 8, 9, 3, 53, 12, 74]]

单行输出

同一行里逗号分隔输出两个数:print(str(a)+','+str(b))

多行输出

按行遍历输出多行输入中的元素,注意:不是输出一个list或tuple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
data=[]
while True:
line=sys.stdin.readline().strip()
if not line:
break
tmp=list(map(int,line.split()))
data.append(tmp)
for i in range(0,len(data)):
for j in range(0,len(data[i])):
# print(i[k])
if j==(len(data[i])-1):
print(data[i][j])
else:
print(str(data[i][j])+' ',end="")
#运行结果如下:
输入:
3 63 72 72 1
1 52 62 5 1
2 4 7
5 8 9 3 53 12 74
windows系统同时按下ctrl+z+enter结束输入
输出结果为:
3 63 71 71 1
1 52 62 5 1
2 4 7
5 8 9 3 53 12 74

补充

  • 标准库OS的listdir()方法默认只能列出指定文件夹中当前层级的文件和文件夹列表,而不能列出其子文件夹中的文件。

  • 递归是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题。递推是从简单问题触发,一步步的向前,最终求得问题。

  • 列表对象的extend()方法属于原地操作,调用前后列表对象的地址不变。

  • Python中子类能继承父类全部的公有属性和方法。

  • 使用print()函数可以将信息写入文件:print("Hello, World!", file=open('file.txt', 'w'))

  • 两个特殊的形参关键字形参和命名关键字形参不能设定默认值,或者说它们默认值就是空元组和空字典。

  • 为了限制开头几个参数只能按位置传递,从python3.8开始,正式引入限定位置形参,它们必须放在形参表的最前面,并在后面使用斜杠/(独占一个参数位)与普通形参分隔。如def fun(a,b,c,/,d) #a,b,c成为限定位置形参

  • 默认值可以从限定位置形参或普通形参中的任意一个开始设定,除了命名关键字形参,所有带默认值的形参必须位于五默认值的形参之后。

  • 定义函数时,带有默认值的参数必须出现在参数列表的最右端,任何一个带有默认值的参数右边不允许出现没有默认值的参数。

  • 使用print()函数时,使用\n可以进行换行输出。

  • 表达式[1,3,2] > [1,2,3]的值为True{1,3,2} > {1,2,3}的值为False

  • 使用if '__name__'== '__main__',可以保证模块被导入时,其内的代码不会被执行。

  • 表达式pow(3, 2)==3**2的值为True。其中**代表乘方。

  • 所有的except子句一定在else和finally的前面。

  • Python中break和continue语句不可以单独使用,只能在循环中使用。

  • split()将一个字符串分割为子字符串,然后将结果作为字符数组返回。

CATALOG
  1. 1. python语言特点
    1. 1.1. 复制=、copy()和deepcopy()
  2. 2. Python自带的模块
  3. 3. extend方法
  4. 4. del方法
  5. 5. 字符串变换
  6. 6. divmod()函数
  7. 7. python2与python3除法的区别
  8. 8. 函数返回值
  9. 9. python查找顺序
  10. 10. range范围
  11. 11. readlines函数
  12. 12. lambda表达式
  13. 13. 运算符优先级
  14. 14. for i,x in enumerate() 函数
  15. 15. replace函数
  16. 16. floor函数
  17. 17. 按位与&计算
  18. 18. python保留字符
  19. 19. 可变数据类型和不可变数据类型
  20. 20. python内置函数
  21. 21. python数据类型
  22. 22. 控制循环语句
  23. 23. __name__
  24. 24. json.dumps()与json.loads()
  25. 25. 类定义体组成
  26. 26. 关于return函数
  27. 27. 万物皆为对象
  28. 28. 切片取数
  29. 29. 函数调用
  30. 30. python不能正常启动
  31. 31. python的六种进程间通信方式
  32. 32. __new__和__init__的区别
  33. 33. 输入输出总结
    1. 33.1. 单行输入
    2. 33.2. 多行输入
    3. 33.3. 单行输出
    4. 33.4. 多行输出
  34. 34. 补充