【学习笔记】Python

一、入门

1、数据存储与运算

  • 字面量的定义
    字面量是代码中直接写出的固定值,如 5、3.14、“hello”、[1,2,3]
  • 字面量的类型
类型 书写格式示例
整型 42, -7, 0b1010(二进制), 0o12(八进制), 0xA(十六进制)
浮点型 3.14, -0.5, 2.5e3(科学计数法)
字符串 "hello", 'world', """多行""", '''字符串'''
布尔型 True, False
空值 None(空值类型只有 None 这一个值,表示空或无值)
列表 [1, 2, 3], ["a", "b"]
元组 (1, 2), 3, 4(无括号也合法)
字典 {"name": "Alice", "age": 25}
集合 {1, 2, 3}

TIP
1、布尔类型参与运算时,True 会转化为 1,False 会转化为 0
2、空值这种类型仅包含一个值 —— None

  • 判断变量类型的方法:type(变量)isinstance(变量,类型)
  • 类型转换
目标类型 函数 示例 说明
整型 int(x) int("123")123
int(3.14)3
截断小数,可指定进制:int("A",16)10
浮点型 float(x) float("3.14")3.14
float(5)5.0
字符串 str(x) str(123)"123"
str(3.14)"3.14"
布尔型 bool(x) bool(1)True
bool(0)False
bool("")False
假值:None00.0""[]{}set()
列表 list(iter) list("abc")['a','b','c']
list((1,2))[1,2]
元组 tuple(iter) tuple([1,2])(1,2)
集合 set(iter) set([1,2,2]){1,2} 自动去重
字典 dict(iter) dict([("a",1),("b",2)]){"a":1,"b":2} 需传入键值对序列

进制转换:转二进制bin()、转八进制oct()、转十进制ord()、转十六进制hex()

  • 字符串的定义方法
    1、'xxx'“xxx”:无本质区别,但可互相嵌套避免转义
格式符号 描述
%s 字符串占位符
%d 整数占位符
%5d表示整数的宽度是5,不足5位时用空格补
%f 浮点数占位符
%.2f表示精确到小数点后两位
%c ASCII码占位符
%u 无符号数占位符
%o 无符号八进制占位符
%x 或 %X 无符号十六进制占位符
%e 或 %E 浮点数(科学计数法形式)占位符

