定义

返回单值

def my_abs(x):

if x >= 0:

return x

else:

return -x

返回多值

返回多值就是返回一个tuple

import math

def move(x, y, step, angle=0):

nx = x + step * math.cos(angle)

ny = y - step * math.sin(angle)

return nx, ny

空函数

def nop():

pass

指定默认参数

必选参数在前,默认参数在后。默认参数需指向不可变对象(默认参数值在函数定义时被计算)

def power(x, n=2):

s = 1

while n > 0:

n = n - 1

s = s * x

return s

可变参数

def calc(*numbers):

sum = 0

for n in numbers:

sum = sum + n * n

return sum

调用可变参数的函数方法

>>> calc(1, 2)

5

>>> calc()

0

>>> nums = [1, 2, 3]

>>> calc(*nums)

14

关键字参数

def person(name, age, **kw):

print 'name:', name, 'age:', age, 'other:', kw

调用关键字参数的方法

>>> person('Michael', 30)

name: Michael age: 30 other: {}

>>> person('Bob', 35, city='Beijing')

name: Bob age: 35 other: {'city': 'Beijing'}

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

>>> kw = {'city': 'Beijing', 'job': 'Engineer'}

>>> person('Jack', 24, **kw)

name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

注:

参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

递归

如果一个函数在内部调用自身本身,这个函数就是递归函数。

尾递归

在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。

高阶函数

变量可以指向函数(函数可以赋值给一个变量)

函数名也是变量(函数名可以赋值其他值)

函数可以做为函数的参数(高阶函数)

map(func, list)

map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

>>> def f(x):

... return x * x

...

>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

[1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce(func_with_two_params, list)

reduce把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。

reduce(f, [x1, x2, x3, x4])

#相当于:

f(f(f(x1, x2), x3), x4)

>>> def add(x, y):

... return x + y

...

>>> reduce(add, [1, 3, 5, 7, 9])

25

filter(func_return_bool, list)

把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

def is_odd(n):

return n % 2 == 1

filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])

# 结果: [1, 5, 9, 15]

sorted

对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,

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

[5, 9, 12, 21, 36]

高阶函数用法

def reversed_cmp(x, y):

if x > y:

return -1

if x < y:

return 1

return 0

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

[36, 21, 12, 9, 5]

函数做为返回值

def lazy_sum(*args):

def sum():

ax = 0

for n in args:

ax = ax + n

return ax

return sum

>>> f = lazy_sum(1, 3, 5, 7, 9)

>>> f

>>> f()

25

注:每次调用lazy_sum()都会返回一个新的函数,即使传入相同的参数。

闭包

def count():

fs = []

for i in range(1, 4):

def f():

return i*i

fs.append(f)

return fs

f1, f2, f3 = count()

>>> f1()

9

>>> f2()

9

>>> f3()

9

原因是调用count的时候循环已经执行,但是f()还没有执行,直到调用其时才执行。所以返回函数不要引用任何循环变量,或者后续会发生变化的变量。

匿名函数(lambda表达式)

等价于:

def f(x):

return x * x

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

匿名函数做为返回值

def build(x, y):

return lambda: x * x + y * y

装饰器(@func)

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),本质上,decorator就是一个返回函数的高阶函数。

def log(func):

def wrapper(*args, **kw):

print 'call %s():' % func.__name__

return func(*args, **kw)

return wrapper

@log

def now():

print '2013-12-25'

>>> now()

call now():

2013-12-25

#相当于执行:

now = log(now)

回到顶部

带参数的装饰器

def log(text):

def decorator(func):

def wrapper(*args, **kw):

print '%s %s():' % (text, func.__name__)

return func(*args, **kw)

return wrapper

return decorator

@log('execute')

def now():

print '2013-12-25'

#执行结果

>>> now()

execute now():

2013-12-25

#相当于执行:

>>> now = log('execute')(now)

剖析:首先执行log('execute'),返回的是decorator函数,再调用返回的函数,参数是now函数,返回值最终是wrapper函数。

__name__

由于函数的__name__已经改变,依赖于此的代码就会出错。因此使用functools.wraps。

import functools

def log(func):

@functools.wraps(func)

def wrapper(*args, **kw):

print 'call %s():' % func.__name__

return func(*args, **kw)

return wrapper

#对于带参函数

import functools

def log(text):

def decorator(func):

@functools.wraps(func)

def wrapper(*args, **kw):

print '%s %s():' % (text, func.__name__)

return func(*args, **kw)

return wrapper

return decorator

偏函数(固定函数默认值)

>>> import functools

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

>>> int2('1000000')

64

>>> int2('1010101')

85

#相当于:

def int2(x, base=2):

return int(x, base)

max2 = functools.partial(max, 10)

相当于为max函数指定了第一个参数

max2(5, 6, 7)

#相当于:

max(10, 5, 6, 7)

