当前位置: 首页 > news >正文

自由学习记录(64)

 name = "abcdefg"
print(name[2:-1])  # 输出:'cdef'
解释:

name[2] 是 'c'

name[-1] 是 'g',所以切到 'f' 为止

即取:'c' 'd' 'e' 'f' → 'cdef'

xxx

s = "hello"
s.upper()  # 返回 'HELLO'

xxxx

class Orange:
    def __init__(self, a):
        self.a = a
__init__ 是 Python 中的构造函数

self 是指类的实例对象

a 是外部传入的初始化参数

xxxx

Python 是支持多重继承的(不像 Java 会拒绝)

  • GeneralManager 继承自 Manager,而 Manager 定义了 salary 方法(哪怕是 pass 也算)

  • 所以 GeneralManager 继承了该方法

xxx

模式含义
'r'只读
'r+'✅ 可读可写(不清空)
'w'只写(清空或创建)
'w+'可读写(清空或创建)
'a'只追加写
'a+'可读可追加写

xxx

3*2 = 6  
3**2 = 9  
→ 6 > 9 → False

运算符判断的是什么?用途
==判断两个值是否相等“值是否一样”
is判断两个变量是否指向同一对象(内存地址)“是不是一个东西”

xxx

Python 中集合(set)的基本操作包括以下几种集合运算:

操作名称符号说明
并集`.union()`
交集&.intersection()获取两个集合都包含的元素
差集-.difference()在一个集合中有、另一个没有的元素

xxxx

int        → 整数(如 1, -5)
float      → 浮点数(如 3.14, -0.001)
complex    → 复数(如 3 + 4j)
这三种类型共同属于抽象基类 numbers.Number。

bool 是不是数字类型?

❌ 严格意义上,不是“数值类型”,但它是 int 的子类。

xxxxx 

  • del 删除的是“名字”或“容器中的元素”,不一定马上释放内存

  • 内存是否释放由 Python 的**垃圾回收机制(引用计数)决定

xxxxx

除了 '单引号'"双引号",Python 还支持使用 三引号 定义多行字符串:

xxxx

网络爬虫是指自动从网络上爬取信息的程序或脚本

  • ✅ 正确

  • 这是网络爬虫的标准定义,例如使用 requests + BeautifulSoup / scrapy 来抓取网页内容。

数据分析中主要使用 pandas、numpy 和 scipy 库

  • ✅ 正确

  • 它们分别用于:

    • numpy:数值计算、数组操作

    • pandas:数据结构(DataFrame)、数据清洗与分析

    • scipy:高级科学计算(如优化、积分、信号处理)

jieba库支持中文分词

  • jieba中文分词的代表性库,用途正是支持“中文文本分词”

    示例用法:
import jieba
jieba.lcut("我喜欢Python编程")  
→ ['我', '喜欢', 'Python', '编程']

PyQt5 是对 Qt 框架的 Python 封装,用于开发 GUI(窗口、按钮、菜单等图形界面)

xxx

类方法是使用 @classmethod 装饰器定义的绑定到类的函数,而不是实例。
第一个参数必须是 cls,代表类本身(类似实例方法的 self)。

f-string(最现代,Python 3.6+)

print(f"My name is {name}, I am {age} years old.")

xxxxx

try:
    # 可能出错的代码
except SomeError:
    # 捕获异常的处理代码
else:
    # 没有发生异常时执行的代码(可选)
finally:
    # 无论是否发生异常都会执行的代码(可选)

xxxx

  • li_one[:3]:表示取列表 li_one 的前三个元素(索引 0, 1, 2)。

  • sorted(..., reverse=True):对这三个元素进行排序,并按降序排列。

返回的是 li_one前三个元素降序排序新列表不会修改原列表

xxx

xxxx

字符串"hello"[::-1]的结果是?("olleh" )

xxx

  • **kwargs:表示 任意数量的“关键字参数” 会被收集成一个字典 kwargs

  • kwargs 这个名字不是必须的,但 ** 是语法固定写法。

  • 你可以向这个函数传入任意数量的 key=value 形式的参数。

参数类型语法参数形式接收到的类型
位置参数*argsfunc(1, 2, 3)元组 tuple
关键字参数**kwargsfunc(a=1, b=2)字典 dict
import jsonjson_str = '{"name": "Alice"}'
data = json.loads(json_str)print(data)           # 输出:{'name': 'Alice'}
print(type(data))     # 输出:<class 'dict'>

JSON 完全支持嵌套结构,包括嵌套字典、嵌套列表、甚至列表中嵌套字典等各种组合。Python 的 json.loads() 可以正常解析这些嵌套结构,最终转换为 Python 的对应数据类型。

