生活札记
Python学习笔记 - 入门(一)
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。
官网:https://www.python.org/downloads/
教程:https://www.bilibili.com/video/BV1ug411Z7PB
教程:https://www.bilibili.com/video/BV1EE41187jY
1、注释
# 第一行代码
print("Hello 飓风呀!!!")
"""
多行注释
"""
'''
多行注释
'''
2、计算
# 计算
number = 10 + 20
print(number)
# 除法 // :取整数
number_1 = 10 // 20
number_2 = 20 // 10
number_3 = 15 / 10
print(number_1)
print(number_2)
print(number_3)
# 指数:N次方
number_4 = 2**3
print(number_4)
# 字符串
str = "-" * 5
print(str)
# type()类型
print(type(str))
3、输入
# input
data = input("请输入关键字:")
print(data)
# input输入,类型转换
prize = float(input("请输入价格:"))
weight = float(input("请输入重量:"))
print(prize * weight)
# 格式化:%s %d %.2f
print("重量是:%s" % weight)
4、if条件、随机数
# if、elif、else 条件
a = 1
if a == 1 :
print("a=%d" % a)
elif a == 0 :
print("a=%d" % a)
else :
print("a=%d" % a)
# 随机数
import random
print(random.randint(1, 100))
5、循环
# while
i = 1
while i <= 10:
print(i)
i += 1
# 99乘法
# 定义行
row = 1
while row <= 9:
# 定义列
col = 1
while col <= row:
# end="",输出结束后不换行
# end="\t",输出结束后添加制表符
print("%d * %d = %d" % (col, row, col * row), end="\t")
# 列+1
col += 1
# 输出空格
print("")
# 行+1
row += 1
# for in 循环
arr = ["PHP", "GoLang", "Python"]
for i in arr:
print(i)
6、list数组
# for in 循环
arr = ["PHP", "GoLang", "Python", 1, 2]
for i in arr:
print(i)
print(type(i))
# insert 插入
arr.insert(0, "Java")
arr.insert(2, "JavaScript")
print(arr)
# append 追加
arr.append("CSS")
print(arr)
# del 删除
del arr[0]
print(arr)
# pop 删除
arr.pop(1)
print(arr)
# remove 移除
arr.remove("CSS")
print(arr)
# 修改值
arr[0] = "Vuejs"
print(arr)
# clear 清空
# arr.clear()
# print(arr)
# len 长度
print(len(arr))
# count 统计
print(arr.count("GoLang"))
# extend 合并
arr1 = [4, 5, 6]
arr2 = [1, 2, 3]
arr1.extend(arr2)
print(arr1)
# sort 排序
arr1.sort()
print(arr1)
# reverse 反向
arr1.reverse()
print(arr1)
7、tuple元组
# tuple元组
arr = (1,2,3,4,"GoLang","PHP")
print(type(arr))
print(arr)
# 如果tuple只有一个值时需要加上一个逗号
arr2 = (1,)
print(type(arr2))
print(arr2)
# 统计 count
arr3 = (1,2,3,4,1,2)
print(arr3.count(1))
# index 序号
arr4 = (1,2,3,4,5)
print(arr4.index(2))
# tuple与list转换
arr5 = list(arr)
print(type(arr5))
print(arr5)
arr6 = tuple(arr5)
print(type(arr6))
print(arr6)
# for 循环
for i in arr:
print(i)
8、{}对象
# 对象
obj = {
"name":"飓风呀",
"sex":1,
"age":28
}
print(type(obj))
print(obj)
# 循环
for i in obj:
print(i)
print(obj[i])
# get() 获取
print(obj.get("name"))
# setdefault() 设置默认
obj.setdefault("colleague", "北大")
print(obj)
# update() 合并
obj2 = {
"nickname":"飓风呀"
}
obj.update(obj2)
print(obj)
# items() 转元组对象
print(obj.items())
# values() 获取值
print(obj.values())
# keys() 获取键值
print(obj.keys())
# pop() 删除
del obj["name"]
obj.pop("age")
print(obj)
# popitem() 随机删除
obj.popitem()
print(obj)
# clear() 清空
obj.clear()
print(obj)
9、字符串
# 字符串
s = "Hello Jufengya"
print(s[0])
# for i in s:
# print(i)
# 切片 string[N:N]
print(s[1:])
print(s[2:4])
# capitalize() 首字母大写、upper() 大写、lower()小写、title() 首个单词大写
print(s.capitalize())
print(s.upper())
print(s.lower())
print(s.title())
# find()、rfind() 反向查找、index()、rindex() 查找
print(s.find("e"))
print(s.find("6"))
print(s.find("f", 2))
print(s.index("a")) # 找不到会报错
# startswith() 开头、endswith() 结尾、isdigit() 纯数字、isalnum() 数字、isalpha() 字母构成
print(s.startswith("He"))
print(s.endswith("He"))
print(s.isdigit())
print(s.isalnum())
print(s.isalpha())
# 填充 center() 居中、ljust() 后面空格、rjust() 前面添加空格、zfill() 填充0
s1 = "Hei Jufengya"
print(s1.center(20, "#"))
print(s1.ljust(20, "-"))
print(s1.rjust(20, "-"))
s2 = "-100"
print(s2.zfill(20))
# format() 格式化
a = 10
b = 5
print("%d * %d = %d" % (a, b, a * b)) # 方式1
print("{0} * {1} = {2}".format(a, b, a * b)) # 方式2
# 3.6 版本以后支持f方法
print(f"{a} * {b} = {a * b}")
# 去空 strip()、lstrip()、rstrip()
s7 = "I Love You HaHaHa \t\n "
print(s7)
print(s7.lstrip())
print(s7.rstrip())
print(s7.strip())
# replace() 替换
s6 = "I#Love#You#HaHa#Ha"
print(s6.replace("#", "@", 2))
# 拆分、合并:split()、join()
s4 = "I#Love#You#HaHa#Ha"
s5 = s4.split("#", 2)
print(s5)
print("#".join(s5)) # 合并,这个方法很奇怪
# 编码、解码:encode()、decode()
s3 = "飓风呀"
s3_e = s3.encode("utf-8") # GBK
print(s3_e)
print(s3_e.decode("utf-8")) # 解码
10、集合
# 集合:无序、唯一、确定
set1 = {1,2,3,4,4}
print(set1)
# set 集合构造器
set2 = set("Hello World")
print(set2)
# 数组转集合
arr = [1,2,3,4,4,5,6,6,7,6]
print(arr)
set3 = set(arr)
print(set3)
# 集合遍历
for i in set3:
print(i)
# 集合操作
set4 = {1, 2, 3, 4, 5, 6}
set5 = {4, 5, 6, 7, 8, 9, 10}
# in、not in
print(1 in set4)
print(10 not in set5)
# 集合交集:& 或者 intersection()
set_jj = set4 & set5
print(set_jj)
set_jj= set4.intersection(set5)
print(set_jj)
# 集合并集:| 或者 union()
set_bj = set4 | set5
print(set_bj)
set_bj = set4.union(set5)
print(set_bj)
# 集合差集:- 或者 difference()
set_cj = set4 - set5
print(set_cj)
set_cj = set4.difference(set5)
print(set_cj)
set_cj = set5 - set4
print(set_cj)
# 对称差:两个集合的并集减去交集: ^ 或者 symmetric_difference()
set_dcx = set4 ^ set5
print(set_dcx)
set_dcx = (set4 | set5) - (set4 & set5)
print(set_dcx)
set_dcx = set4.symmetric_difference(set5)
print(set_dcx)
# 集合比较:==、!=、>、<、>=、<=、issubset() 子集、issuperset() 超集、isdisjoint() 是否无交集
set6 = {1,2,3,4,5}
set7 = {3,4,5}
set_bj = set6 >= set7
print(set_bj)
set_bj = set6 < set7
print(set_bj)
set_sub = set7.issubset(set6)
print(set_sub)
set_super = set6.issuperset(set7)
print(set_super)
set_join = set6.isdisjoint(set7) # 是否无交集
print("---", set_join)
# 集合方法:add()、update()、discard()、remove()、pop()、clear()
set8 = {1,2,3}
set8.add(4) # 添加
print(set8)
set8.update({6}) # 更新
print(set8)
set8.discard(3) # 删除,不存在不报错
print(set8)
set8.remove(1) # 删除,不存在则报错
print(set8)
set8.pop() # 前面删除一个
print(set8)
set8.clear() # 清空
print(set8)
# 不可变集合:frozenset()
set9 = frozenset({1,2,3,4,5,6,7,8,9})
set10 = frozenset([1,2,3,4,5,6])
# set9.add(10) # 不可变
print(set10 & set9)
11、函数
# 导入模块
import importtest
# 模块变量
print(importtest.name)
# 模块函数
print(importtest.importfun(100,200))
# 函数:def 或者 define 定义函数
def testfun(num1, num2):
print("-" * 50)
print(importtest.importfun(100, 200)) # 函数里调用函数
return num1 + num2
# 执行函数
test = testfun(10, 100)
print(test)
12、面向对象class
# 面向对象class
class Animal:
# 类属性
count = 0
# 魔术方法限定动态属性
__slots__ = ("name", "age", "__sex", "color")
# 初始化
def __init__(self, name, age, sex):
self.name = name # 共有属性
self.age = age # 共有属性
self.__sex = sex # 私有属性
# 私有方法:只能当前类使用
def __testmethod(self):
return self.__sex
# 普通方法
def play(self):
return f"Animal:{self.name}:{self.age}岁"
# 静态方法:传入的参数都是普通参数,不需要实例化可直接调用
@staticmethod
def plus(a, b, c):
return a + b + c
# 类方法:cls 绑定当前类
@classmethod
def plus1(cls, a, b, c):
print(cls.count)
return a + b + c
# 获取私有属性
def getSex(self):
return self.__sex
# 魔术方法,实例返回原始数据,不返回内存地址
# def __repr__(self):
# return "666"
# 实例化类
# animal = Animal("小狗", 10, "boy")
# print(animal) # 返回实例的内存地址
# print(animal.play())
# print(animal.name)
# print(animal.getSex())
# print(Animal.plus(1,2,3))
# print(Animal.plus1(1,2,3))
# animal.color = "黄色"
# print(animal.color) # 动态属性
# 类继承
class Dog(Animal):
# 方法
def run(self):
return f"{self.name}在奔跑..."
# 重写父类方法
def play(self):
return f"Dog:{self.name}:{self.age}岁"
# super() 是一个对象,调用父类方法
def parent(self):
print(super().play()) # 推荐使用
# Animal.play(self) # 不推荐
return "执行父类方法"
# 实例化子类
# dog = Dog("小狗", 10, "boy")
# # print(dog)
# print(dog.run())
# print(dog.play())
# print(dog.parent())
# 多继承类:同一个方法执行第一个类的方法
class A:
def play(self):
return "A"
class B:
def play(self):
return "B"
class C(A, B):
pass
# 实例化子类
c = C()
print(c.play())
print(C.__mro__) # 方法搜索顺序,从左到右
print(dir(C)) # 新式类与经典,Python3默认使用新式类 class A(object)
13、面向对象-单例模式
# 面向对象:单例模式
class Animal:
# 单例标识
instance = None
# init标识
init_flag = False
# __new__方法,为对象分配空间,返回对象引用
def __new__(cls):
# 判断是否为None
if cls.instance is None:
# 返回object父类对象,如果不返回 __init__ 初始化不执行
cls.instance = super().__new__(cls)
# 返回对象引用
return cls.instance
# 初始化
def __init__(self):
# 判断是否是第一次执行
if self.init_flag:
# return 后续就不执行
return
# 设置为true
self.init_flag = True
print("666")
# 实例化
animal = Animal()
animal1 = Animal()
print(animal)
print(animal1)
14、异常exception
# 异常Excepttion
try:
# 执行正常程序
a = int(input("请输入数字:"))
number = 8 / a
print(number)
except ValueError:
# 报错
print("请输入整数!")
except ZeroDivisionError:
# 报错
print("除数不能为0")
except BaseError:
# 报错
print("基类错误")
else:
# 执行成功则会执行else代码
print("不报错则执行else")
finally:
# finally一直会执行
print("finally一直会执行")
print(__name__)
# 嵌套处理异常
try:
f = open("test.txt", "r", encoding="utf-8")
for line in f:
try: # 嵌套的异常处理会保证正常程序执行,不影响整体
3/0
except:
print("计算错误")
print(line, end="")
except ZeroDivisionError:
print("除数不能为0")
finally:
if f:
f.close()
print("我都执行")
# 主程序处理错误异常,异常传递
def demo1():
a = int(input("请输入数字:"))
number = 8 / a
return number
def demo2():
return demo1()
if __name__ == "__main__":
try:
print(demo2())
except Exception as e:
print("未知错误:%s" % e)
# 主动抛出异常
def init_password():
# 输入密码
pwd = input("请输入密码:")
# 验证长度
if len(pwd) >= 8:
return pwd
# 自定义错误
ex = Exception("密码长度必须8位字符以上")
# 主动抛出异常
raise ex
if __name__ == "__main__":
try:
print(init_password())
except Exception as e:
print(e)
15、模块import
# 模块import
import test01 # 当前目录导入
from test01 import Test01 # 部分导入
import importfiles.test02 as test_02 # 其他目录导入,as 别名
import importfiles.test_ as test # 导入包,test_ 目录下需要有__init__.py文件,来导入当前目录下所有python包
# 执行包
print(test01.name)
print(test_02.name)
print(Test01())
print(test.test03.name)
16、网络通信 socket_send 客户端
# 网络通信socket 发送数据
# 导入内置的socket包
import socket
'''
创建UDP的参数:
1、ip协议:
ipv4
ipv6
2、链接类型:
tcp
udp
'''
# 链接UDP
udp_socket_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 指定发送地址
'''
ip 如果留空则表示本机IP
端口号
'''
send_address = ("172.16.1.57", 8080)
# 创建发送消息
send_message = input("请输入发送的信息:")
# 发送数据:信息内容需要编码,最大1024
udp_socket_client.sendto(send_message.encode("utf-8"), send_address)
# 关闭,释放资源
udp_socket_client.close()
17、网络通信 socket_receive 接收端
# 网络通信socket 接受数据
# 导入内置的socket包
import socket
'''
创建UDP的参数:
1、ip协议:
ipv4
ipv6
2、链接类型:
tcp
udp
'''
# 链接UDP
udp_socket_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 指定接受地址
'''
ip 如果留空则表示本机IP
端口号
'''
local_address = ("", 7788)
# bind() 绑定ip
udp_socket_server.bind(local_address)
# 接受数据:recvfrom() 返回的数据是一个元组[信息, 发送方ip与端口]
recv_message = udp_socket_server.recvfrom(1024)
message = recv_message[0].decode("utf-8")
print(message)
print(recv_message[1])
# 关闭,释放资源
udp_socket_server.close()
18、简单通信案例
# 网络通信socket 接受数据
# 导入内置的socket包
import socket
# 发送数据
def send(udp_socket_client):
# 创建发送消息
send_message = input("请输入发送的信息:")
# 发送地址
send_ip = input("请输入IP:")
send_port = int(input("请输入端口号:"))
send_address = (send_ip, send_port)
# 发送数据:信息内容需要编码,最大1024
udp_socket_client.sendto(send_message.encode("utf-8"), send_address)
# 接收数据
def recv(udp_socket_server):
# 接受数据:recvfrom() 返回的数据是一个元组[信息, 发送方ip与端口]
recv_message = udp_socket_server.recvfrom(1024)
message = recv_message[0].decode("utf-8")
print(message)
print(recv_message[1])
# 主函数
def main():
# 链接UDP
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 接收地址
local_address = ("", 7788)
udp_socket.bind(local_address)
# 死循环,保证通信一直运行
while True:
# 打印消息
print("-" * 80)
print("1.发送数据")
print("2.接收数据")
print("-" * 80)
# 输入编号
msg_type = int(input("请输入编号:"))
# 处理编号
if msg_type == 1:
# 发送数据
send(udp_socket)
elif msg_type == 2:
# 接收数据
recv(udp_socket)
else:
print("请输入正确的编号")
# 调用主函数
if __name__ == "__main__":
main()
文明上网理性发言!
已完结!