Lynn

Lynn's Life


  • 首页

  • 归档

  • 随笔

  • 标签

  • 分类

  • 搜索

Python学习笔记4

发表于 2018-01-26 | 阅读次数:
  • 我们创建这个备份脚本的过程是编写程序的推荐方法——进行分析与设计。开始时实施一个简单的版本。对它进行测试与调试。使用它以确信它如预期那样地工作。再增加任何你想要的特性,根据需要一次次重复这个编写-测试-使用的周期。记住“软件是长出来的,而不是建造的”。
  • 面向对象编程
  • Python中的self等价于C++中的self指针和Java、C#中的this参考。
  • 假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。(?)
  • 这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。(?)
  • Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的 。
    只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
  • 这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。
  • 如果在继承元组中列了一个以上的类,那么它就被称作 多重继承(??)
  • f = file(‘poem.txt’) 没有指定模式,读模式会作为默认的模式
  • 你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行。
  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。
  • try..finally
    假如你在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。注意,在一个try块下,你可以同时使用except从句和finally块。如果你要同时使用它们的话,需要把一个嵌入另外一个。
  • 对于有经验的程序员,sys模块中其他令人感兴趣的项目有sys.stdin、sys.stdout和sys.stderr它们分别对应你的程序的标准输入、标准输出和标准错误流。
  • os.sep可以取代操作系统特定的路径分割符
  • 单语句块(??)
  • lambda语句被用来创建新的函数对象,并且在运行时返回它们。
  • exec语句用来执行储存在字符串或文件中的Python语句
  • eval语句用来计算存储在字符串中的有效Python表达式
  • repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。你可以通过定义类的repr方法来控制你的对象在被repr函数调用的时候返回的内容。

Python学习笔记3

发表于 2018-01-23 | 阅读次数:
  • 在函数的第一个逻辑行的字符串是这个函数的 文档字符串 。注意,DocStrings也适用于模块和类
  • 文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述
  • Python把 每一样东西 都作为对象
  • 强烈建议 你对你所写的任何正式函数编写文档字符串。随你的Python发行版附带的pydoc命令,与help()类似地使用DocStrings。(?)
  • 为了在其他程序中重用模块,模块的文件名必须以.py为扩展名.我们使用python命令运行using_sys.py模块,后面跟着的内容被作为参数传递给程序。Python为我们把它存储在sys.argv变量中。初始化过程仅在我们 第一次 输入模块的时候进行.“sys”是“system”的缩写. 脚本的名称总是sys.argv列表的第一个参数

    1
    2
    3
    4
    5
    6
    7
    import sys
    print 'The Command line arguments are:'
    for i in sys.argv:
    print i
    print '\n\nThe PYTHONPATH is', sys.path,'\n'
  • sys.path包含输入模块的目录名列表。我们可以观察到sys.path的第一个字符串是空的——这个空的字符串表示当前目录也是sys.path的一部分,这与PYTHONPATH环境变量是相同的。这意味着你可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。(??)

  • 字节编译的.pyc文件(???)
  • from..import语句(???)
  • 每个Python模块都有它的name,如果它是’main‘,这说明这个模块被用户单独运行,我们可以进行相应的恰当操作。
  • 数据结构基本上就是——它们是可以处理一些 数据 的 结构 。或者说,它们是用来存储一组相关数据的。
    在Python中有三种内建的数据结构——列表、元组和字典。
  • 可以在列表中添加 任何种类的对象 包括数甚至其他列表
  • 在print语句的结尾使用了一个 逗号 来消除每个print语句自动打印的换行符
  • 列表是可变的,字符串是不可变的
  • 有0个或1个项目的元组。一个空的元组由一对空的圆括号组成,如myempty = ()。然而,含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和表达式中一个带圆括号的对象。即如果你想要的是一个包含项目2的元组的时候,你应该指明singleton = (2 , )
  • 序列的两个主要特点是索引操作符和切片操作符。索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列。
  • shoplist[-1]表示序列的最后一个元素而shoplist[-2]抓取序列的倒数第二个项目。
  • 切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾.注意,返回的序列从开始位置 开始 ,刚好在 结束 位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。
  • 序列的神奇之处在于你可以用相同的方法访问元组、列表和字符串。
  • 大多数解释已经在程序的注释中了。你需要记住的只是如果你想要复制一个列表或者类似的序列或者其他复杂的对象(不是如整数那样的简单 对象 ),那么你必须使用切片操作符来取得拷贝。
  • 记住列表的赋值语句不创建拷贝。你得使用切片操作符来建立序列的拷贝。
  • str类也有以一个作为分隔符的字符串join序列的项目的整洁的方法,它返回一个生成的大字符串。