import jsonjson_str = '''
{"name": "Alice","age": 30,"address": {"city": "Beijing","zip": "100000"},"hobbies": ["reading", "cycling"],"education": [{"level": "bachelor","major": "CS"},{"level": "master","major": "AI"}]
}
'''data = json.loads(json_str)
print(data["address"]["city"])          # 输出: Beijing
print(data["hobbies"][1])               # 输出: cycling
print(data["education"][0]["major"])    # 输出: CS

xxxx

函数内部 修改全局变量,必须使用 global 关键字来声明该变量是全局作用域中的。

x = 10def modify():global x   # 声明 x 是全局变量x = 20modify()
print(x)   # 输出:20

什么是 Python 虚拟机?

它是 Python 解释器的一部分,用来执行编译后的字节码(.pyc 文件),而不是直接执行你写的 .py 源代码。

你可以理解为它是一个在你电脑里运行的“软件 CPU”:

  • 它不关心你原本写的代码是 print() 还是 for

  • 它只管一条一条“指令式”的字节码

  • 就像真的 CPU 执行机器指令一样,它执行的是 Python 字节码指令

xxxx

xxx

class MyClass:def __init__(self):self.__secret = "Hidden"def reveal(self):return self.__secretobj = MyClass()
print(obj.reveal())       # ✅ 正常访问私有变量通过方法print(obj.__secret)       # ❌ 会报错:AttributeError

xxx

assert 条件表达式, "可选的错误信息"
如果条件为 False,则抛出 AssertionError,并可附带消息。

xxx

finally 子句 总会执行,哪怕异常未被捕获或提前 return

实例方法可通过 实例调用;也可通过 类名显式调用,此时需手动传入实例:MyClass.method(obj)

from module import * 可一次性导入所有公开成员,调用时 无需模块名前缀不推荐,易污染命名空间。

xx

xxx

集合(set)不支持索引或切片,需通过循环或成员测试访问元素。

字典在 Python 3.7+ 按插入顺序保留元素,但在算法与概念上仍视为“无序集合”。

try 必须与 exceptfinally 至少其一配合使用。

xxx

class A:count = 0               # 类属性@staticmethoddef say_hello():        # 静态方法print("Hi")A.count         # ✅ OK:通过类名访问类属性
A.say_hello()   # ✅ OK:通过类名访问静态方法

类属性 / 静态方法 可直接通过类名访问

xxx

class A:def __init__(self, x):self.x = x           # 实例属性def show(self):          # 实例方法print(self.x)a = A(10)
a.x         # ✅ 实例访问实例属性
a.show()    # ✅ 实例访问实例方法

实例属性 / 实例方法 需通过实例访问

xxx

默认参数必须位于非默认参数之后

# 正确 ✅
def f(a, b=2): pass# 错误 ❌
# def f(a=2, b): pass  → SyntaxError

xxx

with open("file.txt", "r") as f:data = f.read()


# 这里 f 文件对象已自动关闭,无需 f.close()
with 会自动管理资源,确保即使异常发生也能关闭文件。

xxxx

私有属性/方法:通过 __name 触发名称重整

class MyClass:def __init__(self):self.__hidden = 42   # 私有属性(触发 name mangling)def __private_method(self):  # 私有方法print("secret")obj = MyClass()# 不能直接访问:
# obj.__hidden → AttributeError ❌# 实际被重命名为:
obj._MyClass__hidden          # ✅ OK
obj._MyClass__private_method()  # ✅ OK

xxx

装饰器:修改或增强函数功能

@decorator 只是语法糖(sugar)

def wrap(x):def new_action():print("Before")x()print("After")return new_actiondef action():print("Original")aaa = wrap(action)print("Calling action():")
action()print("Calling aaa():")
aaa()

如果aaa = wrap(action)
那么就意味着:

原始的 action() 还是原来的函数(没有变)

新的包装后的函数 绑定给了 aaa()

如果你写成 action = wrap(action),就会改变原函数 action 所指向的内容

xxx

__init__ 是构造函数(Constructor)

  • 在类中定义 __init__ 方法,是 Python 创建对象时自动调用的初始化方法。

  • 方法名前后的 双下划线 __ 是 Python 的“魔术方法”约定(也叫特殊方法)。

  • __init__ 是必须的方法 如果你想给对象初始化参数,但不是所有类都必须写它。

self 是实例自身的引用

  • self 是类中实例方法的第一个参数,代表当前对象自己。

  • 不叫 self 也行(只要是第一个参数),但 Python 社区统一规范用 self,便于阅读。

class Person:def __init__(self, name, age):self.name = nameself.age = age@classmethoddef from_string(cls, info_str):name, age = info_str.split("-")return cls(name, int(age))p = Person.from_string("Alice-30")

