Python学习

写在开头:本文是作者在初次学习过程中所做的笔记和记录,涵盖了python入门的绝大多数知识点和整体性的框架,让你对python有个整体框架性的认知,作者才疏学浅,才艺不精,但愿意与大家分享自己的笔记,如发现错误还望大家不吝赐教,点名错误,多多包涵,我也会及时更改错误,如果大家希望获得markdown版笔记,作者也会在后续与大家分享,还请大家多多关注,作者将与大家一同成长

一、基础知识
1.字符串

定义:用‘’或“”括起来的字符

变更大小写:.upper()和.lower()

message = “My name is LiMing”
print(message.upper())

在字符串中使用变量:

name = "liming"
country = "china"
message = f"my name is {name},i come from {country}"#f:format的缩写
print(message)

使用空白:

print("hello \tworld,\n i love python")

删除前后空格:

data = " python "
data = data.strip()#strip():删除空格
print(data)
2.数字

类型:整数和浮点型

3.变量类型的相互转换
a = "3.1415"
b =float(a)#将字符串类型变为小数类型。
#类似:int() str()
4.python的注释
#:一行注释
”“”
多行注释
“”“
二、数据结构
1>列表

1.定义:表达一组值的数据

2.特点:两边用中括号[]括起来,中间用逗号分隔很多值

[1,2,3] 
["老虎","狮子","豹子"]
[]
使用:
animals = [1,2,3]
print(animals)---['1','2','3']
print(type(animals))---<class 'list'>

3.访问:从前往后:0,1,2,…… 从后往前:……-2,-1

animals[-1]   animals[0]

4.变量元素的修改:

1.List是动态的,因此可以通过list[下标] = 新值的方式,覆盖元素内容
2.通过list.append(element)给列表末尾添加元素` animals = ["老虎","狮子","豹子"]  animals.append("斑马")`
3.删除元素:list.remove(element)#按值删除元素

5.列表的排序:list.sort()实现列表元素升序排序;list.sort(reverse=True)实现倒序排序;sorted(list)不修改原来的列表,返回新排序后的列表(新排序后倒序列表:sorted(list,reverse=True))

6.列表的遍历:

list = ["apple","pear","orange"]
for name in list:
	print(fruit)

​ range(返回一个可以被for循环遍历的对象)生成数字链表:

range(1,10,2):1 3 5 7 9

range(1,10) : 1 2 3 4 5 6 7 8 9

for number in range(1,10):
	print(number)

data = range(10)
print(data)--->range(0,10)

data = list(data)#list转换
print(data)--->[0,1,2,3,4,5,6,7,8,9]

7.列表简单统计运算:

max(list):返回列表最大值
min(list):返回列表最小值
sum(list):返回列表值的加和
len(list):返回列表元素的个数

8.列表推导式:

numbers = [x*x for x in range(1,101) if x%2==0]
#返回1~100的所有的偶数平方列表

9.列表的切片:

numbers[start:stop:step]
2:5 [2,3,4]
:6 [0,1,2,3,4,5]
3: [3,4,5,6,7,8,9]#列表大小为10
3:9:2 [3,5,7]
: 所有
2>元组:
类似链表的数据类型,不可变,不可添加删除更新;两个小括号包括,元素间用逗号分隔
student = (101,'xiaoming',20)
支持索引、列表、切片
3>字典:

1.定义:一种表达键值对的数据结构,可根据对应的键key设置和获取对应的值Value

2.语法:

dict = {key:value1,key2:value2}
user = {"id":123,"name":"liming"}
访问字典中的值:
dict[key]可以获取对应的value,key不存在会报错
dict.get(key,default)可以获取对应的value,key不存在返回None(指定默认返回类型:get(key,10),报错返回10)
添加键值对:
使用dict[key] = value的形式,添加键值对(键不存在,则新增键值对,键已经存在,覆盖value)

3.遍历字典:

同时遍历键值对:
dict.items()以列表返回可遍历的(键、值)元组数组,常常用于for遍历

例子:
user = {"id":123,"name":"xiaoming"}
for key,value in user.items():
	print(key,value)
	
dict.keys()以列表返回字典所有键
dict.values()以列表返回字典的所有值

4.字典的嵌套:

将字典存储到列表中,或字典的value是列表,或字典的value是字典


4>集合Set

1.定义:一组无序并且没有重复元素的key集合

2.特点:不支持数字索引和切片

3.用途:判断某个元素是否在集合set中;消除输入数据的重复元素。

4.使用:

创建空集合:s = set()#不能用s = {}因为它生成了dict字典
创建初始化集合方法:s = {1,2,2,4}
创建初始化集合方法:s = set([1,2,2,3])#快速去重

5.支持的方法:

len(set)	#集合的元素个数
for x in set	#集合的遍历
set.add(key)	#新增key,有重复自动去重
set.remove(key)	#删除set
set.clear()	#清空set
x in set   #判断集合是否在set集合中

6.集合推导式:

numbers = range(10)

