Python从小白到大牛 — 第10章 函数式编程

第10章 函数式编程

          • 10.1 定义函数
          • 10.2 函数参数
          • 10.3 函数返回值
          • 10.4 函数变量作用域
          • 10.5 生成器
          • 10.6 嵌套函数
          • 10.7 函数式编程基础

10.1 定义函数

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

def 函数名(参数列表):
	函数体
	return 返回值
10.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
10.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
10.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
10.5 生成器

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

def alist():
    n = []
    for i in range(5):
        n.append(i)
    return n

print(alist())
——————————————————————————————————————————————————————————————————————
def blist():
    for i in range(5):
        yield i

print(blist())

print(list(blist()))
=============result=============
[0, 1, 2, 3, 4]
<generator object blist at 0x00000124BDB5A9A8>

[0, 1, 2, 3, 4]

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

10.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
10.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 里导入。

你可能感兴趣的:(python从小白到大牛)