pass  # 占位语句,代码还没写,但语法上需要写点东西

 

Python已经事实上成为3D软件编辑器的通用脚本语言_哔哩哔哩_bilibili

09循环方式_哔哩哔哩_bilibili

默认会加上的后缀,如果存在多个同名的物体,Blender自己加

对齐物体

Blender用python编写具体的功能直接实现

bpy.ops.object.align是找到Blender里面的这个功能,然后后面的模式全部设置

一个类写一个功能,所以要配上这里的注册register

bpy.utils.register_class

但即使如此,这里设置的命令会随着Blender的关闭而重置消失

通过把脚本编写成插件,插件每次开启的时候都会自动的配上,就不需要每次打开都需要执行一遍脚本了

如何写一个Blender插件?这里会给模版

if __name__ == "__main__":
    register()
的意思是:

✅ 如果是直接运行这个 Python 文件,就执行 register() 函数(比如用于注册插件)
❌ 如果是通过 import xxx 被其他模块导入,则不会执行 register()(避免干扰导入者)

(在 Unity 中实现思路):

  • Shader 实现 核心流动感:使用 UV distortion + Fresnel + Noise

  • LineRenderer + 贝塞尔路径 模拟“流麻”脉络

  • TrailRenderer 做“能量流动尾迹”

  • 可结合 Shader Graph + Visual Effect Graph + Timeline 动态联动

第一阶段目标:

URP 中实现彩色拖尾轨迹的基础效果。你将在几分钟内看到第一个有生命力的“尾迹动态”,为后续所有“胎海流麻”效果打下基础

当前唯一需要调整的点:渲染管线必须切换为 URP

原因如下:

比项Built-in RP✅ URP
Shader Graph 支持❌ 不支持✅ 原生支持
VFX Graph 支持部分需扩展包✅ 完整支持(配合 Shader Graph)
自定义水面 + 深度融合较繁琐✅ 自带 Depth Texture 支持,易于实现软混合
渲染效率传统✅ SRP 架构、性能更现代化
拓展 Shader/VFX 成品兼容性❌ 各种资料需重改✅ 绝大多数高质量资源基于 URP/HDRP

下一步:你创建完 URP 项目后,我会帮你搭建:

  • ✅ 最小运行的轨迹拖尾 Demo 场景

  • ✅ 支持颜色渐变与生命周期控制的 Trail Shader(Shader Graph)

  • ✅ 可拓展到软融合/扰动的基础结构

给 Player 添加 Trail Renderer 组件

  1. 选中 PlayerAdd Component → 搜索 Trail Renderer

  2. 修改 Trail 参数如下:

参数推荐设置说明
Time2拖尾持续时间
Min Vertex Distance0.05拖尾平滑程度,越小越精细
Start Width0.4起始宽度
End Width0.0收尾收细
Color Gradient自定义颜色渐变,如 彩虹色、蓝→青→白
Material新建一个 URP Shader Graph 材质(下一步会教你做)

节点结构:

输入说明
Vertex Color直接用于控制颜色与透明度
_TintColor (Color, HDR, 可调)外部叠色

左侧 Blackboard 中添加以下属性:

  • _TintColor

    • 类型:Color

    • Mode:HDR

    • 可勾选 “Exposed” 供外部材质访问

使用 HDR _TintColor 是为了拖尾能在视觉上「发光发热」,这是构建“胎海流麻”感、魔幻气场、能量拖尾的基础。

添加节点

拖拽出以下节点并连接:

节点类型用途
Vertex Color获取 Trail Renderer 的 per-vertex 颜色(包含透明度)
_TintColor自定义外部颜色/叠色,用于统一调节整体风格
Multiply相乘:VertexColor.rgb * _TintColor.rgb
Split(分离 RGBA)若你想单独处理 alpha,可拆出 VertexColor.a
Multiply (Alpha)VertexColor.a * _TintColor.a
Combine重新组合 RGB 和 Alpha 输出为最终颜色
Base ColorFragment 输出连接 Base Color

Graph 设置调整

点击空白区域或右上角 Graph Inspector:

  • Surface Type:Transparent ✅

  • Alpha Clipping:关闭 ❌

  • ZWrite:关闭(确保透明度层叠)

  • Blend:Alpha(默认即可)

  • Two Sided:打开 ✅(如果 Trail 有旋转等效果,双面可见)

在Shader Graph 中,创建节点的快捷键是 空格键 (Spacebar)。按下空格键后,会弹出一个节点搜索窗口,方便快速找到并创建所需节点。

Create → Material → Trail_Mat
指定 Shader 为刚才创建的 SG_TrailColor

