基础教程

基础教程

 

Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。
Python 由 Guido van Rossum 于 1989 年底发明,*个公开发行版发行于 1991 年。
像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。
官方宣布,2020 年 1 月 1 日, 停止 Python 2 的更新。
Python 2.7 被确定为*后一个 Python 2.x 版本。

在继续本教程之前,你应该了解一些基本的计算机编程术语。如果你学习过 PHP,ASP 等编程语言,将有助于你更快的了解 Python 编程。

执行Python程序
对于大多数程序语言,*个入门编程代码便是 “Hello World!”,以下代码为使用 Python 输出 “Hello World!”:

#!/usr/bin/python

print(“Hello, World!”)

Python 3.0+ 版本已经把 print 作为一个内置函数,输出 “Hello World!” 代码如下:

#!/usr/bin/python3

print(“Hello, World!”)

NFS与NAS

NAS是存储的一种方式 NAS可以是一个设备.也可以是一种存储网络的架构.

而NFS是一种协议.

两者有本质上的区别

 

NFS:
      NFS是Network File System的简写,即网络文件系统.
  网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
  NFS、DAS、NAS、SAN、iSCSI飞客数据恢复中心提供

以下是NFS*显而易见的好处:

1.本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。

2.用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。

3.诸如软驱,CDROM,和 Zip(是指一种高储存密度的磁盘驱动器与磁盘)之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。

DAS:
    开放系统的直连式存储(Direct-Attached Storage,简称DAS)已经有近四十年的使用历史,随着用户数据的不断增长,尤其是数百GB以上时,其在备份、恢复、扩展、灾备等方面的问题变得日益困扰系统管理员。
    直连式存储依赖服务器主机操作系统进行数据的IO读写和存储维护管理,数据备份和恢复要求占用服务器主机资源(包括CPU、系统IO等),数据流需要回流主机再到服务器连接着的磁带机(库),数据备份通常占用服务器主机资源20-30%,因此许多企业用户的日常数据备份常常在深夜或业务系统不繁忙时进行,以免影响正常业务系统的运行。直连式存储的数据量越大,备份和恢复的时间就越长,对服务器硬件的依赖性和影响就越大。

直连式存储与服务器主机之间的连接通道通常采用SCSI连接,带宽为10MB/s、20MB/s、40MB/s、80MB/s等,随着服务器CPU的处理能力越来越强,存储硬盘空间越来越大,阵列的硬盘数量越来越多,SCSI通道将会成为IO瓶颈;服务器主机SCSI ID资源有限,能够建立的SCSI通道连接有限。

  无论直连式存储还是服务器主机的扩展,从一台服务器扩展为多台服务器组成的群集(Cluster),或存储阵列容量的扩展,都会造成业务系统的停机,从而给企业带来经济损失,对于银行、电信、传媒等行业7×24小时服务的关键业务系统,这是不可接受的。并且直连式存储或服务器主机的升级扩展,只能由原设备厂商提供,往往受原设备厂商限制。
 
NAS:
    NAS(Network Attached Storage:网络附属存储)是一种将分布、独立的数据整合为大型、集中化管理的数据中心,以便于对不同主机和应用服务器进行访问的技术。按字面简单说就是连接在网络上, 具备资料存储功能的装置,因此也称为“网络存储器”。它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能、降低总拥有成本、保护投资。其成本远远低于使用服务器存储,而效率却远远高于后者。 目前国际著名的NAS企业有Netapp、EMC、OUO等。国内尚无有竞争力的NAS企业。

               NAS被定义为一种特殊的专用数据存储服务器,包括存储器件(例如磁盘阵列、CD/DVD驱动器、磁带驱动器或可移动的存储介质)和内嵌系统软件,可提供跨平台文件共享功能。NAS通常在一个LAN上占有自己的节点,无需应用服务器的干预,允许用户在网络上存取数据,在这种配置中,NAS集中管理和处理网络上的所有数据,将负载从应用或企业服务器上卸载下来,有效降低总拥有成本,保护用户投资。

  NAS本身能够支持多种协议(如NFS、CIFS、FTP、HTTP等),而且能够支持各种操作系统。通过任何一台工作站,采用IE或Netscape浏览器就可以对NAS设备进行直观方便的管理。
SAN:
      SAN全称叫做存储域网络(Storage Area Network)。
       SAN是一个专有的、集中管理的信息基础结构,它支持服务器和存储之间任意的点到点的连接,SAN集中体现了功

能分拆的思想,提高了系统的灵活性和数据的安全性。SAN以数据存储为中心,采用可伸缩的网络拓扑结构,通过具有较高传输速率的光通道连接方式,提供SAN内部任意节点之间的多路可选择的数据交换,并且将数据存储管理集中在相对独立的存储区域网内。在多种光通道传输协议逐渐走向标准化并且跨平台群集文件系统投入使用后,SAN*终将实现在多种操作系统下,*大限度的数据共享和数据优化管理,以及系统的无缝扩充。SAN是独立出一个数据存储网络,网络内部的数据传输率很快,但操作系统仍停留在服务器端,用户不是在直接访问SAN的网络,因此这就造成SAN在异构环境下不能实现文件共享。为了很好的理解SAN,我们可以通过图来看其结构。

我们可以看到,SAN的特点是将数据的存储移到了后端,采用了一个专门的系统来完成,并进行了RAID数据保护。

iSCSI:
    iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface)。
    iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。
SAN 和NAS的区别:

SAN是一种网络,NAS产品是一个专有文件服务器或一个只读文件访问设备。

SAN是在服务器和存储器之间用作I/ O路径 的专用网络。

SAN包括面向块(SCIS)和面向文件(NAS)的存储产品。

NAS产品能通过SAN连接到存储设备

NAS的外观