Python学习笔记2

发表于 2018-01-22 | 阅读次数:
  • 标识符大小写敏感
  • Python即是面向对象,也是面向过程的语言
  • 使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。
  • 物理行是你在编写程序时所 看见 的。逻辑行是Python 看见 的单个语句。Python假定每个 物理行 对应一个 逻辑行 。默认地,Python希望每行都只使用一个语句,这样使得代码更加易读。
  • 暗示的行连接(?)
  • 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)
  • 要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用 单个制表符 或 两个或四个空格 。
    选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。(关键是怎样使用单个制表符呢?所以第4章 基本概念 缩进 没有很看懂)
  • 默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果你想要改变它们的计算顺序,你得使用圆括号。
  • 运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。
  • print ‘Area is’,2 注意Python如何打印“漂亮的”输出。尽管我们没有在’Area is’和变量area之间指定空格,Python自动在那里放了一个空格,这样我们就可以得到一个清晰漂亮的输出,而程序也变得更加易读(因为我们不需要担心输出之间的空格问题)。这是Python如何使程序员的生活变得更加轻松的一个例子。(what? 好棒!!)
  • 字符串
  1. 使用单引号(’)
  2. 使用双引号(”)
  3. 使用三引号(’’’或”””)
  4. 转义符
  5. 自然字符串
  6. Unicode字符串
  7. 字符串是不可变的
  8. 按字面意义级连字符串
  • 变量打印,
    print i
    print i;print s;
    print \
    i
    print ‘Area is’,area
  • 在Python中有三种控制流语句——if、for和while。
  • 看到控制流语句,差不多知道了缩放的含义,每个缩进层一个制表符
  • 记住,你可以在while循环中使用一个else从句。
  • for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目(I don’t understand)
  • break语句是用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句。
    一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块将不执行。
  • 使用global语句可以清楚地表明变量是在外面的块定义的,你可以使用同一个global语句指定多个全局变量。例如global x, y, z。
  • 默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的.只有在形参表末尾的那些参数可以有默认参数值
  • 关键参数:如果你的某个函数有许多参数,而你只想指定其中的一部分,那么你可以通过命名来为这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。
  • None是Python中表示没有任何东西的特殊类型
  • pass语句在Python中表示一个空的语句块。
  • 除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句

Python学习笔记 1

发表于 2018-01-19 | 阅读次数:

最近闲来无事,准备学习一下Python。

第一章 介绍

Python的特色

官方介绍:Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。

  • 简单
  • 易学
  • 免费、开源
  • 高层语言
  • 可移植性
  • 解释性 (更易于移植)
  • 面向对象
    Python即支持面向过程的编程也支持面向对象的编程
  • 可扩展性
  • 可嵌入性
  • 丰富的库
    Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。
    除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
    Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。

Android Tips

发表于 2018-01-19 | 阅读次数:
  • Unity 与 Android (Android Studio)的交互问题研究 (一)
  • Unity调用 接口实践与总结(包含Eclipse 和 AndroidStudio)
  • [转] 你需要知道的Android拍照适配方案
    前几天做安卓的拍照,真是够折腾的,因为安卓设备的不同会遇到各种不同的问题,这篇安卓拍照适配方案倒是解决了一大部分问题。
    http://www.jianshu.com/p/f269bcda335f
    http://www.jianshu.com/p/66c35c81f4b9
    http://blog.csdn.net/findsafety/article/details/11529177
    http://bbs.csdn.net/topics/390768699
    http://www.piaoyi.org/mobile-app/Android-MIUI-BUG-photo-activity.html
  • android 打开相机 相册问题
    https://stackoverflow.com/questions/3528735/failed-binder-transaction-when-putting-an-bitmap-dynamically-in-a-widget
    http://www.2cto.com/kf/201210/164401.html
    http://dengyin2000.iteye.com/blog/1235515
  • android studio 修改包名
    我们只需要在setting里面,把 compact empty middle packages 这个选项去掉,这样,我们的包的层次结构就分开了,这个时候我们就可以根据自己的需要去做相应的修改了。