python函数笔记_初学Python函数的笔记整理相关推荐

  1. python xpath循环_初学Python,就用它爬取一点情话说给她听!

    老铁们,一年一度的520就要来了,大家有没有正在抓耳挠腮的给女朋友准备礼物呢? 作为一个业余非专业程序猿(ps:自称程序猿,哈哈),最近初学python,用它来抓取情话网站的100页情话,作为给女朋友 ...

  2. python return用法_初学Python要了解什么 装饰器知识汇总有哪些

    初学Python要了解什么?装饰器知识汇总有哪些?在Python学习过程中,有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用,比 ...

  3. python拟合非线性模型_初学Python拟合Langmuir非线性方程

    以前都是用origin来进行拟合,但是参数初值需要猜测,有时候不一定能够得到正确结果.后来用过MATLAB的工具箱,可以拟合,但电脑要安装MATLAB还是占挺大空间的.花了一下午了解了一下用Pytho ...

  4. 学好python的技巧_初学Python搞不懂基础怎么学得好?掌握这9个技巧你也可以做大神...

    整理字符串输入 整理用户输入的问题在编程过程中极为常见.通常情况下,将字符转换为小写或大写就够了,有时你可以使用正则表达式模块「Regex」完成这项工作.但是如果问题很复杂,可能有更好的方法来解决: ...

  5. python的难点_初学python的操作难点总结(新手必看篇)

    如下所示: 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的目录 直接 dir 3 想在一个盘下进去一个文件夹,用cd空格目标文件 cd p 4 写文件的第一个字母 ...

  6. python换发型_初学Python的一些细节

    一.python的数据类型 1.python的基本数据类型包括数值数据类型和字符串数据类型:基本数据类型的特点是不允许改变,如果改变基本数据类型的值,会导致内存的重新分配. int 整形 二进制 a ...

  7. 儿童学python第一课_初学Python(第一课)

    今天整理一下关于Python初学者的基础知识部分的第一课,因为之前学习过C,所以过于基础的知识就不详细记录了. Python相对于C\C++来说,在语法方面已经很简单了:甚至对于JavaScript也 ...

  8. python index函数时间复杂度_初学python之以时间复杂度去理解列表常见使用方法

    列表list,一个有序的队列 列表内的个体为元素,由若干个元素按照顺序进行排列,列表是可变化的,也就是说可以增删 list定义 常用的列表定义方式: 使用[] 或者 a = list() 取数列表可以 ...

  9. 学python哪个app比较好_初学python编程,有哪些不错的软件值得一用?

    初学python编程,有哪些不错的软件值得一用? 萧楚故人 发表于 2020-7-17 00:17:55 只看该作者 只看大图 倒序浏览 阅读模式 10 19832 下载好向圈APP可以快速联系圈友 ...

最新文章

  1. android类中定义颜色,自定义实现简单的Android颜色选择器(附带源码)
  2. 基于电子邮件的InfoPath表单发布的注意点 [Infopath 2007]
  3. Codeforces Round #613 (Div. 2) E. Delete a Segment 离散化
  4. 小程序 Typescript 最佳实践
  5. C语言 ,嵌入式 ,数据结构 面试题目(2)
  6. windows版一键绕id工具_Windows免费版一键绕过IOS13.6激活锁工具XgRiNdA,完美重启!...
  7. solr 5.3.1 使用java_Apache Solr 5.3.1 发布下载,Java 全文搜索服务器
  8. MySQL远程实时备份binlog
  9. 转(HP大中华区总裁孙振耀退休感言)
  10. vue引用electron_前端跨平台桌面开发技术:Electron 快速起步
  11. 如何查看静态库中有哪些函数
  12. Spring框架(IoC、AOP面向接口切面)
  13. 细说分布式Redis架构设计和那些踩过的坑
  14. Visual Sourcesafe Internet使用备忘
  15. shell编程 date、md5sum、curl
  16. vim替换字符串带斜杠_vim替换命令
  17. 米家扫地机器人是石头代工_石头扫地机器人T4全面评测 支持软件虚拟墙,清扫更高效...
  18. list去重及求两个list中元素的重复率
  19. 我用 Python 写了个基金涨跌通知助手
  20. c语言1ms延时程序,请教老师,51微控制器在12M晶振,C语言程式设计时,延时函式120次=1ms(书本上是这样的,不懂),是怎样得来的?...

热门文章

  1. 数据分析和数据挖掘有什么区别
  2. 如何保障大数据平台的安全性
  3. java学习(六)多线程 上
  4. 文件管理系统源码_【程序源代码】人力资源管理系统
  5. 《Python自动化》学习笔记:shutil模块使用介绍
  6. Python高级专题 - 类型转换的魔术方法
  7. ceph查看卷_基于CEPH后端存储搭建Harbor
  8. 二叉树的遍历实验报告C语言,数据结构-二叉树的遍历(类C语言描写叙述)
  9. Hue中Sqoop导数报错Could not load db driver class: com.mysql.jdbc.Driver
  10. mven2 + androMDA 初探