Python积累

math.sqrt()  返回的是浮点数

在python的shell下,如果要定义一个函数,需要使用ctrl+D或者Ctrl+Z来退出函数的定义,另外要手动缩进,否则会出错。

当利用readline()读到一个文件尾时,没有读到内容时会返回一个EOF。

而EOF如果被raw_input()之类的函数接收,则会引发一个EOFError错误。

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

map(f,x)

给定任意一个字符串,返回开头为大写其余为小写的格式

可使用str.title()   str.capitalize()   str[0].upper+str[1:].lower()  这么几种方法

reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。reduce()还可以接收第3个可选参数,作为计算的初始值。

reduce(f, [1, 3, 5, 7, 9], 100)

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。True的情况才保留。None和false项会自动滤除。

x%2==0 偶数与否  x%2==1 奇数与否

s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。

当rm为空时,默认删除空白符(包括‘\n‘, ‘\r‘, ‘\t‘, ‘ ‘)

Python内置的 sorted()函数可对list进行排序(默认是升序,数字字符串皆可),但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。

sorted([36, 5, 12, 9, 21], reversed_cmp)

Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数。在函数f内部可定义一个函数g。由于函数g也是一个对象,函数名g就是指向函数g的变量,所以,最外层函数f可以返回变量g,也就是函数g本身。

返回函数可以把一些计算延迟执行。由于可以返回函数,我们在后续代码里就可以决定到底要不要调用该函数。

def calc_prod(lst):

def a():

return reduce(lambda x,y:x*y, lst)

return a

def calc_prod(lst):

return lambda: reduce(lambda x, y : x * y, lst)     //最短的结果

def calc_sum(lst):

def lazy_sum():

return sum(lst)

return lazy_sum

像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。

闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。

返回多个函数

def count():

fs = []

for i in range(1, 4):

def f():

return i*i

fs.append(f)

return fs

f1, f2, f3 = count()  调用f1()、f2()、f()时,结果全是9,使用闭包时要注意避免这种情况。

def count():

fs = []

for i in range(1, 4):

def f(x=i):        //默认量

return x*x

fs.append(f)

return fs

def count():

fs = []

for i in range(1, 4):

fs.append(lambda i=i : i*i)

return fs                     //返回匿名函数

关键字lambda 表示匿名函数,冒号前面的x表示函数参数。

匿名函数有个限制,就是只能有一个表达式,写return,返回值就是该表达式的结果,也即一个函数变量。

myabs = lambda x: -x if x < 0 else x     //注意后面的语句

装饰器

采用的是高阶函数能接受函数并返回函数的特点。

def new_fn(f):     //装饰器函数

def fn(x):

print “message”

return f(x)

return fn

Python内置的@语法就是为了简化装饰器的调用

可极大简化代码,避免编写重复性代码

打印日志 @log   检测性能@performance 数据库事务@transaction URL路由 @post(‘/register’)

def log(f):                  //装饰器函数

def fn(x):

print “Message”   //添加想要的新功能

return f(x)        //执行旧功能

return fn                 //把函数f装饰一下,让其变为一个含有说明的函数

@log             //装饰函数

def f(x):

return x*2      //装饰器作用于下面定义的函数,f变成了装饰后的函数

@log 要先定义,然后才能用其来装饰其他新定义的函数

要让@log自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用。

def log(f):

def fn(*args, **kw):

print ‘Message‘

return f(*args, **kw)

return fn

time 模块

start=time.time()  //获取当前时间,以秒为单位

编写无参数decorator

import time

def performance(f):

def fn(*args,**kw):

start=time.time()

temp=f(*args,**kw)

end=time.time()

print ‘call %s() in %fs‘ % (f.__name__, (end - start))

return temp

return fn

@performance

def factorial(n):

return reduce(lambda x,y: x*y, range(1, n+1))

print factorial(10)

有参数的decorator

import time

def performance(unit):

def performance_l(f):

def fn(*args, **kw):

start = time.time()

temp= f(*args, **kw)

end= time.time()

print ‘call %s() in %s%s‘ % (f.__name__, (end-start), unit)

return temp

return fn

return performance_l

@performance(‘ms‘)

def factorial(n):

return reduce(lambda x,y: x*y, range(1, n+1))

print factorial(10)

完善decorator

@decorator可以动态实现函数功能的增加,但是,经过@decorator“改造”后的函数,和原函数相比,其一些原函数的属性比如__doc__、__name__等都会消失。因为其本质就是函数替换。

Python内置的functools可以用来自动化完成这个“复制”的任务

import functools

def log(f):

@functools.wraps(f)

def wrapper(*args, **kw):

print ‘call...‘

return f(*args, **kw)

return wrapper

@functools.wraps(f)应该放在最内层开头。  也即是 对最内层函数进行下装饰

如果不进行此项,最后装饰器返回的函数信息是最内层函数定义的信息。

functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。即可重新定义函数的默认参数值。并返回一个新函数。

int2 = functools.partial(int, base=2)

模块和包

将所有代码放入一个py文件中,难以维护。

分拆放入多个py文件中。

好处:同一个名字的变量互不影响。

模块的名称就是py文件的文件名。

模块多了的话,也容易重名。把同名的模块放入不同的包。

import p1.util

print p1.util.f(2,10)   //调用

在文件系统中,包就是文件夹,模块就是py文件。

包可以有多级。如何区分包和普通目录? 包下面必须有个__init__.py文件,每一层都要有,即使是空文件,这样python就会把这个目录当成一个包来处理。

