1、格式化字符串:f”······“
first_name = Bili
last_name = Halidon
full_name = f"{first_name}{last_name}"
print(f"Hello, {full_name.title()}")
2、列表 a = [‘a’, 1, ‘abc’]
(1)添加元素:
append()方法:向列表中添加元素(从后面插入)。a.append(6)
extend()方法:添加多个元素(尾插)。a.exten([8, 9])
insert(x, y):在指定位置插入。 将7插到6和8之间:insert(7, 7)
(2)交换a[1]、a[3]:a[1],a[3] = a[3],a[1]
(3)删除元素:
remove():删除指定元素。a.remove(‘abc’)
pop( ):探出指定索引的元素。b = a.pop(1)
del语句:del a[0]。
(4)改变步长:切片:
list[0: 9: 2],其中2为步长
(5)"+":拼接列表
“*":重复操作符,lists * 3就是把lists复制三份拼到一个列表里。
(6)复制列表 a = b[:]
a = b是引用同一个列表 实验:
a = ['a', 1, "b"]
b = a
c = a[:]
a.append('c')
print(f"a = {a}")
print(f"b = {b}")
print(f"c = {c}")
结果:
a = ['a', 1, 'b', 'c']
b = ['a', 1, 'b', 'c']
c = ['a', 1, 'b']
3、元组a = (1, 2, 3)
解包,取得元组所有值:
li = (1, 2, 3, 4)
a,b,c,d = li
a,*b = li
4、字典: dic = {‘a’:1,‘b’:2}
(1)添加键值对:
dic['c'] = 3
(2)删除键值对:
del dic['c']
(3)遍历键值对:
for key, value in dic():
print(f"{key}:{value}")
(4)遍历所有键:
for i in dic.keys():
print(i)
(5)遍历所有值:
for i in dic.values():
5、函数:
(1)防止函数修改字符串:
使用切片副本。
function_name(list_name[ : ])
(2)传递任意数量实参:
def make_pizza(size, *toppings):······
(3)使用任意数量的关键字实参(键值对):
def build_profile(first, last, **user_info):······
(4)map()函数:放入另一个函数和可迭代对象,其中每个元素都会执行该函数
list = [1,2,3]
def plus(x):
return x+5
mp = map(plus, list)
(5)函数嵌套中,使用nonlocal关键字声明该变量不是一个局部变量:nonlocal x
def funX():
x = 5
def funY():
nonlocal x
x = x+1
return funY()
(6)装饰器:@语法糖
def log(func):
def wapper():
print('是史')
func()
return wapper
@log
def eat( ):
print('开吃')
#相当于log(eat()),使用时注意参数数量一致。
@buffer
@log
def eat():
pass
#相当于buffer(log(eat()))
(7)filter(a, b)函数 :过滤器。
参数a为要过滤出的数据,b为可迭代对象,在b中过滤出a。
temp = filter(None, [1, 0, True]) # 第一个参数为None时将第二个参数(即该数组中)为True的值筛选出来。
结果:[1, True]
(8)匿名函数:func = lambda: 形参:返回值(表达式)
例:
func = lambda a+b : sam
func = a,b,c=10 : a,b,c # 默认参数要写在非默认后面
(9)常见函数
input():注意输入的值为字符串str类型,若要使用数值需要int()强制转换
a = input("输入a的值")
python生成随机数
import random
random.random():返回0到1之间的随机浮点数
random.uniform(a,b):返回a到b之间的随机浮点数
random.randint(a,b):返回一个随机的整数
random.randrange([start, stop, 步长):返回指定递增基数集合中的一个随机数
random.choice(sequence)从 sequence (列表、元组或字符串)中返回一个随机数(若传入的值 sequence 为空,则会引发 IndexError 异常)
random.shuffle(list_name)将列表中顺序打乱
random.sample(squence, K)从指定序列中随机获取 K 个元素作为一个片段返回
格式化字符串:
text = "使用f"
f"{text}:可以以此格式化"
结果:使用f : 可以以此格式化
字符串转化为列表:splite( )方法
citys = '成都、绵阳、自贡'
city_list = citys.split('、') #以逗号、为分割依据
结果:city_list = ['成都'、'绵阳'、'自贡']
6、类:
(1)定义
class dog:
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
print(f"{self.name} is sitting now")
实例:my_dog = dog(‘sam’, 6) 访问属性:my_dog.name
(2)继承:
(一)子类中定义与父类同名的方法或属性会覆盖父类,包括构造方法_ _ init _ _( ),以构造方法为例,为继承父类init的同时增添或修改,需要:
class child(parent):
def _ _ init _ _(self):
def parent._ _ init _ _(self)
或使用super()函数
class ElectrnicCar(Car):
def __int__(self, make, model):
super().__init__(make,model)
(二)多重继承:(慎用)
class child(parent1, parent2):
pass
(三)与类有关内置函数:
(1)issubclass(class, classinfo):若第一个参数class是第二个参数classinfo的子类,则返回True;classinfo可以是类对象组成的元组,只要class是其中任意一个的子类即为True
(2)isinstance(object, classinfo):若object是classinfo或其子类的一个实例,则为True
(3)hasattr(object, name):测试对象object里是否有名为name的属性
(4)getattr(object, name[,default]):返回object的指定属性name的值,若不存在则返回default的内容
(5)setattr(object, name, value):设置对象中指定属性的值
(6)delattr(object, name):删除对象中指定属性的值
(7)property( ):通过属性设置属性
(四)魔法方法:
_ _ init _ _():构造方法,通常用来自定义对象的初始化操作。
7、迭代器:
iter( )方法:对一个可迭代对象调用该方法可获得其迭代器
next()方法:迭代器返回下一个值
8、三目运算:为真结果 if 条件 else 为假结果
print("a比b小") if a<b else print("a大于等于b")
comp = lambda a,b : "a比b小" if a<b else print("a大于等于b")
print(comp(a,b))#结合匿名函数
9、异常:
(一)创建一个Exception对象,设置异常提示信息,通过raise抛出。Exception对象包含所有类型异常。
try:
可能异常的代码
except (异常类型名1, 异常类型名2)as 变量名:
出现异常时执行的代码
try:
可能发生的
except 异常类型:
捕获到异常时执行的代码
else:
无异常时执行的代码
finally:
无论如何都会执行的代码
示例:
def fun():
a = input("psw:")
if len(a) == 6:
return "ojbk"
raise Exception("fuck")#密码长度为6位则没毛病
try:
print(fun())
except Exception as e:
print(e)
(二)常见异常:
(1)AssertionError:断言语句失败;(2)AttributeError:尝试访问未知的对象属性;(3)IndexError:索引超出序列范围(4)KeyError:字典中查找一个不存在的关键字;(5)NameError:尝试访问一个不存在的变量;(6)OSError:操作系统异常;(7)SyntaxError:Python语法错误;(8)TypeError:不同类型的无效操作;(9)ZeroDivisionError:除数为0。
10、文件操作:
(一)打开读取整个文件:open(‘01.txt’, ‘w’)写模式,‘r’读模式,‘r+’读写模式
with open('test.txt') as file01:
content = file01.read
print(content)
(二)with语句:可抽象出文件操作中的try、except等,会自动关闭打开的文件:
try:
with open('data.txt', 'r') as f:
for each_line in f:
print(each_line)#读取整个文件
except OSError as reason:
print(reason)
(三)readline()方法:从文件中读取一整行字符串。还可将整个文件置于一个字符串中读取:list( f )
写入:
with open('data.txt', 'w') as f:
f.write("待写入的数据") #“w”模式下写入会覆盖之前的数据
with open('data.txt', 'a') as f:
f.write("待写入的数据") #“a”模式下才是内容上追加。
(四)python操作excel
使用库:‘xlwings’, xlwings
可以读取 .xls
和 .xlsx
文件,xlwings直接对接apps
4.1.xlwings读取excel文件:
app = xw.App(visible=True, add_book=False) # 程序可见,只打开不新建工作薄
app.display_alerts = False # 警告关闭
app.screen_updating = False # 屏幕更新关闭
wb = app.books.open(xlsx_path)
wb.save() # 保存文件
wb.close() # 关闭文件
app.quit() # 关闭程序
4.2.xlwings获取工作表
sheet = xw.sheets.active # 在活动工作簿(当前正在操作的工作簿)
sheet = wb.sheets.active # 在特定工作簿
4.3.xlwings创建文件
wb = app.books.add()
# 无论是新建还是打开都需要保存工作簿、关闭工作簿、关闭程序,即:
wb.save(path + r'\new_practice.xlsx')
wb.close()
app.quit()
4.4.xlwings获取单元格的值
# 获取单个单元格的值
A1 = sheet.range('A1').value
print(A1)
# 获取横向或纵向多个单元格的值,返回列表
A1_A3 = sheet.range('A1:A3').value
print(A1_A3)
# 获取给定范围内多个单元格的值,返回嵌套列表,按行为列表
A1_C4 = sheet.range('A1:C4').value
print(A1_C4)
4.5.xlwings写入数据
# 写入 1 个单元格
sheet.range('A2').value = '大明'
# 横向写入A1:C1,只能靠存储输入值的列表长度来决定输入到哪一个单元格结束
sheet.range('A1').value = [1,2,3]
# 纵向写入A1:A3
sheet.range('A1').options(transpose=True).value = [1,2,3]
# 写入范围内多个单元格
sheet.range('A1').options(expand='table').value = [[1,2,3], [4,5,6]]
4.6.xlwings调整样式
# 获取颜色
print(sheet.range('C1').color)
# 设置颜色
sheet.range('C1').color = (255, 0, 120)
# 清除颜色
sheet.range('C1').color = None
4.7.xlwings插入图片
sheet.pictures.add(r'C:\\xxx.jpg')
# 也可以给定位置插入
sheet.pictures.add(r'C:\\xxx.jpg', left=sheet.range('A2').left, top=sheet.range('A2').top, width=100, height=100)