指定 _TintColor 为 白色 或淡色调

将该材质拖入 Player 的 Trail Renderer 的 Material 位置

添加移动逻辑(简易测试)

给 Player 添加这个移动脚本(挂在同一 GameObject 上):

using UnityEngine;public class PlayerMover : MonoBehaviour
{public float speed = 5f;void Update(){float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");Vector3 move = new Vector3(h, 0, v).normalized;transform.Translate(move * speed * Time.deltaTime, Space.World);}
}

检查 

第二阶段目标:

给尾迹添加水感扰动(如波纹/流动),并与水面自然融合

渲染策略实现目的技术核心
基于深度的透明度调整让尾迹在靠近水面时显现,离开时淡出SceneDepth - PixelDepth 控制透明度
软边混合(Soft Blend)边缘与水面过渡柔和,避免“剪影”使用 Alpha * smoothstep(...)
扰动背景法线让尾迹拖曳时“压出水痕”的感觉用 FlowMap 或扰动法线输入到 Normal
颜色调制尾迹颜色受水面或背景影响采样背景颜色、或者乘以偏蓝/偏水的调色
UV 或 FlowMap 流动表现“尾迹在水面上扩散流动”timeflow_uv 滚动贴图

你甚至可以采样水面当前法线,把它们混合进去,制造“共振”效果,比如:

finalNormal = normalize(lerp(baseNormal, waterSurfaceNormal, 0.5));
用一个扰动贴图(Noise / FlowMap)生成法线扰动,输入到 Shader 的 Normal 插槽中,让光照对该扰动作出反应。

Time → Multiply Flow Speed

Add to UV (可选:FlowMap 采样 → 解码方向 → 加入 UV)

Sample MainTex or MaskTex

→ 接入 Albedo / Alpha 等通道
🧠 为什么这样看起来“在动”?
因为纹理本身不动,你修改的是 纹理坐标(UV)的位置随时间变化,就产生了 视觉上的流动感

打开你的 Shader Graph(SG_TrailColor)

  1. 添加属性:

    • _FlowSpeed(Float, 默认 1)

    • _MainTex(2D Texture,默认白图)

    • _DistortStrength(Float, 默认 0.05)

  2. 添加核心节点结构:

UV 扰动主线:

Time → Multiply (_FlowSpeed) → Add to UV → Sample Texture (_MainTex) → Multiply RGB with VertexColor.rgb → BaseColor
 

Soft Blend Alpha 主线:

Sample _MainTex (R通道) → One Minus → Power(3~5) → Multiply VertexColor.a → Alpha
 

----腰斩,做不了,需求太模糊了,还得学

http://www.dtcms.com/a/263252.html

相关文章:

  • 傅里叶变换理解
  • Instruct-GPT奖励模型的损失函数与反向传播机制解析
  • opencv入门(1)环境变量配置
  • FOC中V/F启动和I/F启动的区别
  • 零成本接入+企业级部署:2025年AI大模型实战指南
  • 企业自建云概念解读|私有云、专有云、混合云、分布式云、企业云
  • 【零基础学AI】第14讲:支持向量机实战 - 文本分类系统
  • 华为云 Flexus+DeepSeek 征文|基于 Dify 平台开发智能客服 AI Agent 的完整实战指南
  • python+uniapp基于微信小程序蜀味道江湖餐饮管理系统nodejs+java
  • 矩阵方程 线性代数
  • 微服务架构下的JWT深度实践:从原理到安全最佳实践
  • CppCon 2018 学习:An allocator is a handle to a heap Lessons learned from std::pmr
  • guava限流器RateLimiter源码详解
  • Codis的槽位迁移与ConcurrentHashMap扩容的相似之处
  • 智慧水利物联感知网解决方案PPT(45页)
  • 编程实践:opencv支持freetype
  • uniapp+vue2 ba-tree-picker下拉项多选 树形层级选择器(支持单选、多选、父级选择、映射)
  • ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用
  • vipmro网站商品详情接口技术解析
  • Array.from()方法解析与应用
  • 容器化 vs 虚拟机:什么时候该用 Docker?什么时候必须用 VM?
  • 本地部署kafka4.0
  • RPC-Client模块
  • 从0到亿级数据抓取:亮数据如何破解全球采集难题?
  • 《燕云十六声》全栈技术架构深度解析
  • 算法与数据结构:解决问题的黄金搭档
  • 后台管理系统的诞生 - 利用AI 1天完成整个后台管理系统的微服务后端+前端
  • spring-ai-alibaba 1.0.0.2 学习(四)——语句切分器、文档检索拦截器
  • JavaEE初阶第五期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(三)
  • 区块链技术有哪些运用场景?