NAS是功能单一的精简型电脑,因此在架构上不像个人电脑那么复杂,像键盘、鼠标、荧幕、音效卡、喇叭、扩充漕、各式连接口等都不需要;在外观上就像家电产品,只需电源与简单的控制钮。NAS在架构上与个人电脑相似,但因功能单纯,可移除许多不必要的连接器、控制晶片、电子回路,如键盘、鼠标、USB、VGA等。

NAS数据存储的优点

*,NAS适用于那些需要通过网络将文件数据传送到多台客户机上的用户。NAS设备在数据必须长距离传送的环境中可以很好地发挥作用。

第二,NAS设备非常易于部署。可以使NAS主机、客户机和其他设备广泛分布在整个企业的网络环境中。NAS可以提供可靠的文件级数据整合,因为文件锁定是由设备自身来处理的。

第三,NAS应用于高效的文件共享任务中,不同的主机与客户端通过文件共享协定存取NAS上的资料,实现文件共享功能,例如UNIX中的NFS和Windows NT中的CIFS,其中基于网络的文件级锁定提供了高级并发访问保护的功能。

中文编码

中文编码

订阅专栏
前面章节中我们已经学会了如何用 Python 输出 “Hello, World!”,英文没有问题,但是如果你输出中文字符 “你好,世界” 就有可能会碰到中文编码问题。

Python 文件中如果未指定编码,在执行过程会出现报错:

#!/usr/bin/python

print (“你好,世界”)

以上程序执行输出结果为:

File “test.py”, line 2
SyntaxError: Non-ASCII character ‘\xe4’ in file test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。

解决方法为只要在文件开头加入 # — coding: UTF-8 — 或者 # coding=utf-8 就行了

注意:# coding=utf-8 的 = 号两边不要空格。

实例(Python 2.0+)
#!/usr/bin/python
# -*- coding: UTF-8 -*-

print( “你好,世界” )

输出结果为:

你好,世界

所以如果大家在学习过程中,代码中包含中文,就需要在头部指定编码。

**注意:**Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。

**注意:**如果你使用编辑器,同时需要设置 py 文件存储的格式为 UTF-8,否则会出现类似以下错误信息:

SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xc4 in position 0:
invalid continuation byte

Pycharm 设置步骤:

进入 file > Settings,在输入框搜索 encoding。
找到 Editor > File encodings,将 IDE Encoding 和 Project Encoding 设置为utf-8。

%title插图%num

Python语言及其特点简介

Python语言及其特点简介

订阅专栏
虽然软件产业的历史相对于人类历史只是白驹过隙,但世界上却存在非常多的编程语言,「Python」 就是其中之一。

Python 语言算得上一门“古老”的编程语言,Python 流行这么久,必然有它的独到之处,本节我们简单介绍 Python 的相关情况。

Python 简史
Python 由 Guido van Rossum 于 1989 年年底出于某种娱乐目的而开发, Python 语言是基于 ABC 教学语言的,而 ABC 这种语言非常强大,是专门为非专业程序员设计的。但 ABC 语言并没有获得广泛的应用, Guido 认为是非开放造成的。

Python 的“出身”部分影响了它的流行,Python 上手非常简单,它的语法非常像自然语言,对非软件专业人士而言,选择 Python 的成本*低,因此某些医学甚至艺术专业背景的人,往往会选择 Python 作为编程语言。

Guido 在 Python 中避免了 ABC 不够开放的劣势,Guido 加强了 Python 和其他语言如 C、C++ 和 Java 的结合性。此外,Python 还实现了许多 ABC 中未曾实现的东西,这些因素大大提高了 Python 的流行程度。

2008 年 12 月,Python 发布了 3.0 版本(也常常被称为 Python 3000,或简称 Py3k)。Python 3.0 是一次重大的升级,为了避免引入历史包袱,Python 3.0 没有考虑与 Python 2.x 的兼容。这样导致很长时间以来,Python 2.x 的用户不愿意升级到 Python 3.0,这种割裂一度影响了 Python 的应用。

毕竟大势不可抵挡,开发者逐渐发现 Python 3.x 更简洁、更方便。现在,*大部分开发者已经从 Python 2.x 转移到 Python 3.x,但有些早期的 Python 程序可能依然使用了 Python 2.x 语法。

2009 年 6 月,Python 发布了 3.1 版本。
2011 年 2 月,Python 发布了 3.2 版本。
2012 年 9 月,Python 发布了 3.3 版本。
2014 年 3 月,Python 发布了 3.4 版本。
2015 年 9 月,Python 发布了 3.5 版本。
2016 年 12 月,Python 发布了 3.6 版本。

本教程将以 Python 3.x 来介绍 Python 编程,也会简单对比 Python2.x 与 Python 3.x 的语法差异。

目前,由于大数据、人工智能(AI)的流行,Python 变得比以往更加流行。在*新的 TIOBE 编程语言排行榜上, Python 己经迅速上升到第 4 位,仅次于 Java、C、C++。

Java 占据了世界上*大部分电商、全融、通信等服务端应用开发,而 C、C++ 占据了世界上*大部分贴近操作系统的硬件编程,这三门语言的地位太难动摇了。

Python 的特点
Python 是一种面向对象、解释型、弱类型的脚本语言,它也是一种功能强大而完善的通用型语言。

相比其他编程语言(比如 Java),Python 代码非常简单,上手非常容易。比如我们要完成某个功能,如果用 Java 需要 100 行代码,但用 Python 可能只需要 20 行代码,这是 Python 具有巨大吸引力的一大特点。

Python 的两大特色是清晰的语法和可扩展性:

Python 的语法非常清晰,它甚至不是一种格式自由的语言。例如,它要求 if 语句的下一行必须向右缩进,否则不能通过编译。
Python 的可扩展性体现为它的模块,Python 具有脚本语言中*丰富和强大的类库(这些类库被形象地称为“batteries included ,内置电池”),这些类库覆盖了文件 I/O、GUI、网络编程、数据库访问、文本操作等*大部分应用场景。
此外,Python 的社区也很发达,即使一些小众的应用场景,Python 往往也有对应的开源模块来提供解决方案。

