CentOS 下安装 Python 3.X/PIP/Git 2.X

安装依赖

yum install -y gcc openssl openssl-devel sqlite-devel xml2 libxml2-devel libxslt libxslt-devel python-pyasn1 libffi-devel python-pyasn1-modules

安装 Python 3.X 和 PIP (Python 3 自带 PIP)


wget https://www.python.org/ftp/python/3.5.3/Python-3.5.3.tgz
tar xzvf Python-3.5.3.tgz
cd Python-3.5.3
./configure 
make
make install

python3
pip3 --version

安装 Git 2.X


## 安装依赖(依据实际需求,这里我要使用)
yum install libcurl-devel -y
yum install expat-devel perl-ExtUtils-MakeMaker -y

wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
tar xzvf git-2.9.5.tar.gz
cd git-2.9.5
./configure 
make
make install

mv /usr/bin/git /usr/bin/git-1.7    # 备份旧版本 Git 
git --version   # Git 默认编译安装在 /usr/local/bin/

Ref

Redhat/Centos/Fedora 下 Python, Pip 和 Git 的安装

4K 相关概念了解

4K 相关概念了解

引言

2008 年左右,我对数字高清视频感兴趣,记得当时厂家在大力宣传 FullHD 全高清显示设备,
当时我也是购入了一台 FullHD 1920*1080 分辨率的显示器,当时 1080p 的内容还并不是那么多,全高清设备也并没有普及。
高清视频标准发展到现在,出现了 4K 标准,和当年的 FullHD 的情况很类似,标准已出,厂家大力宣传 4K 相关的显示设备。 这几年听得最多的就是 4K 电视了。我所了解到的 4K 内容渠道:4K BD, Youtube/Netflix 4K Streaming, 4K 电视频道(有线或卫星方式)。但是现在上面这些渠道上的 4K 内容还并不多。 由于我也有几年没有仔细了解 4K 概念,只是听了下 4K 这个名词,花了点时间了解了下 4K 概念,参考 Wikipedia。

Ref

4K_resolution

Python 基础 08-类和对象

类和对象(实例)

之前我们学习了函数和模块等组织代码的方式,但随着代码的增多,函数和模块还是不够用。
根据有项研究,如果代码超过 10000 行,如果只用函数和模块来组织代码,那么程序员将很难掌控代码。 所以在大型项目中,为了更好地组织代码,会使用类和对象。

类和对象之间的关系非常相似于概念和实体的关系。

Python-Class-Object

创建类


class Cat(object):                      # 定义概念 猫:       PS: 注意使用 class 关键词,Python 3 中不需要"(object)"
    leg_cnt = 4                         # 腿数 = 4        PS: 可以做为类属性
    def __init__(self, cat_name):       # 定义 创建过程(实体,猫名):   PS: 实例的创建过程,类的实例化,第一个参数 self 是必须的,  
                                        # self 可以理解为类实例化时的已经存在的初始实体对象,很多属性还没有被设置
        self.name = cat_name            # 实体.名字 = 猫名  PS: 给实体设置 name 属性,同时将传入的参数 cat_name 赋值给它
                                        # name 这个变量是附属于 self 实例的(self.name),不能够直接使用 name 变量
    
    def change_name(self, cat_name):    # 定义 改名字(实体,猫名):  PS: 类里面的函数就叫类的方法,第一个参数是 self,类的方法实际上定义类这个概念能做什么
        self.name = cat_name            # 实体.名字 = 猫名
    
    def climb(self):                    # 定义 爬树(实体):
        print("cat %s climb a tree" %   # 输出 (猫爬了树)
        self.name)

创建并使用实例


tom = Cat("Tom")                # 类的实例化,Cat 实例化后赋值给 tom 这个变量,tom 是一只真正的猫,它的名字叫"Tom"
tom.chang_name("ATom")          # tom 改名字为 "ATom"
tom.climb()                     # tom 去爬树
tom.leg_cnt == 4                # True tom 的腿数是 4

类的继承

继承的类叫做子类。


class PersianCat(Cat):              # 定义概念 波斯猫(继承猫):
    def __init(self, cat_name):     # 定义 创建过程(实体,猫名):
        super(PersianCat, self).__init__(cat_name)  # 执行猫的创建过程(猫名),Python 3 中"PersianCat, self"可不写
    
    def jump(self):                 # 定义 跳(实体):
        print("try jump")           # 打印 ("try jump")