另外说明一点,在 Studio 里面我们的 getPackageName 对应的是 applicationId , 而manifest 的那个package,在这里的作用其实是为了引用内部资源文件,以及保证 Activity 等源文件的路径正确而已,所以,在 Studio 中修改发布程序包名,则只需要在 build 文件中修改 applicationId 就可以了。
paste image

Android logcat 相关方法

发表于 2018-01-19 | 阅读次数:

Log 信息级别:

Log.v - VERBOSE : 黑色
Log.d - DEBUG : 蓝色
Log.i- INFO : 绿色
Log.w- WARN : 橙色
Log.e- ERROR : 红色
从上而下级别逐次增加

  1. 过滤:指定标签,指定级别
    adb logcat abc:I // Log.i(“abc”,”dafhdjo”); 输出 abc的I 和I 级别以上的log
    adb logcat abc:I *:S 只输出abc的I,过滤其他Log
  2. 清空 adb logcat -c
  3. 显示所有优先级大于等于”warning”的日志
    adb logcat *:W
  4. 将日志保存到文件test.log
    adb logcat > c:\test.log
  5. 显示全部日志 adb logcat
  6. 仅输出标记为“ActivityManager”且优先级大于等于“Info”和标记为“PowerManagerService”并且优先级大于等于“Debug”的日志:
    adb logcat ActivityManager:I PowerManagerService:D *:S
  7. 显示Unity的日志信息 adb logcat -s Unity

Unity Tips 2

发表于 2018-01-19 | 阅读次数:
  • 感觉这个中文教程,还是挺好的。有什么忘记的点,可以过来参考
    Unity 简明教程
  • 物体运动相关
    走进Transform–物体的运动
    简单的物体运动和外力作用
  • 浅谈C#中常见的委托
  • C#编码规范
  • 网络通信UTP与TCP最基本区别
  • COCOS
    Cocos2d-x 用户手册
    C++

AR,VR,Google Cardboard

发表于 2018-01-19 | 阅读次数:
  • 简易盒子Googe CardBoard
  • ARCORE
AR 物体注意点

转自:http://forum.china.unity3d.com/thread-24427-1-1.html

ImageTarget

Vuforia支持多种方式来创建AR体验,但几乎所有方式都基于指定识别目标供Vuforia算法识别后开始处理增强现实的渲染。您可以自己设置目标后上传到Vuforia的目标管理器,以供系统进行识别。目标设计需要遵循一些特定规则,否则可能无法被准确识别。

尤为重要的是ImageTarget类型的目标,因为Vuforia中很多目标类型都是由多个ImageTarget按照特定位置与顺序组合而成的MultiTarget。设置ImageTarget有三条主要规则:

细节必须丰富;
图片明暗区域对比度必须足够强;
不包含任意重复模式。
Vuforia会通过SDK的功能为图片创建一个顺序,然后利用算法来匹配图片的模式并追踪目标。大致来说,图像特征就是一个锐角,类似正方形或五角星的角。而特征的数量将直接影响图像目标的“可识别度”。

  • Unity+高通Vuforia SDK——AR
  • 高通Vuforia+Unity——实现简单的AR功能
  • Vuforia官网
  • 【苹果ARKit教程】零基础,17分钟制作AR丧尸游戏

Unity Tips 1

发表于 2018-01-12 | 阅读次数:
  • Unity 官方优化 A1A2

  • 自动设置 图片 为Sprite

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class AutoSetUISprite : AssetPostprocessor
    {
    void OnPreprocessTexture()
    {
    //自动设置类型;
    string dirName = System.IO.Path.GetDirectoryName(assetPath);
    if(dirName.Contains("UI"))
    {
    TextureImporter textureImporter = (TextureImporter)assetImporter;
    textureImporter.textureType = TextureImporterType.Sprite;
    textureImporter.spriteImportMode = SpriteImportMode.Single;
    textureImporter.alphaIsTransparency = true;
    textureImporter.mipmapEnabled = false;
    textureImporter.wrapMode = TextureWrapMode.Clamp;
    textureImporter.maxTextureSize = 1024;
    //自动设置打包tag;
    string folderStr = System.IO.Path.GetFileName(dirName);
    Debug.Log("Set Packing Tag --- " + folderStr);
    textureImporter.spritePackingTag = folderStr;
    }
    }
    }
  • 保持常亮:Screen.sleepTimeout = SleepTimeout.NeverSleep;

  • 设置材质:Sphere.gameObject.GetComponent().materials[0].SetTexture(“_MainTex”, textures[Index]);

  • AddListener传递参数

