函数 是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。

  • 函数代码块以def关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
  • 函数内容以冒号起始,并且缩进
  • Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None

函数的定义:

 def test0():
"函数_文档字符串"
print('函数内部') print(test0.__doc__) # 函数_文档字符串

若采用默认参数定义函数,调用函数时,缺省参数的值如果没有传入,则被认为是默认值:

 def test1(arg1='参数一', arg2='参数二'):
print('arg1:'+arg1)
print('arg2:'+arg2) test1() # arg1:参数一 arg2:参数二 # 默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的
test1('ice', 'cream') # arg1:ice arg2:cream
test1(arg2='cream', arg1='ice') # arg1:ice arg2:cream

不定长参数。加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可:

 def test2(*args, param):
print(len(args))
for arg in args:
print(arg)
print(param) test2(1, 2, 3, 4, param='This is param') def test3(param, *args):
print(param)
print(len(args))
for arg in args:
print(arg) test3('This is param', 1, 2, 3, 4)

所有参数(自变量)在Python里都是按引用传递。如果在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了

 def test4(mylist):
print(mylist)
mylist.clear()
print(mylist) mylist = [1, 2, 3, 4]
test4(mylist)
print(mylist) # 输出:
# [1, 2, 3, 4]
# []
# []

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None

 def test5():
return (1, 2, 3, 4) def test6():
return 1, 2, 3, 4 def test7():
return [1, 2, 3, 4] result = test5()
print(result) # (1, 2, 3, 4) result = test6()
print(result) # (1, 2, 3, 4) result = test7()
print(result) # [1, 2, 3, 4]

内部函数。函数体内可以再定义函数:

 1 def outerFunc():
2 print('Outer Funtion')
3 def innerFunc():
4 print('Inner Function')
5 innerFunc()
6
7 outerFunc()
8
9 # 输出:
10 # Outer Funtion
11 # Inner Function

函数变量作用域

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中

 temp = 'ice cream'

 def test8():
"全局变量可以在整个程序范围内访问"
print(temp) def test9():
inner_temp = 'ice'
print(inner_temp) print(temp) # ice cream
test8() # ice cream
test9() # ice # 局部变量只能在其被声明的函数内部访问
print(inner_temp) # 报错 name 'inner_temp' is not defined def test10():
print(temp) # 报错 local variable 'temp' referenced before assignment
temp = 'ice'
print(temp)

Python闭包

如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量

 def FuncX(x):
def FuncY(y):
return x * y
return FuncY tempFunc = FuncX(3)
result = tempFunc(5)
print(result) # result = FuncX(3)(5)
print(result) #

匿名函数

python 使用 lambda 表达式来创建匿名函数

  • lambda只是一个表达式,函数体比def简单很多
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去
  • lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率

lambda函数的语法只包含一个语句: lambda [arg1 [,arg2,.....argn]]:expression

使用如下:

 square = lambda x : x**2
print(square(3)) # sum = lambda x, y : x + y
print(sum(2, 3)) #

内置函数filter的使用:

官方文档内容如下:

filter(functioniterable)

Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.

function参数可传入None、函数、lambda表达式,iterable参数传入一个可迭代对象。

若function参数为None:返回可迭代对象中所有不为False的元素

若function参数为函数或lambda表达式:返回  将元素作为函数参数、函数返回值为True  的元素

 reslut = filter(None, [1, 0, False, True])
print(list(reslut)) # [1, True] def odd(num):
return num % 2 reslut = filter(odd, range(10))
print(list(reslut)) # [1, 3, 5, 7, 9] reslut = filter(lambda num: num % 2, range(10) )
print(list(reslut)) # [1, 3, 5, 7, 9]

python3 入门 (三) 函数与lambda表达式、闭包的更多相关文章

  1. 浅析匿名函数、lambda表达式、闭包(closure)区别与作用

    浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...

  2. python函数,lambda表达式,三目运算,列表解析,递归

    一.自定义函数 定义函数时,函数体不执行:只有在调用函数时,函数体才执行.函数的结构: 1. def 2. 函数名 3. 函数体 def func_name(): 函数体 4. 返回值 如果没有声明返 ...

  3. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  4. Kotlin语法(函数和lambda表达式)

    三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...

  5. python3入门之函数

    相信大家学习过其他语言,懂得函数的作用.简单的说函数最好的作用就是可以使程序变得懒惰.python作为后起之秀,当然也会拥有函数这个有用的东西: 创建函数 使用def语句即可创建函数,如创建一个用来生 ...

  6. C#语法之匿名函数和Lambda表达式

    上一篇博客主要是对委托和事件做了一小结,这篇是在上一篇博客的基础上对匿名函数和Lambda表达式小结.还是接着上一篇说起,在上一篇中也说了委托是一种数据结构,主要是解决让函数作为参数的问题.在使用委托 ...

  7. [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式

    引言:此文翻译自CodeProject上的同名文章<C# Delegates,Anonymous Methods, and Lambda Expressions>,在此一起Mark一下,此 ...

  8. C++的匿名函数(lambda表达式)

    总述  C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式.匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的 ...

  9. 《疯狂Kotlin讲义》读书笔记6——函数和Lambda表达式

    函数和Lambda表达式 Kotlin融合了面向过程语言和面向对象语言的特征,相比于Java,它增加了对函数式编程的支持,支持定义函数.调用函数.相比于C语言,Kotlin支持局部函数(Lambda表 ...

随机推荐

  1. Nginx安装学习使用详细记录

    选择Nginx的优点:Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版. Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建 ...

  2. 第二章 Mysql 数据类型简介--(整数类型、浮点数类型和定点数类型,日期与时间类型,字符串类型,二进制类型)

    第一节:整数类型.浮点数类型和定点数类型 1,整数类型 2,浮点数类型和定点数类型 M 表示:数据的总长度(不包括小数点):D 表示:小数位:例如 decimal(5,2) 123.45存入数据的时候 ...

  3. HTML5客户端数据存储

    HTML5 使在不影响网站性能的情况下存储大量数据成为可能.之前,这些都是由 cookie 完成的,cookie不适合大量数据的存储,因为会影响速度. 举个例子: var obj = {x:1}; / ...

  4. FileOutputFormat

    TextOutputFormat<K,V> 默认输出字符串输出格式: SequenceFileOutputFormat<K,V> 序列化文件输出: MultipleOutput ...

  5. [麦先生]初学Laravel框架与ThinkPHP的不同(1)

    作为一个PHP菜鸟初学Laravel框架 在学习过程中我发现了其与TP框架的不同点,由于时间问题和认识还不够完善我先写出其中几点,有错误的地方希望各位大牛斧正... 1.渲染模版方式的不同:在Lara ...

  6. Ubuntu 安装libusb

    执行以下指令 sudo apt-get install libusb-dev sudo apt-get install libusb-1.0-0-dev

  7. 合工大OJ 1330 种树

    Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2, ...

  8. HDU 1892 See you~

    最裸的二维树状数组,但是因为内存太大(c[1010][1010]),好像不能运行,结果蒙着写,写了好久.. 代码: #include <iostream> #include <cst ...

  9. CodeCover初体验

    国庆刚过完,闲来无事,就随便看看,顺便来了解下一些工具的使用,在工作中要用到的时候可以直接上手. CodeCover是一个免费的白盒测试工具,主要测试代码.分支.循环.MC/DC 覆盖.支持为每个测试 ...

  10. Android自定义进度条颜色

    这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\ 下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml ? 1 ...