jack = PersianCat("jack")           # jack 是一只真实的波斯猫
jack.jump()                         # jack 跳    
jack.climb()                        # jack 爬树
        

Ref

Python 笔记——类定义

Python 基础 07-高级数据类型

元组

  1. 与列表很相似,定义为 (1, “123”, 56)
  2. 不同的是,元组是不能改变的,类似于常量,元组是不能增加或删除元素的
  3. (2) 其实 2,”()” 理解成数学上的括号,(2,) 是元组,里面只有一个元素

字典

字典表示的是一种映射关系。 以下就是一个字典。


{
    "123": 123,
	456: "hello"

}

冒号左边称为键(Key),它是一个常量,右边称为值(Value)。


a = {"123": 123, 456: "hello"}
a["123"]    # 字典取值,得 123	
a[456] = "world"    # 字典设置值

  • 字典中的值是可以修改的
  • 字典有个特性是:取值和设置值速度非常快

字符串

字符串其实是一个特殊的列表,列表中的每个元素是一个字符

字符串替换


a = "hello lilei"
a[:5]   # "hello",字符串本质上是常量,可以查询,不能修改

a = "hello %s" % "lilei"    # %s 为占位符
a = "%s %s" % ("hello", "lilei")
a = "%(verb)s %(name)s" % {"verb": "hello", "name": "lilei"}    # 给占位符起名

元组在函数中的应用

当一个函数返回多个值的时候,它实际上返回了一个元组。

一个元组中的多个元素分别赋值给对应的变量称为解包。

如下:


a, b = (1, 2)   # 元组解包
param = (1, 2)  # 定义一个元组

add(*param)  add(1, 2)一样,*param 对应到了位置参数

可以使用字典来对应关键字参数
param = {"a": 1, "b": 2}    # 定义一个字典
add(**param)  add(a = 1, b = 2)一样,**param 对应到了关键字参数

Python 基础 06-模块

模块

  • 实际上一个 Python 模块是一个 Python 脚本文件。
  • 一个 Python 包是一个包含了 Python 脚本文件(至少包含有 __init__.py 文件)的目录。
  • Python 包中的 __init__.py 文件内容可以为空或包含 Python 代码。
  • 包可以嵌套,就是对应于文件系统中目录包含子目录。

Python-Modules

模块导入

  • 大型程序包含多个 Python 文件,也就是包含多个模块。
  • 文件之间的函数调用可以通过模块导入来实现。
  • 文件 A 要使用文件 B 中的函数,需要事先将文件 B 中的函数导入到文件 A 中来,这就是所谓的模块导入。
  • 在 Python 中,一个变量名或一个函数名在一个模块中(一个 Python 文件中),要么在这个文件中定义,要么通过其他模块导入过。 也就是说明这个变量名或函数名来自哪里。

模块导入规则

模块导入的关键是定位模块,定位规则如下:

  1. 跟入口文件在同一个目录下的模块或包能被找到。
  2. 根据被导入的模块和当前模块的路径关系来定位导入。
  • . 表示在当前模块所在的包下。(当前模块是代码所在的文件)
  • .. 表示在当前模块的所在包的外层目录下。

模块导入时,代码会运行一次。再次导入时,不会再次运行。

Python-Modules-Import

Python 2 的导入特性(不推荐)

  • import 语句所在模块的”同包模块”(即在同一个目录下 Python 文件)可以直接被找到。

from input import get_input

  • 了解这个用法,但是不建议使用。(因为不适用于 Python 3 )

模块相关技巧

dir(模块)

可以查看模块可使用的属性(可能是一个常量或一个函数,本质上是一个变量,内容上是一个常量或函数 )。


>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'last_type', 'last_value', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
>>> type(sys.version)
<type 'str'>
>>> type(sys.platform)
<type 'str'>
>>> type(sys.getsizeof)
<type 'builtin_function_or_method'>

模块内置变量 __name__

  • 模块有一个内置变量 __name__,Python 内部定义好了,不需要显式定义。
  • 一般情况下其值为相对引用路径,如 “lib.parse”
  • 在入口模块中值为 __main__

if __name__ == "__main__":  # 如果为此形式,说明这个模块是通过 "python *.py" 运行的,而不是通过模块导入的 
    # do something