Python 作为一门解释型的语言,它天生具有跨平台的特征,只要为平台提供了相应的 Python 解释器,Python 就可以在该平台上运行。

解释型语言几乎天然是跨平台的。

Python 自然也具有解释型语言的一些弱点:

速度慢:Python 程序比 Java、C、C++ 等程序的运行效率都要慢。
源代码加密困难:不像编译型语言的源程序会被编译成目标程序,Python 直接运行源程序,因此对源代码加密比较困难。
上面两个问题其实不是什么大问题,关于*个问题,由于目前计算机的硬件速度越来越快,软件工程往往更关注开发过程的效率和可靠性,而不是软件的运行效率;至于第二个问题,则更不是问题了,现在软件行业的大势本来就是开源,就像 Java 程序同样很容易反编译,但丝毫不会影响它的流行。

编译型语言和解释型语言的区别?

编译型语言和解释型语言的区别?

订阅专栏
计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:

1.编译
2.解释

由此高级语言也分为编译型语言和解释型语言。

主要区别在于,前者源程序编译后即可在该平台运行,后者是在运行期间才编译。所以前者运行速度快,后者跨平台性好。

编译型语言
使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。

特点
在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。

总结

1.一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;

2.与特定平台相关,一般无法移植到其他平台;

3.现有的C、C++、Objective等都属于编译型语言。

解释型语言
使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。

特点

解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。

总结

1.解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;

2.只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;

编译型与解释型,两者各有利弊
前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。

PATH环境变量解释与设置

PATH环境变量解释与设置

1.PATH环境变量的涵义

PATH环境变量存储的是路径,当我们在命令行下输入一个命令如ls时,linux就会PATH表示的路径中查找,路径之间用;隔开

例如

%title插图%num
ls在/bin目录下,而/bin存在PATH环境变量中。因此在任意位置执行ls,linux都能正确执行

2.设置环境变量

export命令用于设置或者显示环境变量。所以,设置PATH环境变量的代码为

export PATH=新的路径:$PATH
$PATH表示环境变量PATH

但这种方法是暂时的,重启注销之后就失效了,永久性的方法有两种
*种方法:

在用户主目录下有一个 .bashrc 文件,可以在此文件中加入 PATH 的设置如下:

export PATH=”$PATH:/your path1/:/your path2/…..”

注意:每一个 path 之间要用 “:“ 分隔。

注销重启 就可以了,也可输入 source etc/profile,动态加载。

第二种方法:

在 /etc/profile中增加。

export PATH=”$PATH:/home/zhengb66/bin”

输入source etc/profile,动态加载。

Python包管理工具pip的安装和使用

Python包管理工具pip的安装和使用

订阅专栏
本文讲述的核心库:pip

pip是python的一个非常好用的包管理工具,可以用来很方便地安装和管理各种三方库,本文对其基本用法进行介绍。

安装pip
Windows系统上安装
python 2.7.9及以上版本的windows版的安装包已经集成了pip,所以到python.org网站下载python-2.7.9.amd64.msi安装包并安装。
安装时选择”安装pip”。
安装好后添加python.exe和pip.exe文件所在路径到系统环境变量中。这两个路径分别为(假设我的python安装在了D:\Programs\Python27目录下):
D:\Programs\Python27
D:\Programs\Python27\Scripts
1
2
测试:打开cmd,输入:pip install web.py
进入python命令行,输入:import web,若导入成功则说明pip安装成功。
Linux系统上安装
到pypi.python.org上搜索pip,下载*新版本的源码压缩包。
在本地解压源码压缩包,进入源码路径,执行:python setup.py install即可安装。
测试:打开cmd,输入:pip install web.py
进入python命令行,输入:import web,若导入成功则说明pip安装成功。
注:ubuntu系统可以直接使用该命令安装:sudo apt-get install python-pip
pip常用命令
安装软件包:pip install 包名
注:这里的包名,也可以是已经下载好的whl文件或tar.gz压缩包文件路径,或者包所在的URL地址。
升级pip自身:pip install –upgrade pip
查看已经通过pip安装的包:pip list
显示当前已经通过pip安装的包及版本号:pip freeze,显示结果示例:
certifi==2017.7.27.1
chardet==3.0.4
idna==2.5
requests==2.18.2
urllib3==1.22
virtualenv==15.1.0
web.py==0.38

将pip freeze命令的结果重定向到requirements.txt文件中:pip freeze > requirements.txt
使用已有的requirements.txt文件在另一个环境上安装各种包(比如在一台新电脑上):pip install -r requirements.txt
注:这个命令的好处就是,如果换了一个新的环境需要安装一个相同的python环境,那么只需要有requirements.txt文件即可快速安装,就不需要再思考要安装哪些包了。
查看某个已经安装的包的详情:pip show 包名
查看过期的包:pip list –outdated
安装包到用户目录:pip install 包名 –user
安装本地的安装包:pip install 目录|文件名
卸载包:pip uninstall 包名
升级包:pip install 包名 –upgrade
显示包所在目录:pip show -f 包名
搜索包:pip search 关键字
查询可升级的包:pip list -o
下载包但不安装:pip install 包名 -d 目录
打包:pip wheel 包名
pip镜像源的设置与使用
国内pip镜像

豆瓣:http://pypi.douban.com/simple
中科大:http://pypi.mirros.ustc.edu.cn/simple
注:使用国内的镜像源,安装各种包速度会快一些。

指定单次安装源

pip install 包名 -i 镜像url

指定全局安装源

pip配置文件:

Unix、Mac OS的pip配置文件位于:$HOME/.pip/pip.conf
Windows的pip配置文件位于:%HOME%\pip\pip.ini
注:Windows下%HOME%路径一般为:C:\Users<UserName>\
往pip配置文件写入如下内容(如果没有配置文件则在相应路径新建一个),这里以豆瓣的镜像为例:

[global]
trusted-host=pypi.douban.com
timeout=6000
index-url=http://pypi.douban.com/simple