2、"""xxx""":可跨多行,保留换行和缩进(也可以采用+\来连接多行)
3、"""str.format()

# 基本使用
print('{}网址: "{}!"'.format('xxx', 'www.xxx.com')) # xxx网址: "www.xxx.com!"
# 位置型
print('{1} 和 {0}'.format('Google', 'Runoob')) # Runoob 和 Google
# 关键词型
print('{name}网址: {site}'.format(name='xxx', site='www.xxx.com')) # xxx网址: "www.xxx.com!"
# 保留三位小数
print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi)) # 常量 PI 的值近似为 3.142。
# 左填充和右填充
print('{0:10} ==> {1:10}'.format('Google', 1)) # Google     ==>          1
# 传入一个容器
table = {
   
   'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {0[Runoob]}; Google: {0[Google]}; Taobao: {0[Taobao]}'.format(table) # Runoob: 2; Google: 1; Taobao: 3
# **类似于一种解构
table = {
   
   'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {Runoob}; Google: {Google}; Taobao: {Taobao}'.format(**table)) # Runoob: 2; Google: 1; Taobao: 3
  • 字符串拼接时,若要拼接其他类型的数据,需要用str()进行转换

  • 字符串格式化方法
    1、”%s %d“ % (值1,值2):例如 “name: %s, age: %d” % (“Tom”, 18)
    2、f"内容:{值}":例如 f"age: {age}"

  • 不让 \ 发生转义:r"xxx"

  • 输出多份字符串:print( 字符串 * 数字 )

  • 获取用户的输入:a = input("xxx")

  • 特殊字符

特殊字符 描述
\b 退格
\000
\n 换行
\t 横向制表符
\v 纵向制表符
\yyy \三位数字,表示八进制
\xyy \x两位数字,表示十六进制
  • 算术运算符
    1、//:整除运算(向下取整)
    2、**:幂运算(返回左操作数的有右操作数次幂)

  • 逻辑运算符
    1、~:按位取反
    2、<<>>:逻辑移位

  • 成员运算符:innot in

  • 身份运算符:isis not —— 是否引用相(不)同对象,类似于 id(xxx) == id(yyy)

  • 海象运算符:=:允许在表达式中同时赋值并使用变量

# 传统写法
n = len(lst)
if n > 5:
    print(n)

# 海象写法
if (n := len(lst)) > 5:
    print(n) 
  • 优先级
优先级(由上往下递减) 描述 类型
(expr...), [expr...], {key: value...}, {expr...} 绑定或加括号、列表/字典/集合显示 表达式
x[index], x[index1:index2], x.attr, x() 索引、切片、属性引用、函数调用 自操作
await x await 表达式
** 乘方 运算
+x, -x, ~x 正、负、按位非 自运算
*, @, /, //, % 乘、矩阵乘、除、整除、取余 运算
+, - 加法、减法 运算
<<, >> 移位 比特运算
& 按位与 比特操作
^ 按位异或 比特操作
| 按位或 比特操作
in, not in, is, is not, <, <=, >, >=, !=, == 比较运算 比较
not 逻辑非 逻辑运算
and 逻辑与 逻辑运算
or 逻辑或 逻辑运算
:= 海象运算符(赋值表达式) 赋值
lambda lambda 表达式
  • 在交互模式中,最后被输出的表达式结果会被赋值给变量_
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
  • 数学方法
常用操作 描述
abs(x) 返回数字的绝对值
fabs(x) 以浮点数的形式返回数字的绝对值
ceil(x) 向上取整
floor(x) 向下取整
cmp(x,y) 如果 x<y 则返回 -1,x==y 则返回 0,x>y 则返回 1
exp(x) 返回 e 的 x 次方,例如 exp(1) 返回 2.71828…
log(x,e) 以 e 为基数求对数
log10(x) 以 10 为基数求对数
max(x1,x2…) 返回最大值
min(x1,x2…) 返回最小值
modf(x) 返回 x 的整数部分和小数部分,整数部分以浮点型进行表示
pow(x,y) 计算 x**y 的值
round(x[,n]) 返回浮点数 x 四舍五入的值,n表示保留的位数
sqrt(x) 返回数字 x 的平方根
随机数函数 描述
choice(seq) 从序列的元素中随机挑一个元素
randrange([start,] stop [,strp]) 在指定返回内,start 默认是1,按 step 递增的集合中获取一个随机数
random() 随机生成 [ 0,1 ) 范围内的数
shuffle(list) 将序列的所有元素随机进行排序
uniform(x,y) 随机生成下一个实数,它在 [ x,y ] 范围内
三角函数 描述
sin(x)、cos(x)、tan(x) 正弦、余弦、正切
asin(x)、acos(x)、atan(x) 反正弦、反余弦、反正切
degrees(x) 将弧度转换为角度,如 degrees(math.pi/2) 返回 90°
radians(x) 将角度转换为弧度

数字常量:pi:Π、e:自然常数

  • bytes 类型:表示不可变的二进制序列,与字符串类型不同的是,bytes 类型中的元素是整数值(0 到 255 之间的整数)而不是 Unicode 字符
  • 创建 bytes 类型数据:b'str'bytes(str,encoding)bytes(list)str.encode('utf-8')
# 编码
b1 = b'hello'
b2 = bytes([104, 101, 108, 108, 111])
b3 = bytes("hello", encoding="utf-8")
b4 = 'hello'.encode('utf-8')
# 解码
print(b1)
s1 = b1.decode() # 默认使用 utf-8 解码
print(s1)
# 判断
print(b1[0],type(b1[0])) # 104 int
if b1[0] == ord("h"):
    print("b1's first element is 'h'")
  • 字节对象的常用的操作类似于字符串
b1 = b"hello"
b2 = b"world"
# 索引和切片
print(b1[0])        # 104,对应 'h' 的 ASCII 码
print(b1[:2])       # b'he',切片结果仍然是 bytes 对象,而不是一个整形数组
print(len(b1))  # 5
print(b1 + b2)  # 输出: b'helloworld'
print(b" ".join([b1, b2]))  # 输出: b'hello world'

b = b"hello world"
print(b.find(b"world"))  # 输出: 6
print(b.replace(b"world", b"Python"))  # 输出: b'hello Python'

b = b"hello world"
print(b.split(b" "))  # 输出: [b'hello', b'world']

b = b"hello"
print(b.startswith(b"he"))  # 输出: True
print(b.isalpha())          # 输出: True

b = b"hello"
print(list(b))  # 输出: [104, 101, 108, 108, 111]
  • bytearray对象,其与 bytes 的区别在于它能够进行修改
ba = bytearray(b'hello')
ba[0] = 72  # 将第一个字节修改为 ASCII 码 72,即 'H'
print(ba)  # 输出: bytearray(b'Hello')

2、流程控制

  • natch…case 语法
match 表达式:
	case1:
		操作1
	case2 if 条件表达式: # 匹配值2 且 满足条件
		操作2
	case3|4: # 匹配值3或值4
		操作3
	case _: #其他情况
		操作4

TIP
1、是 match 不是 switch
2、操作里不需要加 break

  • for…else、while…else 语法:else会在循环正常结束后执行(如果循环中用了break则不会触发)

TIP:while 跟 for 的区别主要在于 while 只知道循环开始/结束的条件,但循环的次数是未知的,但 for 会知道循环的次数

  • range():生成指定规则的数字序列
    1、range(end)
    2、range(start,end)
i=1
while i in range(1,6):
    print(i)
    i+=1

3、range(start,end,step)

for i in range(1,6,2):
    print(i)

TIP
1、rang() 的范围从 0 开始,且不包含 end
2、range() 配合 while 使用时,i 是独立于该序列之外的;配合 for 使用时,i 即为遍历过程中的每个元素

3、数据容器

3.1、数据容器

  • 数据容器:一种可以容纳多份任意类型数据的数据类型
数据容器 支持重复元素 是否可以修改 是否支持随机访问
列表 (list)
元组 (tuple)
字符串 (str)
集合 (set)
字典 (dict) ❌ (键) / ✅ (值) ✅ (Python 3.7+)

TIP
1、物种容器都是可迭代对象,都支持 for...in... 的遍历
2、字典默认迭代的是键。可以用 .items() 迭代键值对、用 .keys() 迭代键、用 .values() 迭代值

3.2、列表

  • 列表:可存放不同类型元素,可存放重复元素,元素可修改,可随机访问
  • 基本操作
操作 方法/语法 说明 示例 (lst = [1,2,3]) 结果
append(x) 末尾添加一个元素 lst.append(4) [1,2,3,4]
insert(i, x) 在索引 i 处插入元素 x lst.insert(1, 10) [1,10,2,3]
extend(iter) 将可迭代对象中的元素逐个添加到末尾 lst.extend([5,6]) [1,2,3,5,6]
del lst[i] 删除指定索引的元素 del lst[0] [2,3]
pop(i) 删除并返回指定索引的元素(默认末尾) lst.pop(1) 返回 2,lst为 [1,3]
remove(x) 删除第一个值为 x 的元素 lst.remove(2) [1,3,2]
clear() 清空列表所有元素 lst.clear() []
索引赋值 将指定索引位置的元素替换为新值 lst[0] = 100 [100,2,3,2]
切片赋值 将切片区域替换为右侧可迭代对象中的元素 lst[1:3] = [8,9] [1,8,9,2]
lst[i] 通过索引获取元素 lst[1] 返回 2
index(x) 返回第一个值为 x 的索引,找不到报错 lst.index(2) 返回 1
count(x) 统计 x 在列表中出现的次数 lst.count(2) 返回 2
in 运算符 判断元素是否存在于列表中 2 in lst 返回 True
切片 [i:j] 获取索引 i 到 j-1 的子列表 lst[1:3] [2,3]
排序 sort() 原地升序排序(修改原列表) lst.sort() [1,2,3]
sort(reverse=True) 原地降序排序 lst.sort(reverse=True) [3,2,1]
sorted(lst) 返回新列表,原列表不变 new = sorted(lst) new=[1,2,3],lst不变
反转 reverse() 原地反转元素顺序 lst.reverse() [3,2,1]
lst[::-1] 通过切片返回新反转列表 new = lst[::-1] new=[3,2,1],lst不变

TIP
1、切片语法:list[start:end:step]、step 默认为 1
2、最后有一个元素的下标可视为 -1,倒数第二个元素的下标可视为 -2

  • 合并列表方法
    1、+:lst = lst1 + lst2
    2、解包:lst = [*lst1,*lst2]

解包:将列表这一类容器解开形成一个个独立的元素

  • 包含关系:innot in

  • 列表推导式:按照一定规则快速生成一个列表的方法
    1、格式1:列表名 = [ 要插入列表的数据 for i in 列表 ]
    2、格式2:列表名 = [ 要插入列表的数据 for i in 列表 if 条件 ]

同样可以运用于元组、集合、字典。但是元组推导式返回的结果是一个生成器对象

  • 常见数据统计方法:min()max()sum()len()

3.3、字符串

  • 字符串:存放字符的容器,特点是不可修改,但可随机访问、可迭代
  • 基本操作
方法/语法 说明 示例 (s = “Hello World”) 结果
s[i] 索引获取字符 s[1] 'e'
s[start:end:step] 切片 s[0:5] 'Hello'
len(s) 长度 len(s) 11
lower() 全部转小写 s.lower() 'hello world'
upper() 全部转大写 s.upper() 'HELLO WORLD'
strip() 去除首尾空白 " hi ".strip
内容概要:本文介绍了一个关于三相桥式全控整流及有源逆变电路的实验仿真模型,重点研究三相整流器与逆变器在Simulink环境下的建模与仿真技术。内容涵盖电力电子变换器的工作原理、控制策略设计、系统动态响应分析,并进一步扩展至10kV配电网中不同中性点接地方式(中性点不接地、经小电阻接地、经消弧线圈接地)下的单相、两相短路接地及相间短路故障的仿真研究,全面呈现了电力系统典型故障的暂态特性。此外,文档还整合了丰富的科研资源,涵盖电力系统优化、新能源并网、故障诊断、微电网调度等多个前沿方向,充分体现了Matlab/Simulink在电气工程仿真中的核心地位和广泛应用价值。; 适合人群:电气工程、自动化、电力电子等相关专业的高校学生、科研人员及工程技术人员,具备一定的电路理论基础和仿真软件操作经验者更佳。; 使用场景及目标:①用于教学实验中帮助理解三相整流与逆变电路的工作机制;②支撑科研项目中对电力系统故障特性的建模与分析;③作为开发新型控制算法(如PWM控制、低电压穿越等)的仿真验证平台;④辅助完成毕业设计、课题研究或工程方案评估; 阅读建议:此资源以Simulink仿真实现为核心,强调理论与实践结合,建议读者在学习过程中同步搭建模型,动手调试参数,深入理解各模块功能与系统整体行为,同时可参考文中提供的完整资源链接拓展研究视野。
内容概要:本文介绍了一个关于风光制氢合成氨系统优化研究的论文复现资源,依托Cplex求解器在Matlab环境中实现系统建模与求解。该资源聚焦于新能源耦合系统,涵盖风能、太阳能发电制氢,并进一步合成氨的全流程能量管理与优化调度,通过数学建模与优化算法实现系统经济性与运行效率的最大化。内容不仅包括风光出力不确定性处理、电解水制氢、氢气储存与转化、氨合成工艺等关键环节的建模,还整合了多种智能优化算法与电力系统调度策略,如二阶锥规划、多目标优化与需求响应机制,旨在为科研人员提供一套完整的综合能源系统优化研究框架与代码实现范例。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础的研究生、科研人员及工程技术人员,尤其适合从事新能源系统优化、综合能源系统规划、氢能与氨能转化等前沿方向的研究者。; 使用场景及目标:① 复现高水平期刊论文中的风光制氢合成氨系统优化模型,掌握Cplex在Matlab中的建模与求解流程;② 学习并应用二阶锥规划、多目标优化、需求响应等先进优化方法于综合能源系统科研项目中;③ 借助提供的完整Matlab代码案例,快速搭建仿真环境,加速科研进程,提升学术创新能力与工程实践水平。; 阅读建议:此资源以科研复现为核心,强调理论与实践深度融合,建议读者在学习过程中结合文档中的代码实例,逐步调试与理解模型构建逻辑,并尝试进行参数调整与模型拓展,以深化对综合能源系统多能耦合与优化调度机制的理解与应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值