这次真的是最后一次了!第三次滚Python的基础。走了太多弯路。认真一点!菜鸟!

教程

  • 转义字符 \

可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\

  • '''...'''的格式表示多行内容

  • 用全部大写的变量名表示常量(编写习惯)

  • ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

  • 在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

  • >>> '%2d-%02d' % (3, 1)
    
    ' 3-01'
  • %%来表示一个%

  • 字符串用%s,数字用%d

列表:list []

  • Python内置的一种数据类型是列表。

  • list是一种有序的集合,可以随时添加和删除其中的元素。

  • list中索引值为[-1], 是最后一个元素

  • list是一个可变的有序表,所以可以增-(append)插-(insert)删-(pop)改-(直接赋值)

  • list里面的元素的数据类型可以不同

  • list元素也可以是另一个list或tuple //利用多维数组去取元素,tuple不可更改

元组:tuple ()

  • 另一种有序列表

  • tuple和list非常类似,但是tuple一旦初始化就不能修改

  • 只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号

  • tuple元素也可以是另一个tuple或list //这个时候这个元素就可以满足list的修改等方法了

条件判断和循环

  • 条件判断

if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
  • 循环有两种:1.for...in循环 2.while循环

  • Python提供一个range()函数,可以生成一个整数序列 //range(5)生成的序列是从0开始小于5的整数

  • while循环,只要条件满足,就不断循环,条件不满足时退出循环

raw_input

  • raw_input()读取的内容永远以字符串的形式返回,把字符串和整数比较就不会得到期待的结果,必须先用int()把字符串转换为我们想要的整型

dict

  • Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度

  • 一个key只能对应一个value

  • 字典还有个get方法

  • 一般都是通过Key去找到对应的value,操作不可逆

  • 要删除一个key,用pop(key)方法,对应的value也会从dict中删除

  • dict的key必须是不可变对象

*这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)

Set

  • set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

  • add(key)和remove(key)方法

  • set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集(&)、并集(|)等操作

函数

Python内置函数

  • 可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”

  • 默认参数必须指向不变对象 (不要用list等可变的作为默认参数)

  • 可变参数(*args) //可定义一个列表或元祖num,再通过*num传入到函数中

  • 关键字参数(**kw) //字典形式

  • 参数组合 (*args和**kw)可以混合着用

'''

Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。

默认参数一定要用不可变对象,如果是可变对象,运行会有逻辑错误!

要注意定义可变参数和关键字参数的语法:

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

以及调用函数时如何传入可变参数和关键字参数的语法:

可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))

关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

使用*args**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

'''

  • 递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出

切片

  • L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3

  • 倒数第一个元素的索引是-1

  • 前10个数,每两个取一个,取得是索引号靠前的数 // L[:10:2]

  • 只写[:]就可以原样复制一个list

*tuple也可以进行切片操作,不过取出来的是一个tuple

迭代

  • 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)

  • 在Python中,迭代是通过for ... in来完成的

  • 通过collections模块的Iterable类型判断一个对象是否为可迭代对象

  • Python内置的enumerate函数可以把一个list变成索引-元素对

列表生成式:range

  • 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式

  • 写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来

  • for循环后面还可以加上if判断(再筛选一次)

  • for循环其实可以同时使用两个甚至多个变量

*先写for循环,然后再写要生成的元素(放在前面),最后加[] //最后加()这就变成了一个生成器

*变小写的方法是lower()

*内建的isinstance函数可以判断一个变量是不是字符串

生成器

  • 在Python中,这种一边循环一边计算的机制,称为生成器(Generator)

  • 生成生成器(Generator)的方法:1.把列表生成式的[]改成() 2.用yield

  • 如果要一个一个打印出来,可以通过generator的next()方法 //不推荐,可直接用for..in循环取元素

函数式编程

*函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

高阶函数:接收函数作为参数

  • 变量可以指向函数

  • 不要把封装好的函数的函数名用来只想对象(如:abs=10)

  • 一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

  • 编写高阶函数,就是让函数的参数能够接收别的函数

map/reduce

  • map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回

  • reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

*求和运算可以直接用Python内建函数sum()

filter

  • Python内建的filter()函数用于过滤序列

  • filter()也接收一个函数和一个序列

  • 根据函数的规则,每个元素去比较匹配,符合的存到[],不符合的过滤掉

*python内建的strip函数:去掉字符串前后的空格

sorted

  • Python内置的sorted()函数就可以对list进行排序

  • sorted()函数也是一个高阶函数 //sorted([序列],函数名)

返回函数

  • 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回

闭包

  • 外部函数+内部函数 //注意缩进

  • 返回的函数并没有立刻执行,而是直到调用了内部函数名()才执行

  • 实现难,调用简单

  • 返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量

