Python Code snippet - Keosu - 博客园

Python Code snippet

(1)函数默认参数

def foo3 (i, L=[]):
    if len(L)==0:
        L.append(0)
    L[0]+=i
    return L[0]

print foo3(1)
print foo3(2)
print foo3(3)
print foo3(4)
 
上述代码得到的结果是
1
3
6
10

因此不要用可变对象作为默认参数值(Don’t use mutable as defaults)

1
2
3
4
def function(x, l=[]):              # 不要这么干
def function(x, l=None):        # 更好的一种方式
    if l is None:
       l = []

tca , tcb , tcc 差异

class tc:
    tca = []
    tcb = ''
    def __init__(self,ff): 
        self.tcc = []

(2) Python中 set 相关操作

python的set 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素.

集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.

作为一个无序的集合,set 不记录元素位置或者插入点。因此,set 不支持 indexing, slicing, 或其它类序列的操作。

基本操作:

len(s)         set 的长度
x in s          测试 x 是否是 s 的成员
x not in s   测试 x 是否不是 s 的成员
s.issubset(t)
s <= t         测试是否 s 中的每一个元素都在 t 中
s.issuperset(t)
s >= t         测试是否 t 中的每一个元素都在 s 中
s.union(t)
s | t             集合的并
s.intersection(t)
s & t           集合的交
s.difference(t)
s - t            差集

s.symmetric_difference(t)
s ^ t           对称差集

s.copy()     浅复制

s.update(t)
s |= t        
s.intersection_update(t)
s &= t
s.difference_update(t)
s -= t
s.symmetric_difference_update(t)
s ^= t

s.add(x)
s.remove(x)       删除元素 x, 如果不存在则引发 KeyError
s.discard(x)       如果存在元素 x, 则删除
s.pop()              删除并返回一个不确定元素, 为空则引发 KeyError
s.clear()            删除所有元素

#说明:非运算符版本的操作支持任何 iterable 对象,不仅限于set

(3)列表,元组,字典 (List,Tuple,Dictionary)

两个变量的交换:

1
a, b = b, a

参数在切片操作中的步骤,如:

1
2
3
a = [1,2,3,4,5]
>>> a[::2 # 以步长为2的增量迭代整个list对象
[1,3,5]

 一个特殊的例子 `x[::-1]`用来反转x的实用语法。 

1
2
>>> a[::-1]
 [5,4,3,2,1]

学习各种集合(learn the various collections)

python有各种各样的容器数据类型,在特定情况下选择python内建的容器如:list和dict。通常更多像如下方式使用:

1
2
3
4
5
6
freqs = {}
for c in "abracadabra":
    try:
        freqs[c] += 1
    except:
        freqs[c] = 1

另外一种方式:

1
2
3
freqs = {}
   for c in "abracadabra":
       freqs[c] = freqs.get(c, 0) + 1

使用defaultdict

1
2
3
4
from collections import defaultdict
freqs = defaultdict(int)
    for c in "abracadabra":
        freqs[c] += 1

其它集合

1
2
3
4
5
namedtuple()       # 用指定的域创建元组子类的工厂函数
deque            # 类似list的容器,快速追加以及删除在序列的两端
Counter          # 统计哈希表的dict子类
OrderedDict            # 记录实体添加顺序的dict子类
defaultdict            # 调用工厂方法为key提供缺省值的dict子类

(4)序列的特殊操作 filter , map , reduce , lambda

filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple返回:

#返回不能被2和3整除的数
>>> def f(x): return x % 2 != 0 and x % 3 != 0 
>>> filter(f, range(2, 25)) 
[5, 7, 11, 13, 17, 19, 23]

map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:
>>> def cube(x): return x*x*x 
>>> map(cube, range(1, 11)) 
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000] 
>>> def add(x, y): return x+y 
>>> map(add, range(8), range(8)) 
[0, 2, 4, 6, 8, 10, 12, 14]

reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function 
>>> def add(x,y): return x + y 
>>> reduce(add, range(1, 11)) 
55 (注:1+2+3+4+5+6+7+8+9+10)
>>> reduce(add, range(1, 11), 20) 
75 (注:1+2+3+4+5+6+7+8+9+10+20)

lambda: 快速定义单行的最小函数,类似于C语言中的宏 
>>> g = lambda x: x * 2 
>>> g(3) 

>>> (lambda x: x * 2)(3) 
6

(5)使用iteritems而不是items

iteriterms 使用的是 generators,所以当迭代很大的序列是此方法更好

1
2
3
4
5
d = {1: "1", 2: "2", 3: "3"}
for key, val in d.items()       # 调用items()后会构建一个完整的list对象
for key, val in d.iteritems()   # 只有在迭代时每请求一次才生成一个值

