python学习心得

一,高级特性:

1,切片:[start:stop:step]

>>>l=range(6)
>>>l[3,-1,2]
resulte is [3]

2,迭代

  2.1按itervalues()

>>> d={1:2,2:3,3:4}
>>> for k in d:
...     print k,d[k]
...
1 2
2 3
3 4

  2.2 按iteritems()

>>> for v in d.iteritems():
...     print v
...
(1, 2)
(2, 3)
(3, 4)
以元组形式返回

  2.3 带索引输出:enumerate

>>> for i,value in enumerate([‘a‘,‘b‘,‘c‘]):
...     print i,value
...
0 a
1 b
2 c

  2.4 生成器:一边循环一边计算的机制,称为生成器(Generator),有利于节省存储空间,相当于链表中next

>>> def fib(max):
...     n,a,b=0,0,1
...     while n<max:
...             yield b
...             a,b=b,a+b
...             n=n+1
...
>>> fib(6)
<generator object fib at 0x7f7f3c2b94b0>
>>> for i in fib(6):
...     print i
...
1
1
2
3
5
8

(二),函数式编程

1,高阶函数:函数名当作方法的参数变量

>>> def add(x,y,abs):
...     return abs(x)*abs(y)
>>> def cut(x,add):
...     return x-add(x,x,abs)
...
>>> cut(1,add)
0

2,map

