[Python习题] 常见题系列一
参考文章:
https://blog.csdn.net/weixin_40862231/article/details/79504455
1. python中is和==的区别 Python中的对象包含三要素:id、type、value。
其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。
is判断的是a对象是否就是b对象,是通过id来判断的。
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
>>>d = {'a':1,'b':2}
>>>dd =d.copy()
>>>dd
{'a': 1, 'b': 2}
>>>dd is d
False
>>>dd == d
True
2. read、readline、readlines的区别 .read() 每次读取整个文件,它通常将读取到的文件内容放到一个字符串变量中,也就是说 .read() 生成文件内容是一个字符串类型.
>>>fopen = open('D:\\test.txt','r')#r以只读方式打开,默认方式
>>>x = fopen.read()
>>>print(x)
hello
123
hello world
>>>type(x)
.readline()每次读取文件的一行,通常也是读取到的一行内容放到一个字符串变量中,返回str类型
>>>fopen = open('D:\\test.txt','r')
>>>x = fopen.readline()
>>>print(x)
hello
>>>print(type(x))
.readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型
>>>fopen = open('d:\\test.txt','r')
>>>x = fopen.readlines()
>>>print(x)
['hello\n', '123\n', 'hello world']
>>>type(x)
3. 创建字典的方法
#使用字典 方法1
>>>dict1 = {'a':1,'b':2}
>>>print(dict1['b'])
2#使用字典 方法2
>>>dict2 = {}
>>>dict2['key1'] = 12
>>>dict2['key2'] = 23
>>>print(dict2)
{'key2': 23, 'key1': 12}
>>>print(dict2['key2'])
23#使用dict()函数 方法3
>>>dict3 = dict(key1=12, key2='world')#key不加引号
>>>print(dict3)
{'key2': 'world', 'key1': 12}
>>>print(dict3['key1'])#key加引号
12#使用dict()函数 方法4
>>>a0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
>>>a0
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
4. *args,**kwargs的使用 当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。
# 1. *args可以当作可容纳多个变量组成的list
def fun_var_args(farg, *args):
print "arg:", farg
for value in args:
print "another arg:", valuefun_var_args(1, "two", 3)#输出
arg: 1
another arg: two
another arg: 3# 2. **kwargs可以当作容纳多个key和value的dictionary
def fun_var_kwargs(farg, **kwargs):
print "arg:", farg
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])fun_var_kwargs(farg=1, myarg2="two", myarg3=3) #输出
arg: 1
another keyword arg: myarg2: two
another keyword arg: myarg3: 3
5. python中match()和search()的区别 re 模块使 Python 语言拥有全部的正则表达式功能。
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None
re.search匹配整个字符串,直到找到一个匹配。
import re
a ='www.baidu.com'
b ='www'
c ='com'
print(re.match(b,a))
print(re.match(b,a).span())
print(re.match(c,a))
print(re.search(b,a).span())
print(re.search(c,a).span())#输出
<_sre.SRE_Match object at 0x00000000027234A8>
(0, 3)
None
(0, 3)
(10, 13)
6. 返回某文件夹中所有文件的全路径
import os
def print_directory(spath):
files_list = os.listdir(spath)
for file in files_list:
print(os.path.realpath(file))print_directory('D:\\BaiduNetdiskDownload')
7. 写出代码中变量的最终值
>>>a0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))
>>>a0
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}>>>a1 = range(10)
>>>a1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]#生成列表>>>a2 = [i for i in a1 if i in a0]
>>>a2
[]>>>a3 = [a0[s] for s in a0] # dictionary循环时默认为key
>>>a3
[1, 3, 2, 5, 4]>>>a4 = [i for i in a1 if i in a3]
>>>a4
[1, 2, 3, 4, 5]
8. 实现Python中list去重 【[Python习题] 常见题系列一】
set()
函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。#方法1
>>>list1 = [1,1,2,2,3,4]
>>>list1 = set(list1)
>>>list1
set([1, 2, 3, 4])
>>>list2 = list(list1)
>>>list2
[1, 2, 3, 4]#方法2
>>>list1 = [1,1,2,2,3,4]
>>>list2 = []
>>>for i in list1:
>>>if i not in list2:
>>>list2.append(i)>>>list2
[1, 2, 3, 4]
9. yield的作用与使用 保存当前运行状态(断点),然后暂停执行,即将函数挂起
将yeild关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用,当使用next()、send()函数让函数从断点处继续执行,即唤醒函数。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
at 0x1022ef630>
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
举个简单的例子,定义一个generator,依次返回数字1,3,5:
def odd():
print('step 1')
yield 1
print('step 2')
yield(3)
print('step 3')
yield(5)
调用该generator时,首先要生成一个generator对象,然后用next()函数不断获得下一个返回值:
>>> o = odd()
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
>>> next(o)
Traceback (most recent call last):
File "", line 1, in
StopIteration
可以看到,odd不是普通函数,而是generator,在执行过程中,遇到yield就中断,下次又继续执行。执行3次yield后,已经没有yield可以执行了,所以,第4次调用next(o)就报错。
基本上从来不会用next()来获取下一个返回值,而是直接使用for循环来迭代
for n in odd():
print(n)
实例:输出斐波那契數列前 N 个数
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'
>>> for n in fib(6):
...print(n)
...
1
1
2
3
5
8
10. lambda函数介绍 lambda函数是匿名函数;
使用lambda函数能够创建小型匿名函数;
该函数省略了用def声明函数的标准步骤。
实例
>>>f = lambda x,y:x+y # 求两个函数的和。 x,y是参数,x+y是函数返回值
>>>f(2,3)
5
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)
- Hive常见问题汇总
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)