(6)使用isinstance 而不是type 

需要注意的是这里使用basestring而不是str是因为你可能会用一个unicode对象去检查是否为string,例如:

1
2
3
4
5
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False

因为在Python中3.0以下的版本存在两种字符串类型str和unicode

        object

          |

       basestring

         / \

      str  unicode

python 基础 信息量很大很好,适合复习相关推荐

  1. Python基础速成笔记(1)(适合有C/C++的基础)

    目录 一:数据类型及定义 二:输入与输出 1)输入 python实现一行多个数据输入 Python实现多组输入 2)输出 三:运算操作符 基础操作符 比较操作符 逻辑操作符 优先级 四:分支语句if ...

  2. 每天一道LeetCode-----求一个数的n次方,n是很大很大的数,n用数组存储着

    Pow(x, n) 原题链接Pow(x, n) 给定一个数,求n次方.n次方可以分解成两个n/2次方相乘,所以递归即可. class Solution { public:double myPow(do ...

  3. 5道不一样的Python基础题练习题,很有难度

    下面这5道题,如果不打开Python实验,据说只有1%的人能全部做对.来挑战一下,看看你是不是Pythoner中的Top 1%. 第一题: #填空使等式成立: _(-1) == 1 #Python学习 ...

  4. 毛孔很大很难看该怎么处理

    许多干性肤质的人也会面临毛孔粗大的危机,大部分是因为保养不当与肌肤老化所致.   毛孔粗大的人,要么听天由命,要么只能用粉底来粉饰太平.  现在好了,我们可以用收缩毛孔的护肤品来补救.  ...

  5. Python基础之数字化大屏

    在公司内部或前台,有时需要展示数字化看板,展示公司的业务信息.看着别的公司展示的炫酷的数字化大屏,是否很羡慕?本文以Python+flask+jQuery+eCharts,简述如何开发数字化大屏进行数 ...

  6. 【HDU6608 Fansblog】求很大很大的数的阶乘

    Fansblog Description Farmer John keeps a website called 'FansBlog' .Everyday , there are many people ...

  7. python使用缩进作为语法边界一般建议怎样缩进-python基础自测挑战题,适合刚起步不久的小猿!...

    一.单选题 (共8道题,每题10分) 如果你感觉学不会?莫慌,小编推荐大家加入群, 前面548中间377后面875,群里有志同道合的小伙伴, 互帮互助,还可以拿到许多视频教程! 1.Python使用缩 ...

  8. MARI投射(映射)XYZ贴图(置换贴图),效果马赛克,很模糊,图片(贴图)明明很大很高清了依旧如此。

    新建一个XYZ的通道,贴图尺寸能开多大就多大试试,为什么会这样我也不清楚,我的开最大就清晰多了.

  9. Python基础之运算符大汇总

最新文章

  1. BZOJ-1005 明明的烦恼
  2. java中可用于定义成员常量_13秋北航《Java语言与面向对象程序设计》在线作业三辅导 …...
  3. 深圳市城镇职工社会医疗保险现金报销管理办法(二)
  4. I/O多路转接之select
  5. 算法题丨Next Permutation
  6. r矢量球坐标系旋度_三个常用坐标系的认识及矢量旋度表达式的证明
  7. ios无痕埋点_掌握数据生命周期:初识数据埋点
  8. 分享一些android的资料 很实用
  9. kendotabstrip 动态加tab_加你的好友这么多,为什么偏偏记不住我这名微商?
  10. 微软开放技术热烈祝贺开源社成立!
  11. 三、Spring Cloud的配置 之 服务提供者 配置
  12. linux修改max user processes limits
  13. 制作U盘免疫病毒文件夹
  14. ICMP协议和ping命令
  15. 二线城市-太原-程序员真实写照
  16. C语言中6HZ怎么算,C语言基础课First作业
  17. 推荐几本书给大家(二)
  18. 曾国藩:读书、交友、处事、养性,都在这里了
  19. oracle中distinct和count函数组合使用
  20. (转)微信公众号发表情 Emoji

热门文章

  1. 百度推出完全端到端的并行音频波形生成模型,比WaveNet快千倍 | 论文
  2. 2019年上海地区最新JAVAEE开发面试与笔试题
  3. 宏碁推智能佛珠,修养心性也可数据化
  4. 2018深圳国际零售信息化暨无人售货展
  5. 360分拆计划生变,临时剥离四大业务
  6. 互联网流量劫持的背后:黑客月入至少三万
  7. openssl搭建私有CA
  8. java.lang.ClassCastException:android.widget.Button cannot be cast to android.widget.ImageView
  9. 你好,欢迎来到我的空间,
  10. sql server 与 oracle 的不同,第一感觉。