import math         //引入名称空间而已,调用还需加模块名

math.pow(2,0.5)   math.pi

form math import pow,sin,log   //引入特定函数

form math import *   //会有重名冲突的风险

from math import log

from logging import log as logger   //通过起别名来避免冲突

如果导入的模块不存在,Python解释器会报ImportError错误。

如果要提高Python代码的运行速度,最简单的方法是把某些关键函数用C语言重写,如此可大大提高执行速度。

如StringIO模块是纯Python代码编写的,而cStringIO模块部分函数是C写的。

常利用ImportError来进行动态导入

try:

from cStringIO import StringIO

except ImportError:

from StringIO import StringIO

利用import ... as ...,还可以动态导入不同名称的模块。

标准库的文件组织?

时间: 2024-10-01 07:27:26

Python积累的相关文章

Python积累三:object() take no object!

A,报错:object() take no object! 根因:代码书写级错误!!!!! 两个原因: 1. __init__ 左右都是2个下划线,这里自己没掉进去! 2.init写成int,不是int,太想当然,成功掉坑里!!!!!! B,报错:IndentationError: expected an indented block 是脚本缩进的问题,检查脚本缩进是否有空格和tab混用的情况或者是缩进明显不对的情况. C,报错:unindented does not match any out

Python就业方向

0.WEB开发 Python拥有很多免费数据函数库.免费web网页模板系统.以及与web服务器进行交互的库,可以实现web开发,搭建web框架,目前比较有名气的Python web框架为Django.从事该领域应从数据.组件.安全等多领域进行学习,从底层了解其工作原理并可驾驭任何业内主流的Web框架. 1. 桌面软件 Python在图形界面开发上很强大,可以用tkinter/PyQT框架开发各种桌面软件! 2. 网络编程 网络编程是Python学习的另一方向,网络编程在生活和开发中无处不在,哪里

Python为什么会这么火呢?原因是什么?

Python是一门非常不错的编程语言,也是非常具有发展前景的学科,学习之后可以从事多个岗位,薪资待遇也是非常不错的,成为大家进入IT行业的首选.那么Python为什么会这么火呢?为大家简单的介绍一下. 因为Python简单明了,非常容易上手,对于初学者或者新手来说,Python是非常容易学习和使用的,最容易学习的编程语言之一.还有部分原因是它简化了语法,更加贴近自然语言,可以让Python代码更加快速的执行. 同时Python有庞大的外围库来支持,比如说科学计算.人工智能等成熟的库,虽然是一种解

如果你不懂计算机语言,那么就请你不要说你是学计算机的!!好丢人。。。

如果你不懂计算机语言,那么就请你不要说你是学计算机的!!好丢人的...今天然我带你深入了解真正的计算机语言! 编程语言可分为三种:高级语言.汇编语言.机器语言. 1.什么是高级语言? 高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元. 常见的高级语言:Java.C.C++.Python.PHP.JavaScript.ruby以及其他脚本语言 2.什么是机器语言? 机器语言(machine language)是一种指令集的体系.这种指令集,称机器码(machine co

【Python】 零碎知识积累 III

零碎积累 III ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个坑,那就是当你在函数体中对默认参数做一些改变的时候,若参数默认值是int,str这种不可变类型,那么还好,因为默认参数在内存中并没改变,只是参数指向另一块空间:但若是list这种可变类型,当你对默认参数做改变的时候,将会直接影响这个参数在内存中实际的值,这也就影响了下次调用这个函数时参数的默认值.比如: def foo

【Python】 零碎知识积累 II

零碎积累II ■ global关键字用于把跟着的变量声明为全局变量.在看似不属于其的命名空间里也可以引用它. ■ 讲一个一维列表二维化的方式,用简单的一行语句来表达: [[array[rows*y+cols] for cols in range(y)] for rows in range(x)] #array是一个一维列表(或者数组),x表示二维化后的行数,y表示列数 ■ 想用C,java里面的switch语句结构,但是python里没有的时候,可以 1.  搞很多个if判断,不过这样很繁琐 2

python小型函数技巧积累

preface:在前进的路上遇到的python各种小函数技巧积累. enumerate:枚举 format:格式化输出. 对字符串进行输出时,print加逗号可破,但当字符串变量多了起来的时候,同字符串常量放在一起,逗号就变多了.不太方便.通过format类进行格式化,将变量都放在一起,能够更加方便地控制输出格式.具体的fomat语法说明网上博客也是一大堆,如http://www.2cto.com/kf/201312/262068.html,稍微提到的一些.当然,还有最重要的官网的资料的了:ht

python内置函数积累

python中有很多的内置函数,所谓内置函数,就是在python中被自动加载的函数,任何时候都可以用.内置函数,这意味着我们不必为了使用该函数而导入模块.不必做任何操作,Python 就可识别内置函数.在今后的学习中,不断地去学习这些内置函数. getattr(object, name[, default]) 官网上对getattr()函数的说明如下:Return the value of the named attribute of object. name must be a string.

python 字符串方法积累

字符串方法 str.strip([chars]) 返回字符串的副本,删除前导符和尾随符,chars参数为需要被删除的字符集,默认情况下删除空格,chars参数不是前缀或后缀,而是所有chars参数中的组合都被删除 例如: >>> 'www.example.com'.strip('cmowz.') 'example' >>> '   spacious   '.strip() 'spacious' str.join(iterable) 通过iterable将字符串串联起来并