一个经验:如果在指定国内的镜像源后,安装某些库速度还是比较慢,那么可以直接在浏览器打开镜像源网站地址(比如:http://pypi.douban.com/simple),在浏览器中直接搜索并下载所需的库,然后使用命令pip install <文件名>进行安装。如果搜索不到需要的库,还可以去这里碰碰运气:http://www.lfd.uci.edu/~gohlke/pythonlibs/,这是加利福尼亚大学尔湾分校一个生物医学研究中心的网站,上面有非常非常丰富的已经打包好的各种Python库的whl文件,堪称”Python轮子博物馆”。

基础语法

基础语法

 

Python零基础学习
从零开始,教你语法、实战案例,快速搭建属于自己的python学习路线!
Python学长
¥9.90
订阅专栏
编码
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:

# -*- coding: cp-1252 -*-
1
上述定义允许在源文件中使用 Windows-1252 字符集中的字符编码,对应适合语言为保加利亚语、白罗斯语、马其顿语、俄语、塞尔维亚语。

标识符
*个字符必须是字母表中字母或下划线 _ 。
标识符的其他的部分由字母、数字和下划线组成。
标识符对大小写敏感。
在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。

python保留字
保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:

>>> import keyword
>>> keyword.kwlist
[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

注释
Python中单行注释以 # 开头,实例如下:

#!/usr/bin/python3

# *个注释
print (“Hello, Python!”) # 第二个注释

执行以上代码,输出结果为:

Hello, Python!

多行注释可以用多个 # 号,还有 ‘’’ 和 “””:

#!/usr/bin/python3

# *个注释
# 第二个注释

”’
第三注释
第四注释
”’

“””
第五注释
第六注释
“””
print (“Hello, Python!”)

执行以上代码,输出结果为:

Hello, Python!

行与缩进
python*具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:

if True:
print (“True”)
else:
print (“False”)

以下代码*后一行语句缩进数的空格数不一致,会导致运行错误:

if True:
print (“Answer”)
print (“True”)
else:
print (“Answer”)
print (“False”) # 缩进不一致,会导致运行错误

以上程序由于缩进不一致,执行后会出现类似以下错误:

File “test.py”, line 6
print (“False”) # 缩进不一致,会导致运行错误
^
IndentationError: unindent does not match any outer indentation level

多行语句
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠()来实现多行语句,例如:

total = item_one + \
item_two + \
item_three

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(),例如:

total = [‘item_one’, ‘item_two’, ‘item_three’,
‘item_four’, ‘item_five’]

数字(Number)类型
python中数字有四种类型:整数、布尔型、浮点数和复数。

int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
bool (布尔), 如 True。
float (浮点数), 如 1.23、3E-2
complex (复数), 如 1 + 2j、 1.1 + 2.2j
字符串(String)
python中单引号和双引号使用完全相同。
使用三引号(’’’或”””)可以指定一个多行字符串。
转义符 ‘’
反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r”this is a line with \n” 则\n会显示,并不是换行。
按字面意义级联字符串,如”this ” “is ” “string”会被自动转换为this is string。
字符串可以用 + 运算符连接在一起,用 * 运算符重复。
Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
Python中的字符串不能改变。
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
word = ‘字符串’
sentence = “这是一个句子。”
paragraph = “””这是一个段落,
可以由多行组成”””

#!/usr/bin/python3

str=’Runoob’

print(str) # 输出字符串
print(str[0:-1]) # 输出*个到倒数第二个的所有字符
print(str[0]) # 输出字符串*个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str * 2) # 输出字符串两次
print(str + ‘你好’) # 连接字符串

print(‘——————————‘)

print(‘hello\nrunoob’) # 使用反斜杠(\)+n转义特殊字符
print(r’hello\nrunoob’) # 在字符串前面添加一个 r,表示原始字符串,不会发生转义

这里的 r 指 raw,即 raw string。
输出结果为:

Runoob
Runoo
R
noo
noob
RunoobRunoob
Runoob你好
——————————
hello
runoob
hello\nrunoob

空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
**记住:**空行也是程序代码的一部分。

等待用户输入
执行下面的程序在按回车键后就会等待用户输入:

#!/usr/bin/python3

input(“\n\n按下 enter 键后退出。”)

以上代码中 ,”\n\n”在结果输出前会输出两个新的空行。一旦用户按下enter 键时,程序将退出。

同一行显示多条语句
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,以下是一个简单的实例:

#!/usr/bin/python3

import sys; x = ‘runoob’; sys.stdout.write(x + ‘\n’)

使用脚本执行以上代码,输出结果为:

runoob
1
使用交互式命令行执行,输出结果为:

>>> import sys; x = ‘runoob’; sys.stdout.write(x + ‘\n’)
runoob

此处的 7 表示字符数。

多个语句构成代码组
缩进相同的一组语句构成一个代码块,我们称之代码组。
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。
我们将首行及后面的代码组称为一个子句(clause)。

如下实例:

if expression :
suite
elif expression :
suite
else :
suite

Print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=””:

#!/usr/bin/python3

x=”a”
y=”b”
# 换行输出
print( x )
print( y )

print(‘———‘)
# 不换行输出
print( x, end=” ” )
print( y, end=” ” )
print()

以上实例执行结果为:

a
b
———
a b

import 与 from…import
在 python 用 import 或者 from…import 来导入相应的模块。
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *

导入 sys 模块
import sys
print(‘================Python import mode==========================’)
print (‘命令行参数为:’)
for i in sys.argv:
print (i)
print (‘\n python 路径为’,sys.path)

导入 sys 模块的 argv,path 成员
from sys import argv,path # 导入特定的成员

print(‘================python from import===================================’)
print(‘path:’,path) # 因为已经导入path成员,所以此处引用时不需要加sys.path

命令行参数
很多程序可以执行一些操作来查看一些基本信息,Python可以使用-h参数查看各参数帮助信息:

$ python -h
usage: python [option] … [-c cmd | -m mod | file | -] [arg] …
Options and arguments (and corresponding environment variables):
-c cmd : program passed in as string (terminates option list)
-d : debug output from parser (also PYTHONDEBUG=x)
-E : ignore environment variables (such as PYTHONPATH)
-h : print this help message and exit

[ etc. ]

我们在使用脚本形式执行 Python 时,可以接收命令行输入的参数

Python变量和常量

Python变量和常量

 

Python零基础学习
从零开始,教你语法、实战案例,快速搭建属于自己的python学习路线!
Python学长
¥9.90
订阅专栏
变量:定义世间万物变化的状态
height 180
weight 140
age 18
tree_name yuyang

print(180)

height = 180
print(‘height:’, height)
weight = 140
print(‘weight:’, weight)
age = 18
print(‘age:’, age)
tree_name = ‘yuyang’
print(‘tree_name:’, tree_name)

变量的组成(符合变量名组成就不错)
变量名(描述;接收变量值) 赋值符号(赋值,把变量值传给变量名) 变量值(具体的值)

变量名的规范
akljfdksl = 10
print(‘akljfdksl:’, akljfdksl)

变量名必须要有描述意义
变量名由数字/字母/下划线组成,且不能以数字开头
$ = 10
print($)
10tree = 10
print(10tree)

不能以关键字命名
[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’,
‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’,
‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

定义变量的两种方式(代码至上而下运行,如果相同的变量名,执行后面的)
下划线一般用来连接单词

name_of_nick = ‘nick’ # 下划线式(建议,必须)

NameOfJason = ‘jason’ # 驼峰体

print(name_of_nick) # 先定义才能使用,没有引号的就是变量名

常量:不变化的量(变量名全大写)
age = 1
age = age + 1
print(age)

常量:不变化是约定俗成的
AGE = 1

AGE = AGE + 1

常量:约定俗称的不变化,实际能变化,但是当你强行变化的时候,你第二天就滚蛋了

python内存管理
变量是python解释器提供的概念,运行python的时候才有
定义变量并运行 开辟一块新的内存空间存储变量

引用计数(针对变量值):变量值的引用次数

# age = 1000 # 1000的引用计数为1
# age1 = age # 1000的引用计数为2
# del age # delete删除age,1000的引用计数为1
# print(age1)
# del age1 # 1000的引用计数为0

**垃圾回收机制:**当一个变量值的引用计数为0的时候,会触发垃圾回收机制,改变量值会被回收

# # id
# age = 1000
# print(age) # 打印值
# print(id(age)) # 1507487488变量值的内存地址
# # 小整数池
# age1 = age
# print(id(age1))

当python启动的时候,会自动定义[-5,256]之间的整数变量,他们的内存空间已经写死了

# age = 10
# age1 = age
# del age
# del age1

按理来说因该触发垃圾回收机制,但是由于10属于小整数池,不会触发垃圾回收机制
面试的时候可能会问你,这个才能考到你的水平 —》 gil全局解释器锁

变量名用来接收变量值
定义变量就要开辟新的内存空间

# pycharm自行做了优化(短频快),pycharm把小整数池范围扩大了
# 打印值
print(age)

# 打印内存地址
print(id(age))

# 打印数据类型()
print(type(age))

Android 项目中用得*多*火的第三方框架可能都在这里了!

平时总会发现一些大家都比较推崇的第三方框架,觉得非常不错暂时又用不到,于是就打算把它们都收藏起来,需要用到的时候就不用到处问到处搜了。收藏得多了,本着热爱分享拥抱开源的思想,于是贴出来给大家分享交流。如有纰漏,敬请拍砖指正。

欢迎众收藏爱好者补充或指正!

 

分类 二级分类 框架名称 简介 Star 数 *近
更新
UI 刷新 SmartRefreshLayout 智能下拉刷新框架 11k 1天
UI 刷新 Android-PullToRefresh 比较早的一款下拉刷新框架 8.6k 5年
UI 刷新 android-Ultra-Pull-To-Refresh 下拉刷新框架 9.0k 2年
UI 刷新 BeautifulRefreshLayout 众多优秀的下拉刷新汇总 2.0k 2年
UI 图表 MPAndroidChart 统计图表库 21k 1天
UI 图表 hellocharts-android 统计图表库 5.7k 1月
UI 图表 smartTable 自动生成表格框架 1.7k 23天
UI 图表 AdaptiveTableLayout 可阅读与编辑CSV文件的库 1.4k 8月
UI 图表 TableView 绘制表格 1.5k 4天
UI 菜单 SlidingMenu 比较早的一款侧滑菜单 10k 4年
UI 菜单 MaterialDrawer 侧滑菜单 9.1k 1月
UI 菜单 SwipeBackLayout 类似QQ侧滑菜单 5.0k 8天
UI 图片 PhotoView 大图展示 12k 3月
UI 图片 subsampling-scale-image-view 大图展示 4.0k 1月
UI 图片 CircleImageView 圆形图片 9.6k 1月
UI 图片 uCrop 图片剪裁 7.0k 24天
UI 图片 android-gif-drawable Gif 加载 6.0k 3天
UI 图片 Matisse 图片\视频选择库 6.7k 1天
UI 文本 richeditor-android 富文本编辑器 3.7k 1年
UI 弹窗 material-dialogs 可定制化的 Dialog API 13k 12天
UI 弹窗 Toasty 定制不一样的 Toast 4.1k 11天
UI 弹窗 DialogUtil Dialog 工具 0.7k 15天
UI 弹窗 android-adDialog 广告弹窗 2.3k 1年
UI 导航 ViewPagerIndicator ViewPager 指示器 9.7k 5年
UI 导航 BottomBar 底部导航栏 7.7k 4月
UI 导航 FlycoTabLayout TabLayout 库 6.3k 1年
UI 布局 flexbox-layout Android 弹性 / 流式布局 11k 1月
UI 布局 AndroidAutoLayout 屏幕适配布局 6.0k 10月
UI 布局 FlowLayout 流式布局 3.6k 1月
UI 布局 vlayout 整套布局方案和组件复用 7.8k 23天
UI 滑动删除 AndroidSwipeLayout 滑动删除 9.9k 9月
UI 滚动 Android-ObservableScrollView 监听可滚动 View 的滚动事件 8.7k 2年
UI 列表 UltimateRecyclerView 功能强大的 RecyclerView 6.5k 1月
UI 选择器 Android-PickerView 仿 iOS 的选择控件 7.1k 19天
UI 选择器 AndroidPicker 安卓选择器类库 3.5k 3月
UI 下拉菜单 DropDownMenu 多条件筛选菜单 2.7k 1年
UI 轮播图 banner 广告图片轮播控件 5.8k 4月
UI 轮播图 Android-ConvenientBanner 通用的广告栏控件 3.5k 5天
UI WebView AgentWeb 高度封装的 WebView 3.6k 14天
UI 高斯模糊 500px-android-blur 高斯模糊控件 2.2k 1年
UI 高斯模糊 BlurKit-Android 高斯模糊控件 2.3k 1年
UI 角标 android-viewbadger 角标 / 徽章 2.9k 5年
UI 角标 BGABadgeView-Android 徽章控件 1.9k 24天
UI 其他 AndroidSlidingUpPanel 上拉面板 7.5k 7月
UI 其他 AppIntro 欢迎页 7.6k 1月
UI 其他 Android-Bootstrap UI框架 6.6k 9月
UI 其他 emojicon 表情文本 3.2k 9月
UI 其他 RippleEffect 水波纹效果 4.6k 2年
UI 其他 InfiniteCycleViewPager ViewPager 4.7k 8月
UI 其他 LoadingDrawable 酷炫的加载动画 3.2k 1年
UI 其他 QMUI_Android 提高 UI 开发效率的 UI 库 4.7k 5天
网络 框架 retrofit 网络框架 27k 16天
网络 框架 okhttp 网络框架 26k 6天
网络 框架 volley 网络框架 1.5k 9天
网络 文件下载 FileDownloader 文件下载引擎 6.5k 13天
网络 进度监听 ProgressManager okhttp 上传下载进度监听 1.5k 5天
图片 框架 glide 图片框架 21k 8天
图片 框架 Android-Universal-Image-Loader 图片框架 16k 2年
图片 框架 picasso 图片框架 15k 14天
图片 框架 fresco 图片框架 14k 6天
图片 压缩 Luban *接近朋友圈的图片压缩算法 7.4k 9天
图片 滤镜 android-gpuimage 图像滤镜框架 4.8k 2年
图片 转换 glide-transformations Glide 图像转换器 6.0k 11天
图片 选择器 Matisse 图片视频选择器 6.7k 1天
图片 选择器 TakePhoto 图片选择 / 剪裁 / 压缩 4.8k 1月
图片 选择器 PhotoPicker 仿微信图片选择器 2.5k 4月
图片 文字识别 tess-two Android 图片文字识别 2.5k 13天
视频 播放器 JieCaoVideoPlayer 节操视频播放器 6.6k 6天
视频 播放器 ijkplayer Bilibili 开源播放器 18k 2月
视频 播放器 GSYVideoPlayer 多功能视频播放器 5.7k 8天
动画 AE lottie-android 展示 AE 工具所作动画的框架 20k 13天
动画 转场 Material-Animations 安卓转场动画演示 11k 3月
动画 View AndroidViewAnimations 安卓视图动画合集 9.3k 9月
动画 多种 animate 多种动画效果 2.8k 2年
动画 列表 recyclerview-animators RecyclerView 条目动画 7.8k 2月
动画 列表 spruce-android 列表视图展现动画 2.6k 3月
动画 粒子 Grav 粒子动画效果 2.2k 1年
动画 爆炸 ExplosionField 爆裂动画效果 3.1k 2年
动画 兼容 Transitions-Everywhere Transitions API 的兼容补丁 3.7k 2月
异步 链式 RxAndroid Android 中的 RxJava 绑定 15k 2月
异步 链式 RxJava 事件驱动的基于异步数据流的编程模式 32k 2天
异步 链式 agera 谷歌开发的安卓链式编程框架 7.0k 2月
数据库 轻量级 realm-java 轻量级数据库 9.4k 3天
数据库 轻量级 greenDAO 轻量级数据库 9.8k 16天
文件 选择器 Android-FilePicker 图片 / 文件选择器 1.4k 19天
json 解析 gson 谷歌官方 Json 库 12k 2天
json 解析 fastjson 阿里巴巴 Json 库 13k 1天
字体 框架 Calligraphy 自定义字体库 7.6k 11月
语言 汉字处理 HanLP 中文分词 、关键词提取等 6.8k 2天
性能 卡顿 AndroidPerformanceMonitor 非侵入式性能监控组件 4.0k 8月
性能 卡顿 BlockCanaryEx UI 卡顿检测 1.7k 8月
性能 卡顿 AndroidDevMetrics 性能检测 1.3k 2月
性能 内存 leakcanary 检查内存泄漏工具 19k 8天
性能 生命周期 RxLifecycle 使用 RxJava 管理生命周期 5.5k 2月
性能 缓存 DiskLruCache 硬盘缓存工具 4.3k 1年
性能 UI框架 litho 高性能安卓 UI 的构建框架 4.8k 1天
热修复 框架 tinker 微信热修复框架 11k 24天
热修复 框架 dexposed 阿里热修复框架 3.8k 2年
插件化 框架 DroidPlugin 360 插件化框架 5.6k 7月
插件化 框架 dynamic-load-apk Apk动态加载框架 5.2k 10月
插件化 框架 atlas 阿里插件化框架 5.9k 5月
插件化 框架 Small 插件化框架 4.1k 9天
工具 工具类 AndroidUtilCode 安卓开发者不得不收集的代码 17k 1天
工具 工具类 android-common 不只是工具类的公共库 4.6k 1年
工具 工具类 android-common 通用 / 辅助 / 工具类的集合 2.9k 11月
工具 工具类 Lazy 常用工具类整理 1.6k 7月
工具 列表 BaseRecyclerViewAdapterHelper RecyclerAdapter 框架 13k 21天
工具 列表 baseAdapter Android 万能的 Adapter 3.7k 1年
工具 列表 FanLayoutManager 风扇扇叶旋转效果列表 1.7k 8月
工具 列表 CarouselLayoutManager 传送带效果列表 1.5k 1年
工具 列表 ChipsLayoutManager 流式布局列表 2.2k 1年
工具 状态栏 StatusBarUtil 设置状态栏的工具库 5.2k 7天
工具 状态栏 SystemBarTint 状态栏着色工具 4.8k 3年
通信 事件 EventBus Android 事件总线 18k 4月
键盘 表情 XhsEmoticonsKeyboard 表情键盘解决方案 2.3k 1年
键盘 冲突 JKeyboardPanelSwitch 解决键盘面板冲突 2.7k 3月
扫描 二维码 zxing 二维码扫描 18k 9天
注解 框架 androidannotations 快速开发框架 10k 5月
注解 绑定 butterknife 为 Android View 设计的绑定注解 20k 17天
注解 注入 dagger2 Android 依赖注入框架 10k 1天
权限 请求 PermissionsDispatcher 基于注解处理权限请求 7.1k 4天
权限 请求 RxPermissions 基于 RxJava 处理权限请求 6.1k 3月
响应式 UI RxBinding 安卓 UI 响应式编程 7.3k 27天
响应式 事件 otto 事件总线框架 5.0k 9天
hybrid 框架 JsBridge Android 与 JavaScript 互调桥梁 4.7k 4月
hybrid 框架 VasSonic 轻量级高性能的 hybrid 框架 7.7k 12天
崩溃 报告 acra 崩溃信息收集框架 4.3k 1天
崩溃 处理 CustomActivityOnCrash 崩溃处理 2.3k 5月
崩溃 预防 NullAway 检测 NullPointerExceptions 2.0k 3天
框架 MVP mosby MVP 框架 4.4k 9天
框架 多主题 MagicaSakura Android 多主题框架 2.6k 9天
架构 Clean Android-CleanArchitecture 一种清晰的 Android 架构 11k 2月
架构 Fragment Fragmentation 多 Fragment 架构的解决方案 6.3k 1月
构建 工具 buck 快速构建工具 5.7k 1天
编译 工具 freeline 秒级编译方案 4.5k 4月
混淆 工具 AndResGuard Android 资源混淆工具 4.6k 1月
测试 单元测试 robolectric Android 单元测试框架 3.9k 1天
测试 单元测试 mockito Android 单元测试框架 6.6k 5天
测试 单元测试 truth 谷歌的断言和命题框架 1.4k 4天
调试 框架 stetho Android 开发调试神器 9.5k 2月
调试 日志 logger 简单实用漂亮的日志打印框架 9.0k 23天
调试 数据库 Android-Debug-Database 调试手机中数据库 4.0k 2月
调试 方法 hugo 方法调试工具 5.9k 2年
反编译 工具 Apktool 反编译 APK 工具 6.1k 7天
Demo Rxjava RxJava-Android-Samples 学习 Android 中 Rxjava 6.4k 9月
反编译 工具 android-classyshark APK 分析利器 4.7k 17天
Demo Dagger u2020 Dagger 高级教学示例 APP 5.4k 5月
Demo MVP androidmvp Android 端 MVP 设计 APP 5.1k 2月
Demo 框架 android-architecture-components Architecture Component 官方演示 7.8k 6天
Demo 测试 android-testing 集成四大自动化测试框架的 Demo 5.3k 14天
Demo 设计模式 java-design-patterns java设计模式指南(英文 32k 4天
APP 仿造 bilibili-android-client 高仿哔哩哔哩动画安卓客户端 3.4k 9月
APP 播放器 android-UniversalMusicPlayer 谷歌教科书级音乐播放器 9.3k 5天
APP 播放器 ExoPlayer 谷歌出品可扩展媒体播放器 9.8k 29天
APP 播放器 Timber 音乐播放器 4.5k 3月
APP 播放器 ListenerMusicPlayer 开源音乐播放器 1.9k 1年
APP 新闻 AndroidFire 新闻阅读 App 框架 1.9k 11月
APP 新闻 GeekNews 涵盖*常用主流框架的阅读应用 2.8k 11月
APP MVP MvpApp MVP 架构学习 App 1.7k 11月
APP 教育 santa-tracker-android 谷歌开源的儿童教育和娱乐 App 1.2k 3月
APP 壁纸 muzei 定时更换桌面精美壁纸 App 3.5k 6天
面试 指南 interviews 软件工程技术面试个人指南 22k 15天
面试 题库 AndroidInterview-Q-A 国内一线互联网公司内部面试题库 7.2k 1月
学习 汇总 LearningNotes 学习笔记 8.9k 1月
学习 汇总 Android_Data Android 学习资料收集 7.1k 7月
学习 翻译 android-tech-frontier 定期翻译国外安卓优质文章 9.3k 1年
学习 源码分析 android-open-project-analysis Android 开源项目源码解析 6.2k 1年
学习 RxJava Awesome-RxJava RxJava 学习资源 4.3k 1年
学习 正则 learn-regex 轻松学习正则 14k 17天
学习 算法 awesome-java-leetcode 学习数据结构和算法、刷 LeetCode 3.7k 1月
学习 ADB awesome-adb ADB 用法大全 3.7k 1月
其他 大全 Android GitHub 上*火的 Android 开源项目 4.1k 6月
其他 大全 awesome-java Java框架、库与软件合集 16k 2月
其他 大全 awesome-android Android 实用资源合集 5.4k 1天
其他 大全 awesome-android-ui Android 好用的 UI 合集 29k 1月
其他 大全 Awesome-MaterialDesign Material Design 资源合集 5.4k 2年
其他 大全 AndroidLibs Android 开源代码大全 3.9k 1月
其他 大全 awesome-android-tips 收集常用的 Android 代码 2.2k 1月
其他 大全 android-open-project Android 开源项目分类汇总 26k 3月
其他 大全 android-architecture 谷歌关于架构的示例合集 26k 1月
其他 交流 android-discuss Android 问题交流讨论坛 3.4k 2年
补充 开发工具 PocketHub Android 版 Github 9.2k 13天
补充 开发工具 ActivityTracker 查看当前栈顶 Activity 0.3k 1年
补充 开发工具 lantern *利器 34k 1月

注:

  1. 『star 数』为该项目在 GitHub 中所获得的 start 数;
  2. 『*近更新』为该项目在 GitHub 中距离*近一次更新的时间;
  3. 『star 数』和『*近更新』是基于:2018-05-03 GitHub 项目数据进行参考。

详细介绍

scwang90 / SmartRefreshLayout

下拉刷新、上拉加载、二级刷新、淘宝二楼、RefreshLayout、OverScroll,Android智能下拉刷新框架,支持越界回弹、越界拖动,具有*强的扩展性,集成了几十种炫酷的 Header 和 Footer。

SmartRefreshLayout 是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的 View,还支持多层嵌套的视图结构。它继承自 ViewGroup 而不是 FrameLayout 或 LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout,其他第三方的 Ultra-Pull-To-Refresh、TwinklingRefreshLayout 。还集成了各种炫酷的 Header 和 Footer。

项目地址:https://github.com/scwang90/SmartRefreshLayout
博客地址:https://segmentfault.com/a/1190000010066071

alibaba / vlayout

VirtualLayout 是一个针对 RecyclerView 的 LayoutManager 扩展, 主要提供一整套布局方案和布局间的组件复用的问题。

通过定制化的 LayoutManager,接管整个 RecyclerView 的布局逻辑;LayoutManager 管理了一系列 LayoutHelper,LayoutHelper 负责具体布局逻辑实现的地方;每一个 LayoutHelper 负责页面某一个范围内的组件布局;不同的 LayoutHelper 可以做不同的布局逻辑,因此可以在一个 RecyclerView 页面里提供异构的布局结构,这就能比系统自带的 LinearLayoutManager、aridLayoutManager 等提供更加丰富的能力。同时支持扩展 LayoutHelper 来提供更多的布局能力。

项目地址:https://github.com/alibaba/vlayout

markzhai / AndroidPerformanceMonitor

AndroidPerformanceMonitor(被称作 BlockCanary)是一个Android平台的一个非侵入式的性能监控组件,应用只需要实现一个抽象类,提供一些该组件需要的上下文环境,就可以在平时使用应用的时候检测主线程上的各种卡慢问题,并通过组件提供的各种信息分析出原因并进行修复。

取名为 BlockCanary 则是为了向 LeakCanary 致敬,顺便本库的 UI 部分是从 LeakCanary 改来的,之后可能会做一些调整。

项目地址:https://github.com/markzhai/AndroidPerformanceMonitor
中文文档:https://github.com/markzhai/AndroidPerformanceMonitor/blob/master/README_CN.md

seiginonakama / BlockCanaryEx

记录主线程中执行的所有方法和它们的执行时间,当 app 卡顿时,将所有耗时方法直接展示给开发者,节省开发者定位卡顿问题的时间。 此项目基于 BlockCanary。

BlockCanaryEx 和 BlockCanary 的区别如下:

  • BlockCanaryEx 的运行时代码修改自 BlockCanary,UI 和大部分功能基本一致;
  • BlockCanaryEx 添加了方法采样,知道主线程中所有方法的执行时间和执行次数;
  • 当应用卡顿时,BlockCanaryEx 更关注 app 代码中,哪些方法耗时*多,重点记录和显示这些耗时方法;
  • 添加了 gc 采样,当应用卡顿时,我们可以知道卡顿时是否发生了 gc,以及 gc 的时间;
  • 监控 view 性能,计算卡顿时,view的 measure、layout 和 draw 消耗的时间。

项目地址:https://github.com/seiginonakama/BlockCanaryEx
中文文档:https://github.com/seiginonakama/BlockCanaryEx/blob/master/README_ZH.md

frogermcs / AndroidDevMetrics

AndroidDevMetrics(原先叫 dagger2metrics)是一个性能检测库,用来检测 Activity 生命周期方法执行性能(onCreate(), onStart(), onResume())、帧速率性能和 Dagger 2 注入性能。它会告诉你在 app 中需要花多少时间来显示特定的界面,还有(如果你使用了Dagger 2)在依赖图表中提供每个对象消耗了多少时间。它不会告诉你性能问题或瓶颈的确切原因(目前!),但它可以指出你首先应该去查找的地方。

项目地址:https://github.com/frogermcs/AndroidDevMetrics

rmtheis / tess-two

文字识别一般都用的 Tesseract OCR ,它是由 Google 负责维护,是*好的开源 OCR Engine 之一,并且支持中文。不过因为 Tesseract 使用 C++ 实现的,在 Android 中不能直接使用,需要封装JavaAPI才能在Android平台中进行调用。

tess-two 是 TesseraToolsForAndroid(tesseract-adroid-tools)的一个分支,它添加了一些额外功能。TesseraToolsForAndroid 包含了 Tesseract OCR 和 Leptonica 图片处理库的一整套 API 和 build 文件。

项目地址:https://github.com/rmtheis/tess-two

huangyanbin / smartTable

Android 自动生成表格框架,支持二维数组展示,导入 Excel 表格,合并单元格等。还有很多功能点,包括动态添加首尾数据,分页,格式化字体,背景等。