匿名函数

  • 关键字lambda表示匿名函数,冒号前面的x表示函数参数

  • 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果

  • 匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该(匿名)函数

*函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数

装饰器(Decorator)

  • 函数对象有一个__name__属性,可以拿到函数的名字

  • 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

  • 函数A前用@调用出定义的装饰器,装饰器也是高阶函数,接收的函数是A

偏函数

  • 通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点

  • 创建偏函数时,实际上可以接收函数对象、*args**kw这3个参数

  • 当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单

模块

python自带的内建函数

面向对象编程

  • 类名通常是大写开头的单词

  • 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把namescore等属性绑上去 //初始化

  • 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

  • 在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name____score__这样的变量名

继承和多态

  • 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)

  • 多态其实指的主要就是子类可以重写父类的方法,然后再实例化调用的时候根据数据类型(指定的是哪个类的)来选择调用具体的方法(父类or子类)

*类一定要实例化,才能去调用类方法啊!

获取对象信息

  • 使用type()来判断对象类型

  • 有一种类型就叫TypeType,所有类型本身的类型就是TypeType

  • 使用isinstance()函数判断class的类型 //从上往下的 判断子类的实例化是否为父类的数据类型(真),判断父类的实例化是否为子类的数据类型(假)

  • 使用dir()函数获得一个对象的所有属性和方法

  • getattr()setattr()以及hasattr(),我们可以直接操作一个对象的状态

使用__slots__

*一般我们把方法写在class中,所有实例都可以去掉用它

为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性

*使用__slots__要注意,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的

**除非在子类中也定义__slots__,这样,子类允许定义的属性就是自身的__slots__加上父类的__slots__

使用@property(后期继续学习下,不是很理解)

*场景是设置分数(set_score),打印分数(get_score),这样子设置两个方法,实例调用的时候也是调用这两个方法,挺麻烦的。

Python内置的@property装饰器就是负责把一个方法变成属性调用的

*@property 可以将python定义的函数“当做”属性访问

多重继承

  • 通过多重继承,一个子类就可以同时获得多个父类的所有功能

*Mixin:需要“混入”额外的功能,通过多重继承就可以实现,这是一种设计模式

**Mixin的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个Mixin的功能,而不是设计多层次的复杂的继承关系

由于Python允许使用多重继承,因此,Mixin就是一种常见的设计

定制类(Python自带的几个) 参考

*看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的

  • __str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的

  • 如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法

*如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环

  • Python还有另一个机制,那就是写一个__getattr__()方法,动态返回一个属性 //只有在没有找到属性的情况下,才调用__getattr__

  • 任何类,只需要定义一个__call__()方法,就可以直接对实例进行调用

  • 通过callable()函数,我们就可以判断一个对象是否是“可调用”对象

*__XX__类的方法都不用去调用,这像__init__一样,属于内置方法啦

**迭代器 基础知识

  一个实现了 __iter__() 和 next() 方法的类可以作为迭代器使用

元类(先跳过吧,到时候学Django的时候再拿出来学习下)

'''

Python内置了一套异常处理机制,来帮助我们进行错误处理。

我们也需要跟踪程序的执行,查看变量的值是否正确,这个过程称为调试。

'''