1
2
3
4
5
6
7
string name = radialMenu.buttons[i].ButtonIcon.name;
radialMenu.buttons[i].OnClick.AddListener(delegate() {
onClick(name);
});
  • 选择中心(Center) : 使用当前所选所有物体的共同轴心,
    选择轴心(Pivot) : 将使用各个物体的实际轴心
    Unity中的Transform Gizmo中的Pivot和Center
  • 关于Unity的ViewSpace(CameraSpace)的坐标系
  • Unity3D的四种坐标系
  • Unity 中的坐标系
  • [ExecuteInEditMode] 在Unity 编辑器模式显示OnGUI中的按钮什么的组件
  • 一次搞定unity编辑器常用功能
  • Unity的资源下载与缓存系统的实现
  • 关于Unity中的资源管理,你可能遇到这些问题
  • Unity5 新AssetBundle打包方式 BuildPipeline.BuildAssetBundles
  • AssetBundle系列——场景资源之打包(一)
  • C# 中文件路径的操作
  • Unity5的AssetBundle系统在mmo中的使用经验
  • Unity Resource Manager
  • Unity自动打包工具
  • BuildPipeline.BuildPlayer 编译播放器
  • unity项目持续集成dailybuild以及多平台打包管理
  • 【unity系统模块开发】Unity5.5.2UI打包AssetBundle
  • 你应该知道的AssetBundle管理机制
  • Unity游戏开发使用Assetbundle加载场景的原理
  • 三个先进的NavMesh技术来改善Unity Navigation
  • C# 正则表达式 使用介绍
  • Stream 和 byte[] 之间的转换
  • Unity WWW 加载资源路径

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //不同平台下StreamingAssets的路径是不同的,这里需要注意一下。
    public static readonly string PathURL =
    #if UNITY_ANDROID
    "file://" + Application.dataPath + "/../AssetBundles/";
    #elif UNITY_IPHONE
    //Application.dataPath + "/Raw/";
    "http://192.168.28.129/svn/project/kukuClient/AssetBundles/";
    #elif UNITY_STANDALONE_WIN || UNITY_EDITOR
    "file://" + Application.dataPath + "/../AssetBundles/";
    #else
    string.Empty;
    #endif
  • Unity官方文档Streaming Assets

UGUI Tips

发表于 2018-01-11 | 阅读次数:
  • RectTransform 讲解
  • Unity官方教學- UI Canvas(UGUI)
  • Canvas 与 Camera 层次关系探究
  • preferredHeight 获取不准确的问题

获取字体的高度
Text.preferredHeight,经测试:在设置大量字体之后,立刻获取此属性,获取的值并不是正确的,但在协程中等待当前帧结束获取的值,会比较接近。

测试文本:(用户协议),大概12KB,有12万个字符。

1
2
3
4
5
6
7
IEnumerator SetTextHeight()
{
yield return new WaitForEndOfFrame();
var height = ContentText.preferredHeight + 300;
//锚点使用stretch top ,-100是左右缩进50
ContentText.rectTransform.sizeDelta = new Vector2(-100, height);
}

  • 得到ToggleGroup中现在状态isOn=TRUE的Toggle

    1
    2
    3
    4
    public Toggle GetActiveToggle(ToggleGroup toggleGroup)
    {
    return toggleGroup.ActiveToggles().FirstOrDefault();
    }
  • UGUI Text 暂时的解决方案也就是用全角空格了 \u3000

UGUI 相关知识点,参考链接总结:
实现ScrollRect拖动到最底添加下一页内容
UGUI制作动态滑动列表scrollview
uGUI之AutoLayout详解——minHeight,preferredHeight,flexibleHeight
Layout Group and ContentSizeFitter in child
Making UI elements fit the size of their content
UGUI研究院之提前获取Text的宽度(十九)
ugui如何让长宽随宽度比例放大
Unity琐碎(3) UGUI 图文混排解决方案和优化
Unity UGUI实现图文混排

12…4
Lynn

Lynn

35 日志
2 分类
17 标签
GitHub 微博 Instagram
© 2021 Lynn
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.3