深入学习python中...
1.python 面向对象
类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
class Employee:
'员工'
emCount=0
def __init__(self,name,salary,age):
self.name=name
self.salary=salary
self.age=age
Employee.emCount= Employee.emCount+1
def displayCount(self):
print("employee count %d" % Employee.emCount)
def displayEmployee(self):
if hasattr(self, 'age'):
print("Name: " + self.name + ", Salary: " + str(self.salary) + ", Age: " + str(self.age))
else:
print("Name: " + self.name + ", Salary: " + str(self.salary) + ", Age not specified")
#创建
em1 = Employee("zero",2400,18)
print("Does em1 have 'age' attribute?", hasattr(em1, 'age')) # True
print("Value of 'age' attribute in em1:", getattr(em1, 'age')) # 输出属性值
em1.displayEmployee()
setattr(em1, 'age', 8) # 添加属性 'age' 值为 8
em1.displayEmployee()
delattr(em1, 'age') # 删除属性 'age'
em1.displayEmployee()
em2 = Employee("one",2500,20)
em2.displayEmployee()
print ("Total Employee %d" % Employee.emCount)
#类的文档字符串
print ("Employee.__doc__:", Employee.__doc__) #Employee.__doc__: 员工
#类名
print ("Employee.__name__:", Employee.__name__) #Employee.__name__: Employee
#类定义所在的模块_
print ("Employee.__module__:", Employee.__module__) #Employee.__module__: __main__
#类的所有父类构成元素
print ("Employee.__bases__:", Employee.__bases__) #Employee.__bases__: (<class 'object'>,)
#类的属性(包含一个字典,由类的数据属性组成)
print ("Employee.__dict__:", Employee.__dict__)
继承、重写
class ParentClass:
parentAttr=1000
def __init__(self):
print("调用父类的构造器")
def parentMothed(self):
print("调用父类的方法")
def getAttr(self):
print("父类的属性:",ParentClass.parentAttr)
def setAttr(self,parentAttr):
ParentClass.parentAttr =parentAttr
def myMethod(self):
print ('调用父类方法')
class ChildClass(ParentClass): # 定义子类
def __init__(self):
print ("调用子类构造方法")
def childMethod(self):
print ('调用子类方法')
def myMethod(self):
print ('调用子类方法')
c = ChildClass() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMothed() # 调用父类方法
c.getAttr() # 再次调用父类的方法 - 获取属性值1000
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr() # 再次调用父类的方法 - 获取属性值200
c.myMethod() #调用子类方法 方法重写
python正则表达式
import re
print(re.match('www', 'www.baidu.com').span()) # 在起始位置匹配
print(re.match('com', 'www.baidu.com')) # 不在起始位置匹配
print(re.search('www', 'www.baidu.com').span()) # 在起始位置匹配
print(re.search('com', 'www.baidu.com').span()) # 不在起始位置匹配
phone = "2004-959-558 # 这是一个国外电话号码"
# 删除字符串中的 Python注释
num = re.sub(r'#.*$', "", phone)
print ("电话号码是: ", num)
# 删除非数字(-)的字符串
num = re.sub(r'\D', "", phone)
print ("电话号码是 : ", num)
文件读写流
import os
fo = open("file.txt", "a+")
print ("文件名: ", fo.name)
print ("是否已关闭 : ", fo.closed)
print ("访问模式 : ", fo.mode)
fo.write( "www.baidu.com!\nVery good site!\n")
# 关闭打开的文件
fo.close()
fo = open("file.txt", "r+")
str = fo.read(10)
print ("读取的字符串是 : ", str)
# 查找当前位置
position = fo.tell()
print ("当前文件位置 : ", position)
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print ("重新读取字符串 : ", str)
# 关闭打开的文件
fo.close()
# 给出当前的目录
print (os.getcwd())
线程
import threading
import time
# 为线程定义一个函数
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print(f"{threadName}: {time.ctime(time.time())} count:{count}")
# 创建两个线程
try:
thread1 = threading.Thread(target=print_time, args=("Thread-1", 2))
thread2 = threading.Thread(target=print_time, args=("Thread-2", 4))
# 启动线程
thread1.start()
thread2.start()
# 等待线程完成
thread1.join()
thread2.join()
except Exception as e:
print(f"Error: {e}")
print("Exiting Main Thread")
从threading.Thread继承
import threading
import time
exitFlag = 0
class MyThread(threading.Thread):
def __init__(self, threadID, name, counter):
super().__init__()
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
print(f"Starting {self.name}")
print_time(self.name, self.counter, 5)
print(f"Exiting {self.name}")
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
threading.currentThread().exit()
time.sleep(delay)
print(f"{threadName}: {time.ctime(time.time())}")
counter -= 1
# 创建线程
thread1 = MyThread(1, "Thread-1", 1)
thread2 = MyThread(2, "Thread-2", 2)
# 启动线程
thread1.start()
thread2.start()
# 等待线程完成
thread1.join()
thread2.join()
print("Exiting Main Thread")
python网络编程
服务端:
import socket # 导入 socket 模块
s = socket.socket() # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口
s.bind((host, port)) # 绑定端口
s.listen(5) # 等待客户端连接
print('服务器已启动,等待连接...')
while True:
c, addr = s.accept() # 建立客户端连接
print('连接地址:', addr)
message = '欢迎访问python教程!'.encode('utf-8') # 将字符串编码为 UTF-8 字节对象
c.send(message) # 发送字节对象
c.close() # 关闭连接
客户端
import socket # 导入 socket 模块
s = socket.socket() # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345 # 设置端口
try:
s.connect((host, port)) # 连接到指定主机和端口
print('连接成功')
msg = s.recv(1024) # 接收数据
print('从服务器接收到的消息:', msg.decode()) # 解码消息
except ConnectionRefusedError:
print('连接被拒绝,请确保服务器正在运行并且地址与端口号正确')
finally:
s.close() # 关闭连接
SMTP发送邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '257xxxx290@qq.com' #发送方
receivers = ['myxxxxxcloud@163.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') #邮件内容
message['From'] = sender # 发送者
message['To'] = ', '.join(receivers) # 接收者
subject = 'Python SMTP 邮件测试' #邮件标题
message['Subject'] = subject
try:
# 使用 QQ 邮箱的 SMTP 服务器
smtpObj = smtplib.SMTP('smtp.qq.com', 587)
smtpObj.starttls() # 启用 TLS 加密
smtpObj.login(sender, 'xxxxxtxxdjtidihd') # 登录 QQ 邮箱,使用授权码代替密码
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPAuthenticationError:
print("认证错误: 请检查你的授权码是否正确")
except smtplib.SMTPConnectError:
print("连接错误: 无法连接到 SMTP 服务器,请检查网络连接和 SMTP 服务器地址")
except smtplib.SMTPException as e:
print(f"SMTP 错误: {e}")
Python JSON
import json
# Python 字典类型转换为 JSON 对象
data = {
'no' : 1,
'name' : 'Runoob',
'url' : 'https://www.baidu.com'
}
json_str = json.dumps(data)
print ("Python 原始数据:", repr(data))
print ("JSON 对象:", json_str)
# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])
Python 操作 MySQL数据库
#import MySQLdb
import pymysql
# 连接 MySQL 数据库示例
connection = pymysql.connect(host='localhost',
user='root',
password='wxxxx456',
database='layy',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
# 示例查询
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM employee limit 10;"
cursor.execute(sql)
result = cursor.fetchall()
print(result)
finally:
connection.close()