Python Core Programming Note 2
Net Programming 1. TCP Server: from socket import *from time import ctimeHOST = ''PORT = 21111BUFSIZ = 1024ADDR = (HOST, PORT)tcpSerSocket = socket(AF_INET, SOCK_STREAM)tcpSerSocket.bind(ADDR)tcpSerSocket.listen(5)try: while True: print("waiting for connection...") tcpCliSocket, addr = tcpSerSocket.accept() print("connected from :",addr) while True: data = tcpCliSocket.recv(BUFSIZ) if not data: ...
Python Core Programming Note 3
Multi-thread Python 的 threading 模块 Python 提供了多个模块来支持多线程编程,包括 thread、 threading 和 Queue 模块等。程 序是可以使用 thread 和 threading 模块来创建与管理线程。 thread 模块提供了基本的线程和锁 定支持;而 threading 模块提供了更高级别、功能更全面的线程管理。使用 Queue 模块,用户 可以创建一个队列数据结构,用于在多线程之间进行共享。 核心提示:避免使用 thread 模块 推荐使用更高级别的 threading 模块,而不使用 thread 模块有很多原因。 threading 模 块更加先进,有更好的线程支持,并且 thread 模块中的一些属性会和 threading 模块有冲突。 另一个原因是低级别的 thread 模块拥有的同步原语很少(实际上只有一个),而 threading 模块则有很多。 不过,出于对 Python 和线程学习的兴趣,我们将给出使用 thread 模块的一些代码。 给出这些代码只是出于学习目的,希望它能够让你更好地领悟为什么应...
Python源码剖析-Note1
1.Python 架构 1.1 文件组: 模块、库、自定义模块 1.2 核心 解析器 Scanner词法分析 -> Parser语法分析,建立AST(抽象语法树) -> Compiler 生成指令集合,Python字节码(byte code) -> 由Code Evaluator(虚拟机)执行字节码 1.3 运行时环境 对象/类型系统 Object/Type structures 内存分配器 Memory Allocator 运行时状态信息 Current State of Python 2.Python的内建对象 2.1 关于对象 类型对象(整数类型,字符串类型)都是被静态初始化的 对象被创建后的内存中的大小是不可变的! 2.2 PyObject 只包含一个引用计数和一个类型指针(指向具体的结构信息) /* PyObject_HEAD defines the initial segment of every PyObject. */#define PyObject_HEAD \ ...
Python源码剖析-Note2
Python的内存 引用计数 由源码可知,Python的数据对象由PyVarObject(PyObject+size)组成,PyObject中又包含了双向链表,计数器,数据类型_typeobject对象(其中可以定制行为) /* Define pointers to support a doubly-linked list of all live heap objects. */#define _PyObject_HEAD_EXTRA \ struct _object *_ob_next; \ struct _object *_ob_prev;#define PyObject_HEAD \ _PyObject_HEAD_EXTRA \ Py_ssize_t ob_refcnt; \ struct _typeobject *ob_type; #define PyObject_VAR_HEAD ...
Python 杂项
Python 杂项 关于 *args 和 **kwargs参数的用法 允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。 def f(a,*args): print(args)f(1,2,3,4)def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n print(sum)calc(1,2,3,4) ** ,关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。 def d(**kargs): print(kargs) d(a=1,b=2)#在函数混合使用*以及**。def h(a,*args,**kargs): print(a,args,kargs)h(1,2,3,x=4,y=5)def person(name,age,**kw): print('name:',name,'age:',age,'other:'...
Python知识汇总1
总概 1.Old-style, New-style class Old-style classesclass Person(): _names_cache = {} def __init__(self,name): self.name = name def __new__(cls,name): return cls._names_cache.setdefault(name,object.__new__(cls,name))ahmed1 = Person("Ahmed")ahmed2 = Person("Ahmed")print ahmed1 is ahmed2print ahmed1print ahmed2# >>> False# <__main__.Person instance at 0xb74acf8c># <__main__.Person instance at 0xb74ac6cc># >>>New-sty...
Python Note 3
Python Note 3 Classes Use Pacal naming convertion,not like variables/function use lower cases and underscore connection. Basic usage: class Point: def draw(self): print("draw") def print(self): print("this is point")point1 = Point()point1.x = 5point1.draw()print(point1.x) Constructor class Point: def __init__(self, x, y): self.x = x self.y = y def draw(self): print("draw") def print(self): print("this is point")point1 = Point(10, 5)point1.draw()...
四元数旋转函数学习
LookRotation(Vector3 forward, [DefaultValue(“Vector3.up”)] Vector3 upwards) 理解为将Z轴正方向转到第一个”forward“参数位置,把UP正方向转到第二个’upwards‘位置 LookRotation的含义就是,计算让Z轴对齐forward,让y轴对齐upward 所需要的旋转四元数。 FromToRotation(Vector3 fromDirection, Vector3 toDirection) 从一个转向到另一个目标转向。如: Quaternion.LookRotation(new Vector3(1,0,0)) 等价于 Quaternion.FromToRotation(Vector3.forward, new Vector3(1,0,0)); 参考学习 AngleAxis(float angle, Vector3 axis) 以axis为轴,转一个角度。 示例:如以A(0,10,0)到B(10,0,0)形成一个方向,以此方向转90。 起始位置如图: 转90度后如图:
递归算法
公式法求复杂度: NQueen算法: 算法复杂度: 皇后算法:
Shader Variant
multi_compile与shader_feature multi_compile与shader_feature可在shader中定义宏。两者区别如下图所示: multi_compile shader_feature 定义方式 #pragma multi_compile A #pragma shader_feature A 宏的适用范围 大多数shader 一般仅针对shader自身 变体的生成 生成所有的变体 可自定义生成何种变体 默认定义的宏 默认定义首个宏 默认定义首个宏 定义方式 定义方式中值得注意的是,#pragma shader_feature A其实是 #pragma shader_feature _ A的简写,下划线表示未定义宏(nokeyword)。因此此时shader其实对应了两个变体,一个是nokeyword,一个是定义了宏A的。 而#pragma multi_compile A并不存在简写这一说,所以shader此时只对应A这个变体。若要表示未定义任何变体,则应写为 #pragma multi_compile __ ...