把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
map(lambda s :s.capitalize(),[‘AC‘,‘ac‘]
[Ac,Ac]

reduce:

>>> l=map(lambda s:s.capitalize(),[‘AC‘,‘ac‘])
>>> reduce(lambda x,y:x+y,l)
‘AcAc‘

filter:

>>> import math
>>> def isPrim(s):
...     for i in range(2,int(math.sqrt(s)+1)):
...             if s%i==0:
...                     return False
...     return True
...
>>> filter(isPrim,range(2,10))
[2, 3, 5, 7]
>>> import time
>>> print time.mktime(time.localtime())//时间计算
1497605034.0

3,sorted  x>y 1,x<y -1 x==y 0

 sorted([1,3,2],lambda x,y:y-x) //如果y-x>0则两个数交换位置,使用冒泡排序
[3, 2, 1]

4,闭包(Closure),使用返回函数形式:

def count():
    fs=[]
    for i in  range(1,4)
        def f(j):
            def g():
                return j*J
            return g
        fs.append(f(i))
    return fs
for i in count():
    print i,j

5,匿名函数:lambda

6,“装饰器”(Decorator):对方法进行增强说明,但有不去改变方法

import functools

def log(args):
    """"""
    task = "call"
    def actual_log(func):
        @functools.wraps(func)
        def wrapper(*args,**kw):
            print ‘%s:%s()‘ % (task,func.__name__)//两个下划线
            return func(*args, **kw)
        return wrapper
    if hasattr(args,‘__call__‘):
        return actual_log(args)
    else:
        task = args
        return actual_log

@log
def f():
    pass

@log("execute")
def e():
    pass

5,偏函数

>>> max2=functool.partial(max,10) //10作为*args的一部分自动加到左边
>>> max2(1,3,4,5)
10>>> def func(a,b,c):>>>  print a,b,c>>>func2=functools.partial(func,b=3) 替换关键参数>>>func(1,c=4)1 3 4
时间: 2024-10-28 11:02:59

python学习心得的相关文章

Python学习心得:类与对象

教材:<简明Python教程> Python面向对象: 如shell这种面向过程的程序都是通过"操作数据的函数"或者"语句块"来设计函数. python的程序(面向对象): 类是一个"class"类型,对象是类中的一个实例. 类的属性包括了:域和方法.(即变量和函数) 属于一个对象或类的变量被称为域,一个定义在类中的函数,叫做类的方法. 类使用关键字"class"来创建.域和方法放在同一个缩进块中. 1.域有两种:

Python学习心得第一周-02

十二 流程控制之if...else 既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟.人脑无非是数学运算和逻辑运算,对于数学运算在上一节我们已经说过了.对于逻辑运算,即人根据外部条件的变化而做出不同的反映,比如 1 如果:女人的年龄>30岁,那么:叫阿姨 age_of_girl=31 if age_of_girl > 30: print('阿姨好') 2 如果:女人的年龄>30岁,那么:叫阿姨,否则:叫小姐 age_of_girl=1

python学习心得2019/9/25

python的介绍:Python是一种跨平台的计算机程序设计语言(高级开发语言同Java与Objective). 特点:面向对象动态类型,简洁.易读以及可扩展性. 学习目标:Python where we can, C++ where we must在操控硬件的场合使用C++,在快速开发时候使用 Python. 和其他语言对比:python->字节码->机器语言->0101,没有C/C++快,内存管理不用自己考虑了,不考虑过程,难度与所学过的语言相比,c/c++>Objective

Python学习心得(六) 反射机制、装饰器

1.反射机制 #/usr/bin/env python # -*- coding:utf-8 -*- ''' Python反射机制的核心本质:利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动 通俗讲就是通过用户传入url的不同,调用不同的模块函数,好多比较流行的web框架都是通过反射的机制,根据url的不同指向不同的模块 getattr(),hasattr(),setattr(),delattr()对模块的修改都在内存中进行,并不会影响文件中的真实内容

Python学习心得(四) yield和三元运算以及lambda表达式

1.yield 英文意思生产.生成的意思,在Python中带有yield的函数被称为生成器(Generator) ''' for i in range(10000) #生成10000个元素的List 值越大,运行中占用的内存就会越大 for j in xrange(10000) #xrange返回的不是List,而是一个iterable的对象 每次迭代返回下一个数值,占用很小的内存空间 ''' def readFileByYield(xpath): with open(xpath,'rb') a

Python学习心得(三)函数之任意数量实参、任意数量关键字实参、导入模块中的函数

#!/usr/bin/python # -*- coding:utf-8 -*- ''' 1.传递任意数量的实参 Python允许函数传入任意数量的实参,例如: *messages形参名中的*表示让Python创建一个空的名称为messages的元组,接收传入的所有值 ''' def get_person_message(*messages): concat = '' for message in messages: concat += ' ' + message print "\nShow P

Python学习心得(五) random生成验证码、MD5加密、pickle与json的序列化和反序列化

# -*- coding:utf-8 -*- import random as rd #验证码 import hashlib as hsl #MD5加密 import pickle,json #pickle与json序列化 #print rd.randint(1,5) #print help(range) #print help(rd.randint) #随机生成6位验证码: code = [] for i in range(1,7): if i == rd.randint(1,6): code

Python学习心得(七) 深入理解threading多线程模块

Python提供了多个模块来支持多线程编程,包括thread.threading和queue模块等.thread模块提供了基本的线程和锁定支持:而threading模块提供了更高级别.功能更全面的线程管理.queue模块,用户可以创建一个队列数据结构,用于在多线程之间进行共享. 核心提示:避免使用thread模块 推荐使用更高级别的threading模块,原因如下: 1.threading模块更加先进,有更好的线程支持,并且thread模块中的一些属性会和threading模块有冲突: 2.低级

python 学习心得-3

学习了元祖,写了小程序. #encoding = utf-8 a = ("success","false","what")print "first"print a      #print all stringprint "\n"print "second"print a[:]   #pirnt all stringprint "\n"print "third

Python学习心得(二) 字典Dictionary

前言 . 在Python中字典就是一系列的键值对,一种可变容器,可以存储任意对象,也被称作关联数组或哈希表. 1.基本语法   用一对花括号{}中的一系列键值对表示,键与值之间用冒号分隔,键值对之间用逗号分隔,例如: blogger = {'name': 'binguo','age': 27} 2.访问字典中的值 print 'name:'+ blogger['name'] +' age:' +str(blogger['age']) 3.添加键值对 blogger['gender'] = 'ma