#一个列表:里面每个数偶数数字的平方
data_list = [x*x for x in numbers if x%2==0]
#一个字典:里面key是偶数数字,value是它的平方,key无序
data_dict = {x:x*x for x in numbers if x%2==0}
#一个集合:每个元素是偶数数字的平方,集合无序
data_set = {x*x dor x in numbers if x%2==0}
三、用户输入与While循环
1.input函数:
name = input("请输入你的名字:")
#函数只会返回字符串,若只想进行数值计算,则需要自己转换in t类型
number = input("输入一个数字")
number = int(number)
2.while循环:
#模拟场景,从互联网的网页上爬取数据
import time
url_todo = ["urll","url2","url3"]
url_success = []

while url_todo:
	new_url = url_todo.pop()
	print("正在爬取URL:",new_url)
	time.sleep(1)
	url_success.append(new_url)
while循环将数据存储到字典
student_grade = {}
while True:
	info = input("请输入学生姓名和成绩,用空格分割:")
	if info == "quit":
		break
	name,grade = info.split()
	grade = int(grade)
	student_grade[name] = grade
四、函数
1.函数的定义:
def print_hello():#需要有小括号,可以放参数
	print("hello")

传入参数与调用:

def introduce(name,gender):#一个或多个
	print(f"大家好,我的名字是:{name}")
	
def introduce1(name,gender,age=6):#默认值,可以写多个,但只能最后放
	print(f"大家好,我的名字是:{name}")
	
调用:
introduce(gender = "男生",name = "xiaoming")
introduce("xiaoming","男生")
introduce("xiaoming",gender="男生")

introduce1("xiaoming","xiaobai")#可以不调用函数
introduce1("xiaoming","xiaobai",5)#也可以传入新值,覆盖默认值
2.函数的返回值:

函数可以具有一个或一组值,将逻辑封装在函数中,可以简化整个程序

students = {
	"xiaoming":{"id":101,"age:18","gender":"boy"},
	"xiaohuang":{"id":102,"age:11","gender":"girl"},
}
函数返回多个值:
def get_student(name):
	if name in students:
		return students[name]["age"],student[name]["gender"]
#可以分开变量接收
age,gender = get_student("xiaohuang")
#可以单个变量接收,这时,info是个元组
info = get_student("xiaoxiaoxiao")
3.将函数放在模块中:

实际开发中,代码会包含在不同文件中,python的代码文件是.py结尾的文件,也叫做模块。

通过python的import语句,可以引入一个模块python代码来使用

举例子:
compute.py文件中,编写add,sub,mul,div四个函数。compute即为模块
新建一个main.py文件,用如下方法可以引入compute.py代码
import compute:然后用compute.add等调用函数
import compute as cp:给模块起个别名,然后用cp.add调用函数
from compute import add,sub:然后直接使用add、sub
from compute import *:然后可以直接使用add、sub等所有函数
4.lambda函数和列表的排序:

lambda函数:匿名函数,函数定义直接使用,不用起名字,用于一些简单的、不会多次重复调用的情形

使用

定义形式:lambda 参数:操作(参数)
定义举例:sum = lambda x,y:x+y
相当于:def func(x,y):
		return x+y
调用举例:sum(1,2)
使用场景:list.sort sorted、map、reduce等的调用需要穿入一个函数作为参数

列表的排序:

列表排序方法1:
list.sort(key=None,reverse=False)
列表排序方法2:
new_list = sorted(iterable,key=None,reverse=False)
其中,key函数,可以穿入一个函数,指定排序元素,对于此函数,用lambda可以简化代码
例子:对学生数据按照成绩进行排序
sgrade = [("xiaoming",89),("xiaozhao",77),("xiaoxiaozhao",99)]
法一:sgrades.sort(key=lambda x:x[1])
法二:new_list = sorted(sgrades,key=lambda x:x[1],reverse=True)
五、面向对象编程
1.面向对象编程是对现实的模拟,面向对象的目的:用代码模拟现实世界的事物和情景,让代码编写组织理解更加容易。

类:描述一类事物,相当于对象模版。对象,一个具体类的实例

初始化类实例:
xiaoming = Student("小明",14)
xiaozhang = Student("小张",17)
xiaozhao = Student("小赵",18)
#使用对象.属性来访问属性;使用对象.方法来调用方法
print(xiaoming.name,xiaoming.age,xiaoming.introduce())
#类代码
class Student:
	def __init__(self,name,age):
		#普通实例变量,每个实例独有
		self.name = name
		self.age = age
	def introduce(self):
		#普通方法
		return f"大家好,我叫{self.name},{self.age}岁了"
2.修改对象的属性:
#在函数外直接用对象名。属性=值
xiaoming = StudentGrade("小明",88,99)
xiaoming.yuwen = 89
xiaoming.shuxue = 96
#用方法修改属性值
xiaoming.update("语文",88)
xiaoming.update("数学",96)
###
class StudentGrade:
	def __init__(self,name,yuwen,shuxue):
		self.name = name
		self.yuwen = yuwen
		self.shuxue = shuxue
		
	def update(self,course,grade)
		if course == "语文":
			self.yuwen=grade
		elif course == "数学":
			self.shuxue = grade

类对象可以放在列表和字典中:

xiaoming = StudentGrade("小明",88,99)
xiaoming = StudentGrade("小明",88,99)
xiaoming = StudentGrade("小明",88,99)

student_list = [xiaoming,xiaozhang,xiaozhao]
for student in student list:
	print(student.name,student.yuwen,student.shuxue)
	
student_dict = {
	"小明":xiaoming,
	"小张":xiaozhang,
	"小赵":xiaozhao,
}
for name,student in student_dict.items():
	print(f"学生{name}的成绩是{student.yuwen},{student.shuxue}")
3.类的继承:

面向对象的机制:例子:先定义父类Car,提供所有汽车都有的能力,然后每个不同的车可以提供自己的特殊方法

父类:
class Car:
	def __init__(self,model,price):
		self.model = model
		self.price = price
		
	def info(self):
		print(f"车型是{self.model}价格是{self.price}万元")

子类:
class OilCar(Car):#用括号方式,指定继承的父类
	def __init__(self,model,price,box_size):
		super().__init__(model,price)#super表示父类对象,父类对象也需要初始化
		self.box_size = box_size
	def add_oil(self,money):
		print(f"老板,加{money}元的汽油")
	def info(self):#用子类覆盖父类方法
		super().info()
		print("我是油车,跑起来比电力汽车动力更足")
		#子类方法和属性中,是可以直接使用父类的方法和属性的
4.将类写到不同模块中:
类型定义在car.py文件中
几种引入另一个文件中类的方法:
import car
my_car = car.Car("路虎",80)
my_car.info()

##
from car import Car
my_car = Car("路虎",80)
my_car.info()
##
import car as c
my_car = c.Car("路虎",80)
my_car.info()
##
from car import *
my_car = Car("路虎",80)
my_car.info()
六、文件处理操作

文本文件的存储和读取。

使用方法:
来自爬虫、用户输入等外部数据,直接存储到文件中并保存
f = open("访客列表.txt",encoding=“utf8”)#若文件有中文,加上编码参数,若显示为乱码,则使用gbk编码
content = f.read()
print(content)
f.close()
每次使用时,从文件读取已保存数据,基于这些数据做处理
每次打开程序,都能读取到之前的数据,实现固化存储的效果
#用with语法读取文件:
with open("访客列表.txt",encoding="utf8") as fin:#给文件对象取名字
	content = fin.read()
	print(content)#无需关闭文件,with自己处理
按行读取数据:
with open("访客列表.txt",encoding="utf8") as fin:
	for lint in fin:
	#默认结尾有换行符,有两种去除换行符的方法
		line = line[:-1]#更好
		line = line.rstrip()
		print(line)
with open("访客列表.txt",encoding="utf8") as fin:
	lines = fin.readlines()#把所有行读取到列表
	print(lines,type(lines))

文本文件写出。

with open("","w",encoding="utf8") as fout:
	number = 998
	fout.write(str(number))#fin.write只能写入字符串,数字需要转换才能写入
	##若为“w”写出文件,如果文件不存在,python会自动创建文件;若存在,则清空文件后写入内容
	
	#按行写出:
with open("数字列表.txt","w",encoding="utf8") as fout:
	for number in range(100):
		fout.write(str(number)+"\n")#换行

文件的路径。

若反斜线\分割路径,在前面加r,代表raw-string,不解析反斜线
file_path = r"D:\workbench\ant-python-zero\临时代码\数据目录\访客目录\访客列表.txt"
也可以直接改成正斜线
file_path = "D:/workbench/ant-python-zero/临时代码/数据目录/访客目录/访客列表.txt"

##判断文件目录是否存在:
import os
file_path = "D:/workbench/ant-python-zero/临时代码/数据目录/访客目录/访客列表.txt"
print(os.path.exists(file_path))
print(os.path.exists("xxx.txt"))

Json文件格式

import json#引入库
json.dumps(data)#将python对象转换成一个字符串,你可以把这个字符串写到文件
json.loads(str)可以把大写字符串读取成为python对象

##
用多行定义一个大字符串
data_string ="""
{"xiaoming":[1,2,3,4],"xiaozhang":[5,6,7,8],"xiaozhao":[11,12,14,15]}
"""
data = json.loads(data_string)

print(type(data))
print(data)

异常:

捕获异常:
grades = []
while True:
	grade = input("请输入成绩:")
	try:
		grade = int(grade)
	except ValueError as e:
		print("你输入的数据有误,请检查后重新输入,信息为:",e)
		continue
	grade.append(grade)
	
##
捕获所有异常的父类Exception
try:
#正常代码
except Exception as e:
#异常代码处理逻辑

##
不写异常对象,能捕获所有异常类型,但得不到对象变量e,没法打印日志:
try:
#正常代码
except:
#异常处理逻辑

##
try...except...finally(except和finally至少选一个,finally不管是否发生异常都会执行)
七、开源技术库介绍
1、网页爬取

requests、BeautifulSoup、scrapy

2、数据处理与分析

pandas、numpy、openpyxi、xlwings、matplotlib、plotly、pycharts

3、web开发

flask、django

4、人工智能

sklearn、tensorflow

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