错误处理(Python常见的错误类型

  • 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见

  • try...except...finally...的错误处理机制

*当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕

**finally一定会被执行(可以没有finally语句)

  • Python的错误其实也是class,所有的错误类型都继承自BaseException,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽

  • Python内置的logging模块可以非常容易地记录错误信息

  • 通过配置,logging还可以把错误记录到日志文件里,方便事后排查

抛出错误(raise)

  • Python内置的错误类型(类),我们也可以自己定义自己的错误类型(类)//不过一般内置的都够用,用继承的方式重写自己的错误类型(类)就行

  • 怎么使用自己定义的错误类型(类)呢:用raise //有点类似try..except..finally,只不过我们用的是raise关键字

  • 捕获错误目的只是记录一下,便于后续追踪。但是,由于当前函数不知道应该怎么处理该错误,所以,最恰当的方式是继续往上抛,让顶层调用者去处理

*raise语句如果不带参数,就会把当前错误原样抛出 //我们捕获错误,只不过是判断是不是这种错误类型,然后执行后面我们设置的语句(不一定是处理错误,除非是logging),所以我们在这儿的最后写一句raise,这样子系统会处理这个错误,打出错误信息的、

**捕获错误的目的是分析错误!!!

调试

1.简单直接粗暴有效,就是用print把可能有问题的变量打印出来看看

2.断言

3.(推荐)logging //logging.info()就可以输出一段文本 //logging具体的到时候再说

4.pdb //这个要去单独启动的

5.pdb.set_trace() //也是挺麻烦的

6.IDE //有console

单元测试(unittest) //先略过了

文档测试 //略过

Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试

文件读写

  • 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的

  • 读文件:open -> read -> close;

  • Python引入了with语句来自动帮我们调用close()方法 //with ... as ...

  • 调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list
  • 要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可

  • 写文件:open -> write -> close

操作文件和目录

  • 操作文件和目录的函数一部分放在os模块中,一部分放在os.path模块中,这一点要注意一下

  • 查看路径、新建目录、删除目录、文件重命名、删掉文件
  • 把两个路径合成一个时,不要直接拼字符串,而要通过os.path.join()函数;同样的道理,要拆分路径时,也不要直接去拆字符串,而要通过os.path.split()函数

  • os.path.splitext()可以直接让你得到文件扩展名 // B/a.txt -> ('B/a','.txt')
  • 利用Python的特性过滤文件

序列化

  • 我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling;反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling

  • Python提供两个模块来实现序列化:cPicklepickle

  • pickle.dumps()方法把任意对象序列化成一个str,然后,就可以把这个str写入文件。或者用另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object

  • pickle.load()方法从一个file-like Object中直接反序列化出对象

*和JSON一样都可以写到一个可读写文件中,再反序列搞到内存中打印读取

**反序列化得到的所有字符串对象默认都是unicode而不是str

JSON //JSON的具体知识后面有空再补补

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便

Python内置的json模块提供了非常完善的Python对象到JSON格式的转换

进程和线程 //略过

一个进程 -> 多个线程

多任务的实现有3种方式:多进程模式;多线程模式;多进程+多线程模式;

多进程

  • Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程 //Windows没有fork调用

  • multiprocessing模块提供了一个Process类来代表一个进程对象

在Unix/Linux下,可以使用fork()调用实现多进程。

要实现跨平台的多进程,可以使用multiprocessing模块。

进程间通信是通过QueuePipes等实现的。

正则表达式

  • \d可以匹配一个数字,\w可以匹配一个字母或数字

  • .可以匹配任意字符

  • *表示任意个字符(包括0个)

  • +表示至少一个字符

  • ?表示0个或1个字符

  • {n}表示n个字符,用{n,m}表示n-m个字符

  • \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格

  • 要做更精确地匹配,可以用[]表示范围

  • [0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串

  • ^表示行的开头,^\d表示必须以数字开头

  • $表示行的结束,\d$表示必须以数字结束

re模块

Python提供re模块,包含所有正则表达式的功能

*使用Python的r前缀,就不用考虑转义的问题 :s = r'ABC\-001' # Python的字符串

match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None //re.match('xxxx')

切分字符串 split

分组

()表示的就是要提取的分组(Group)

如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来;group(0)永远是原始字符串,group(1)group(2)……表示第1、2、……个子串

常用内建模块

collections //tmd不知道为什么导入了不能用,先放着吧!!

collections是Python内建的一个集合模块,提供了许多有用的集合类

namedtuple

  • namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素

deque

  • deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈

  • deque除了实现list的append()pop()外,还支持appendleft()popleft(),这样就可以非常高效地往头部添加或删除元素

base64 //不懂什么鬼,感觉也用不到,略过了

  • Base64是一种用64个字符来表示任意二进制数据的方法;Base64是一种最常见的二进制编码方法

  • Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据

struct //官方说明文档

  • 由于str既是字符串,又可以表示字节,所以,字节数组=str

  • Python提供了一个struct模块来解决str和其他二进制数据类型的转换

*讲解一下吧:图片视频在python输出来的都是二进制符号,我们无法判断具体是啥,通过struct给它转一转转成我们看得懂的输出

hashlib //有些不太理解,略

  • Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等 //摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

  • 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过

  • MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示

  • 另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似

itertools

Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数

XML //SAX还不会,用了虫师的DOM方法

操作XML有两种方法:DOM和SAX

DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点;SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件

*正常情况下,优先考虑SAX,因为DOM实在太占内存

**在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_elementend_elementchar_data,准备好这3个函数,然后就可以解析xml了

会产生3个事件:

  1. start_element事件,在读取<a href="/">时;

  2. char_data事件,在读取python时;

  3. end_element事件,在读取</a>时。

HTMLParser //现在不都用urllib了吗?果断略!

Python提供了HTMLParser来非常方便地解析HTML

PIL //处理图像;可用于图片的验证码处理;

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。

图形界面 //略略

Tkinter

Python自带的库是支持Tk的Tkinter,使用Tkinter //调用它的接口就行了

网络编程 //略

电子邮件 //导入email又不行,哎,先略过

SMTP发送邮件

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件

Python对SMTP支持有smtplibemail两个模块,email负责构造邮件,smtplib负责发送邮件

访问数据库 //略

SQLite,MySQL

*表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表;表和表之间通过外键关联;

Web开发

WSGI接口(Web Server Gateway Interface)

一个Web应用的本质就是:

  1. 浏览器发送一个HTTP请求;

  2. 服务器收到请求,生成一个HTML文档;

  3. 服务器把HTML文档作为HTTP响应的Body发送给浏览器;

  4. 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。

*最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。Apache、Nginx、Lighttpd等这些常见的静态服务器就是干这件事情的

**有了MVC,我们就分离了Python代码和HTML代码。HTML代码全部放到模板里,写起来更有效率。

除了Flask,常见的Python Web框架还有:

  • Django:全能型Web框架;

  • web.py:一个小巧的Web框架;

  • Bottle:和Flask类似的Web框架;

  • Tornado:Facebook的开源异步Web框架。

协程 //略过

协程,又称微线程,纤程。英文名Coroutine。

【Python系统学习】基础篇的更多相关文章

  1. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  2. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  3. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)

    Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...

  4. [转]C++学习–基础篇(书籍推荐及分享)

    C++入门 语言技巧,性能优化 底层硬货 STL Boost 设计模式 算法篇 算起来,用C++已经有七八年时间,也有点可以分享的东西: 以下推荐的书籍大多有电子版.对于技术类书籍,电子版并不会带来一 ...

  5. Python 系统学习梳理_【All】

    Python学习 1. Python学习---Python安装与基础1205 2. Python学习---PyCharm的使用学习 3. Python学习---Python数据类型1206 4. Py ...

  6. python之路基础篇

    基础篇 1.Python基础之初识python 2.Python数据类型之字符串 3.Python数据类型之列表 4.Python数据类型之元祖 5.Python数据类型之字典 6.Python Se ...

  7. 给深度学习入门者的Python快速教程 - 基础篇

    实在搞不定博客园的排版,排版更佳的版本在: https://zhuanlan.zhihu.com/p/24162430 Life is short, you need Python 人生苦短,我用Py ...

  8. 给深度学习入门者的Python快速教程 - 基础篇(转)

    原文:https://zhuanlan.zhihu.com/p/24162430 5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5. ...

  9. Python ( 学习 基础篇第一部 )

    目录 注释 注释的分类 注释的注意点 变量 变量的概念 变量的声明 变量的命名 变量的交换 变量的缓存机制 常量 进制 进制的转换 原码 反码 补码 六大数据类型 Number 的四大类 字符串 st ...

随机推荐

  1. 设计模式(六) xml方式实现AOP

    1.1. Aop,  aspect object programming  面向切面编程 功能: 让关注点代码与业务代码分离! 关注点, 重复代码就叫做关注点: 切面, 关注点形成的类,就叫切面(类) ...

  2. spring的线程安全

    Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”.但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码.Spring对每个bean提供 ...

  3. 理解音视频 PTS 和 DTS

    视频 视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉. 但是在实际应用中,并不是每一帧都是完整的画面,因为如果每一帧画面都是完整 ...

  4. [转]hadoop2.x常用端口及定义方法

    端口 Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集 ...

  5. 移植MarS Board代码到内核3.0.35

    MarS Board提供的出厂Linux内核是3.0.15的.而Freescale的BSP都早已经更新到3.0.35.为了跟上节奏,我花了点时间把关于marsboard代码从3.0.15移植到了Fre ...

  6. Samba 3.6.9 安装、管理

    Samba简介 Samba服务类似于windows上的共享功能,可以实现linux上共享文件,windows上访问,当然在linux上可以访问到.是一种在局域网上共享文件和打印机的一种通信协议,它为局 ...

  7. [pixhawk笔记]4-如何写一个简单的应用程序

    本文主要内容来自于:https://dev.px4.io/en/tutorials/tutorial_hello_sky.html,并对文档中的部分问题进行更正. 本文假设已经建立好开发环境并能正确编 ...

  8. resin服务一直不停重启

    resin服务不断重启. 原因为resin配置文件使用域名.需要到服务上绑定一下域名.

  9. Vmware ESXi 6.0 多Vlan部署,vSphere Client管理方法

    背景: 公司IT部门新购了两台服务器与一台存储,打算做虚拟化,并将存储分成两个部分,分别配给那两台服务器.在宿主机上要安装的虚拟机属于不同的网段,这就涉及了多VLAN,当然这并不是多么高深的技术,属于 ...

  10. idea中git合并切换分支等操作

    https://blog.csdn.net/autfish/article/details/52513465