python 笔记

1,函数也可以被当做其他对象一样处理。对象模型的一致性,Python解释器中出现的任何数值、字符串、数据结构、函数、类、模块等都待在自己的“盒子”里,这个盒子即是对象。
2,引用传递。Python对变量赋值时,实际上是在创建等号右边的一个引用。(copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。copy.deepcopy 深拷贝 拷贝对象及其子对象)
3,强类型语言。所有对象都有一个特定的类型,隐式转换只是在很明显的情况下才发生(isinstance)。
4,判断列表中是否有某个值的操作要比字典dict和集合set慢得多,因为Python会对列表中每个值进行扫描,而其他两个(基于哈希表)则可以瞬间完成判断。
5,列表的合并是中相当费资源的操作,需要创建两个新列表并将所有元素放到其中,用extend将元素附加到现有列表会好很多。
6,zip用于将多个序列中的元素配对,形成一个新的元祖序列。可以接受多个任意长度的序列,但最终结果由最短的序列决定(解压:v1,v2 = zip(*zipped_seq))。
7,推导式。列表:[expr for value in collection if condition];字典:{key-expr:value-expr for value in collection if condition};集合:{expr for value in collection if condition}(字典和集合推导式是Python2.7和Python3.1+出现);生成器:(expr for value in collection if condition)可嵌套:[expr for collection2 in collection for value in collection2 if condition];
8,闭包是由其他函数动态生成的函数(子函数可以使用父函数中的局部变量,这种行为就叫做闭包!)。


In [10]:l = [5,4,3,4,34,5,34,3,443,43,4,3]
In [11]:def check():

    ...:     have_seen = {}

    ...:     x = 1

    ...:     def watch(x):

    ...:         # x+=1 会报错

    ...:         # y=x+1 不会报错 可以使用但不可以赋值

    ...:         if x in have_seen:
    ...:             return True
    ...:         else:
    ...:             have_seen[x]=True
    ...:             return False
    ...:     return watch
    ...: 


In [12]:map(check(),l)
Out[12]: [False, False, False, True, False, True, True, True, False, False, True, True]


9,生成器是以延迟的方式返回一个值序列,即每返回一个值后暂停,直到下一个值被请求时再继续,要创建一个生成器只需要将return改成yield即可。itertools提供了一组用于许多常见数据算法的生成器,如groupby(Python2.x中产生列表的内置函数(map,filter,zip等),在Python3中都被变成了生成器版)


In [41]:def make_change(amount,coins=[1,5,10,25],hand=None):
    ...:     hand = [] if hand is None else hand
    ...:     if amount == 0:
    ...:         yield hand
    ...:     for coin in coins:
    ...:         if coin>amount or (len(hand)>0 and hand[-1]<coin):
    ...:             continue
    ...:         for result in make_change(amount-coin,coins,hand=hand+[coin]):
    ...:             yield result
    ...:


In [42]:for i in make_change(30,coins=[5,10]):
    ...:     print i
    ...:     
[5, 5, 5, 5, 5, 5]
[10, 5, 5, 5, 5]
[10, 10, 5, 5]
[10, 10, 10]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值