目录

1.1 定义函数
1.2 函数参数
1.3 函数返回值
1.4 函数变量作用域
1.5 生成器
1.6 嵌套函数
1.7 函数式编程基础

1.1定义函数

官方提供的函数叫内置函数(Built-in Functions,BIF)。

def 函数名(参数列表):
	函数体
	return 返回值

1.2 函数参数

总的来说,大概是这样子

def student(name,gender,school='北京大学',*score):
    print(name,gender,school,*score)     ==> 如果score前面不带*号,就是把后面的参数打包成元组

student('张三','男')   			 ==> 张三 男 北京大学
student('张三','女','深圳大学')	 ==> 张三 女 深圳大学
student('张三','女','深圳大学',90,80,70) ==> 张三 女 深圳大学 90 80 70
# score不带星号的结果
student('张三','女','深圳大学',90,80,70) ==> 张三 女 深圳大学 (90, 80, 70)

还有一个可变参数 前面是两个星号 **,输入的参数会被打包成字典

def student(**info):
    for i,j in info.items():
        print(i,j)
student(name='张三',age='33')
=============result=============
以下是结果:
name 张三
age 33

1.3 函数返回值

有些函数只是为了过程,起到处理的作用,就没必要有return

def show_info(sep=':',**info):
    for k,v in info.items():
        print(k,sep,v)
    return  ==> 函数只是为了打印,此处return可省略

show_info(name='jack',age='22')

result = show_info(name='jack',age='22')
print(result)   ==> 返回None
=============result=============
name : jack
age : 22

name : jack
age : 22
None

有些函数会返回多个值,这时是以元组的形式返回

def add_sub(a,b):
    return a+b,a-b
x,y = add_sub(3,4)
print(x,y)
=============result=============
7 -1

1.4 函数变量作用域

这里有全局变量和局部变量的概念,简单说,在外面的是全局变量,在函数里的是局部变量,函数里需要的变量没有会从外一层一层的找。

x = 1
y = 2		⇒ x, y 为全局变量

def a():
    x = 10
    z = 3		==> 函数里 ,x,z 为局部变量
    print(x,y,z)  ==> 函数里没有变量y,往外找y
    def b():
        print(x,y,z)  ==> 函数里没有 x,y,z,往外找,直到全局变量
    b()
a()
=============result=============
10 2 3
10 2 3


### ```
1.5 生成器
为了省内存,我们会使用yield代替return返回数据,返回的是一个可迭代的,生成器对象,大家对比以下代码
def alist():

n = []

for i in range(5):

n.append(i)

return nprint(alist())

——————————————————————————————————————————————————————————————————————

def blist():

for i in range(5):

yield iprint(blist())
print(list(blist()))

=result=

[0, 1, 2, 3, 4]

<generator object blist at 0x00000124BDB5A9A8>[0, 1, 2, 3, 4]
我们可以这么理解return和yield,我们在淘宝买了好多好多包裹,return是把函数要返回的结果一次性返回,就是把包裹一次性送到你家了,把你家(内存)塞得满满的。yield是把所有包裹放在仓库里,你需要时调用一下,一件包裹到你家,再调用一下,第二件包裹到你家。。。只要你没调用,包裹还在仓库里,你家(内存)也不会被塞满。

### 1.6 嵌套函数
就是函数里再定义函数,这里注意的是全局变量和局部变量。
global 可以把函数内部的变量定义为全局变量
x = 10

def print_value():

x = 100

print(x)

def pb():

global x		==> 定义了全局变量,这时x = 5

x = 5

print(x)

pb()

print_value()

print(x)

=result=

100

5

5
### 1.7 函数式编程基础
lambda表达式:lambda 是匿名函数,就是懒得给函数起名字了,反正只想达到很简单的目的, 不用又括号,又缩进又return什么的
add = lambda x,y: x+y

print(add(2,3))

=result=

5
三大基础函数:过滤、映射、聚合
- filter(func,iterrable): 通过判断函数,进行筛选
- map(func,iterable):将元素转换成函数需要的形式
- reduce(func,iterable):将元素按一定算法积累计算,最后输出一个数据
这三个函数都差不多,只是reduce需要从 functools 里导入。


本文转自SDK社区:[http://www.sdk.cn](http://www.sdk.cn)