重点汇总-python-gitbook-重要点学习-2-数据库相

2017-12-20  本文已影响15人  时间之友

检查列表是否为空的最好方法 ?

a = [ ]   # 如何检查 a 是空列表?
if not a:      #   用隐藏的空列表的布尔值才是最Pythonic的方法.
  print ("List is empty")

if __name__ == "__main__":是干嘛的?

有时你需要你写的模块既可以直接的执行,还可以被当做模块导入到其他模块中去.通过检查是不是主函数,可以让你的代码只在它作为主程序运行时执行,而当其他人调用你的模块中的函数的时候不必执行.


在循环中获取索引(数组下标)

ints = [8, 23, 45, 12, 78]      #  如何获取该列表的索引值?

最好的选择就是用内建函数enumerate

for idx, val in enumerate(ints):
    print ( idx, val )

Python中的 appen 和 extend 区别?

x = [1, 2, 3]
x.append([4, 5])
print (x)        #  输出:[1, 2, 3, [4, 5]]

x = [1, 2, 3]
x.extend([4, 5])
print (x)        #  输出:[1, 2, 3, 4, 5]

extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中。
append 接受一个参数,这个参数可以是任何数据类型,并且简单地追加到 list 的尾部。


当一个字典被创建了,能不能在字典里添加元素?好像没有.add()的方法.

In [28]: a = {'a':1}

In [29]: a['b'] = 1    # 只能赋值,简单粗暴

In [30]: a
Out[30]: {'a': 1, 'b': 1}

在一行里获取多个异常?

try:
    # 可能错的地方
except (IDontLIkeYouException, YouAreBeingMeanException) as e:
    pass    # 用括号扩起来

如何移除换行符?

试试rstrip方法:

>>> 'test string\n'.rstrip()      # 必须 \n 在最后
'test string'

同样也有lstripstrip方法:

>>> s = " \n  abc   def   "
>>> s.strip()
'abc   def'
>>> s.rstrip()
' \n  abc   def'
>>> s.lstrip()
'abc   def   '

鸭子类型

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

比如在python中,有很多file-like的东西,比如StringIO,GzipFile,socket。它们有很多相同的方法,我们把它们当作文件使用。

又比如list.extend()方法中,我们并不关心它的参数是不是list,只要它是可迭代的,所以它的参数可以是list/tuple/dict/字符串/生成器等.

鸭子类型在动态语言中经常使用,非常灵活,使得python不想java那样专门去弄一大堆的设计模式。


为什么 Python 不支持函数重载?

在静态语言中,方法重载是希望类可以以统一的方式处理不同类型的数据提供了可能。多个同名函数同时存在,具有不同的参数个数/类型,重载是一个类中多态性的一种表现。
而在动态语言中,有鸭子类型,如果走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子。一个对象的特征不是由它的类型决定,而是通过对象中的方法决定,所以函数重载在动态语言中就显得没有意义了,因为函数可以通过鸭子类型来处理不同类型的对象,鸭子类型也是多态性的一种表现。
所以,并不太需要。


数据库索引 (难)

聚集索引,非聚集索引,B-Tree,B+Tree,最左前缀原理
推荐: http://tech.meituan.com/mysql-index.html
MySQL索引背后的数据结构及算法原理


Redis原理

Redis是什么?

Redis数据库

通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求。在使用缓存的时候,redismemcached具有更多的优势,并且支持更多的数据类型,把redis当作一个中间存储系统,用来处理高并发的数据库操作

Redis 优点

Redis缺点


数据库锁机制 - 乐观锁与悲观锁

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
参考文章


数据库 MVCC

MVCC百科


上一篇下一篇

猜你喜欢

热点阅读