Python:
1、常用那些库
os:操作系统接口 ,open(读写一个文件)、os.path(操作文件路径)、fileinput(读取通过命令行给出的所有文件的所有行)、tempfile(创建临时文件和目录)
random:生成伪随机数
math:数学函数 math.ceil(x)(返回X的上限,大于或等于X的最小整数),math.fabs(x)(返回X的绝对值)
gzip:gzip格式的支持
2、import和from import的区别、form import有哪些缺点
一般来说,模块指的是一个py文件,包(package)指的是一个目录。目录中包含了很多.py文件的文件夹,一般还有一个__init__.py文件,通过这种目录的方式管理多个模块
调用模块:
import模块:导入一个模块的全部内容(包含函数、全局变量、类)
from ..import:可从模块中导入需要的函数/全局变量/类
from.. import *:将模块中的所有资源导入过来使用
from ..import *语句与import区别在于:
import导入模块,每次使用模块中的函数都要指定是那个模块
from ...import * 导入模块,每次使用模块中的函数,直接使用函数就可以了;大部分情况下我们的python程序是不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字,而且可读性极其差
举例:各种import方式,调用的方式不一样
import TEST
TEST.run()
import TEST as t
t.run()
from TEST import run
run()
from TEST import *
run()
调用包:
import package:直接导入一个包,则不会导入任何包中的模块,但是会执行包中的__init__.py文件的内容
from package import *:导入__init__.py中的模块,函数和类
import package.module:
import ceshi_import.TEST
ceshi_import.TEST.run()
from package import module:
from ceshi_import import TEST
ceshi_import.TEST.run()
总结:
import的是package,使用时:package.module
import的是module,使用时:module.func_name;module.class_name
import的是package.module,使用时:package.module.func.name
import的时func,class,使用时:func_name,class_name
注意事项:
from ... import *是不能导入保护属性(单下划线开头)和私有属性(双下划线开头)
被导入的文件一般会搭配__name__变量,此变量是一个内置变量,这个变量记录了当前文件(使用__name__变量)是作为模块运行还是主执行文件。一般将调试的代码写在if语句中,用于调试当前py文件中的代码,因为直接运行当前文件,__name__变量的值就是__main__.当外部模块调用的时候,就不会执行if语句中的内容,因为外部模块调用__name__变量的值为模块名
if __name__ == '__main__':
pass
3、string的切片操作
s = [1,2,3,4,5]
s[::-2] = [5,3,1] 表示从最后一个字符开始截取,间隔2个字符取1个
s[:-2] = [1,2,3] 表示从第一个字符开始,到倒数第2个(不包含倒数第2个)
4、re模块
re模块是Python的标准库,是结合正则表达书来实现数据提取,文件操作等操作,从而得到我们想要的数据:
match()函数只检测re是不是在string的开始位置匹配
search()会扫描整个string查找匹配
5、将列表中元素平方有几种方式
s = [1,2,3,4]
1)使用map(),map()是python内置的高阶函数,它接收一个函数int和1个list,把list的每个元素转为int类型,得到1个新的list,map(function,iterable)
def square(num):
return num*num
list = map(square,s)
2)for循环
s1 = []
for i in s:
s1.append(i*i)
3)lambda函数
print(list(map(lambda x:x*x,s)))
6、可变和不可变对象
可变和不可变对象的区别在于对象本身是否可变
可变对象:list(列表),dict(字典)、set(集合)
不可变对象:string(字符串)、tuple(元组)、int、float、bool、frozenset(不可变集合)
7、深拷贝和浅拷贝
深拷贝:即python的copy模块提供的一个deepcopy方法,深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一致的内容,在这个过程中我们对这两个变量中的一个进行任意修改不会影响其他变量
浅拷贝:改变第一层次相互不影响,第二层次就相互影响
python赋值过程中不明确区分拷贝和引用,一般对静态变量的传递是拷贝(传值),对动态变量的传递是引用(传址)
注:对静态变量首次传递也是引用,当需要修改静态变量时,因为静态变量不能修改,所以需要生成一个新的空间存储数据
动态变量:list(列表),dict(字典)、set(集合)
静态变量:string(字符串)、tuple(元组)、int、float、bool、frozenset(不可变集合)
8、代码:数组中查找指定元素,若存在则返回最大索引(重复),不存在则返回-1
s = [1,2,3,4,4,4,5,6,4,4,1]
def search(l,num):
for i in range(len(s)-1,-1,-1):
if s[i] == num:
return i
return -1
print(search(s,0))
9、对字符串统计字母出现个数,并以字符大小排序,然后以字符+出现次数输出,如[asda],输出[a2d1s1]
list = ['a','s','d','a']
def tongji(input_str):
new_str = sorted(set(input_str))
output_str = []
for s in new_str:
count = 0
output_str.append(s)
for i in input_str:
if s == i:
count +=1
output_str.append(count)
return output_str
print(tongji(list))
10、数组中0的元素放在后面,其余位置不变
list = ['1','0','0','2','0','3','0','6','0']
def zero(input_str):
new_list = []
count = 0
for s in input_str:
if s != '0':
new_list.append(s)
else:
count += 1
for i in range(count):
new_list.append('0')
return new_list
print(zero(list))
# 输出:['1', '2', '3', '6', '0', '0', '0', '0', '0']
11、Python语言,定义一个函数,输入一个字符串,判断是不是回文
str = "abbbcbbba"
def huiwen(input_str):
if input_str[0] == input_str[-1]:
if(len(input_str) == 2 or len(input_str) == 1):
print('是回文字符串')
else:
huiwen(input_str[1:-1])
else:
print("不是回文字符串")
huiwen(str)



