一、基本概念
1、定义函数
1 | def 函数名(参数列表): |
1
2 def area(width, height):
return width * height
2、调用函数
1 | 方式一:函数名(参数列表) |
1
2
3
4
5
6
7
8
9 #调用方式1
def printme( str ):
print (str);
return;
printme("我要调用函数!")
#调用方式2
pr = printme
pr("我要调用函数!")
3、参数传递
(1)可更改(mutable)与不可更改(immutable)对象:
在python中,numbers,strings,tuples,是不可更改的对象,而list,dict等则是可以修改的对象。
- 传不可变对象:传递的只是不可变对象的值,没有影响不可变对象本身。
- 传可变对象:可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
(2)参数:
- 必需参数
- 默认参数
- 可变参数
- 关键字参数
1)必选参数
必选参数就是在调用函数的时候要传入数量一致的参数。
1
2 def add(x, y):
print x + y2)默认参数
默认参数是指在定义函数的时候提供一些默认值,如果在调用函数的时候没有传递该参数,则自动使用默认值,否则使用传递时该参数的值。
1
2 def add(x, y, z=1): #默认参数要放在所有必选参数的后面,默认参数应该使用不可变对象。
print x + y + z3)可变参数
可变参数允许你将不定数量的参数传递给函数。
1
2
3
4
5
6
7
8 def printinfo( arg1, *vartuple ):
print (arg1)
for var in vartuple:
print (var)
return;
printinfo( 10 );
printinfo( 70, 60, 50 );4)关键字参数
而关键字参数则允许你将不定长度的键值对, 作为参数传递给一个函数。
1
2
3
4
5
6
7
8
9
10
11 def sum(**kwargs):
sum = 0
for k, v in kwargs.items():
sum += v
return sum
dict1 = {'x': 1}
sum(**dict1)
dict2 = {'x': 2, 'y': 6}
sum(**dict2)5)参数组合
它们在使用的时候是有顺序的,依次是必选参数、默认参数、可变参数、关键字参数。
1
2
3
4
5
6 def func(x, y, z=0, *args, **kwargs):
print('x =', x)
print('y =', y)
print('z =', z)
print('args =', args)
print('kwargs =', kwargs)
1 | # 函数 |
4、return语句
return [表达式] 语句用于退出函数,选择性地向调用方返回一个tuple表达式。
(1)返回一个值
1 | def sum( arg1, arg2 ): |
(2)返回多个值
1 | import math |
二、变量作用域
1、变量作用域
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内建作用域
1 | x = int(2.9) # 内建作用域 |
2、作用域引入
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问
3、global和nonlocal关键字
(1)当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了
1 | num = 1 |
(2)如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要nonlocal关键字了
1 | def outer(): |
作用域概览示例:
1 | # 作用域 |
3、闭包
内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。
1 | def line_conf(a,b): |
三、匿名函数
使用lambda来创建匿名函数。lambda [arg1 [,arg2,.....argn]]:expression
1 | sum = lambda arg1, arg2: arg1 + arg2 |
python中有几个定义好的全局函数方便使用:map、filter、reduce。
1 | from functools import reduce |
持续更新…
最后更新: 2018年12月04日 11:11