Python查漏补缺

存储架构 2016-04-21

  • 设置脚本执行解释器路径

告诉操作系统执行脚本时调用/usr/bin下的python解释器

#!/usr/bin/python

防止在/usr/bin路径下不存在python解释器的情况,从env设置中查找Python安装路径,再调用相应路径下的解释器

#!/usr/bin/env python
  • 设置脚本脚本编码格式
# coding=utf-8

or

# -*- coding: utf-8 -*-

注释

  • 单行注释
# This is comment
  • 多行注释
'''
This is mutil line comment
'''
  • 函数说明
def some_func():
'This is function doc you can show it by some_func.__doc__'
pass

语句

  • 序列解包
values = 1. 2. 3 # This is tuple
x, y, z = values
  • 相等性和同一性

is运算符判定同一性而不是相等性

x = y = [1,2,3]
z = [1,2,3]
x == y # True
x == z # True
x is y # True
x is z # False
  • 列表与迭代

当需要迭代一个巨大的序列时xrange会比range更高效,range函数一次产生整个序列,而xrange一次只创建一个数

实现原理可以参考:

class irange(object):

def __init__(self, start, end, step=1):
self.start = start
self.end = end
self.step = step

def next(self):
if self.start + self.step >= self.end:
raise StopIteration
self.start = self.start + self.step
return self.start

def __iter__(self):
return self

if __name__ == "__main__":
for x in irange(1, 10):
print x
  • 编号迭代

使用enumerate可以迭代索引-值

for index, str in enumerate(strings):
pass
  • in 消除exec和evel的全局污染

限制exec执行的作用域只存在于scope当中

from math import sqrt
scope = {}
exec 'sqrt = 1' in scope
scope['sqrt'] # 1

为evel提供命名空间

scope = {}
scope['x'] = 2
scope['y'] = 3
eval('x*y', scope)

函数参数参数

  • 收集参数 和*

python函数定义时的参数可以分为位置参数和关键字参数

def hello(greeting, name):
pass

hello("welcome", name='world')

使用*收集其余的位置参数

def some_func(*args):
pass # args is tuple

some_func(1, 2, 3, 4, 5)

使用**收集其余的关键字参数

def some_func(*kargs):
pass #kargs is dict

some_func(a=1, b=2, c=3)
  • 参数分配 和*
params = (1, 2)
some_func(*params)
params = {'a': 1, 'b':2}
some_func(**params)

面向对象

  • 私有化

Python并没有真正的私有化支持

使用双下划线,类内部使用双下划线开始的名称都被翻译为’_
__ ‘

class Some:
def __pri_method:
print 'you can call this fake private method'

s = Some()
s._Some__pri_method()

另外类的函数名称前包含单下划线的方法都不会被imports语句导入

YL Notes

责编内容by:YL Notes (源链)。感谢您的支持!

您可能感兴趣的

NLTK学习笔记(一):语言处理和Python 目录 nltk资料下载 import nltk nltk.download() 其中, download() 参数默认是all,...
Futhark: Python gotta go faster While discussing the disappointing performance of myFuthark DCT on my “retro GP...
Deep Learning from first principles in Python, R a... “Once upon a time, I, Chuang Tzu, dreamt I was a butterfly, fluttering hither a...
Python3.x:静态方法,类方法,属性方法... 静态方法: 在面向对象三大特性多态中,我们用到了一个类似装饰器的函数 @staticmethod 其实他就是静态方法,一个装饰器,相当于python...
Are You Monitoring Your Machine Learning Systems? We're partnering with FusionCell to survey folks about how they monitor machine...