Fork me on GitHub

python基础---->函数


一、函数介绍

在学习函数之前,我们编程一直遵循面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能;

而学了函数之后,我们可以把相同作用的代码放到一个函数中;这样显然程序的重用性和可读性要好一些

这也是函数式编程和面向过程编程的区别:

  函数式:将相同作用的代码封装到函数中,之后调用函数即课使用

  面向过程:根据问题逻辑从上到下写强堆代码......

二、函数的定义和使用

1、一般函数的定义

def func(name):     # name是形式参数
    print(name)      # 函数体

func('clint')       # 执行函数,'clint'是传入的实参

传递一个默认参数

def info(name,age,country = 'China'):   #country定义了一个默认参数
    print('姓名:',name)
    print('年龄:',age)
    print('国家:',country)

info('clint',18)     #调用时,没穿实参countrty,就用默认的参数

正常情况下,给函数传参数要按顺序,不想按顺序就指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后

def info
     ...
   
info(age=18,name='clint')   #使用关键参数,可以不按顺序

*args 和 **kwargs

def info(name,age,*args):     #*args会把多传入的参数变成一个元组形式
   def info(name, *args, **kwargs):  # **kwargs 会把多传入的参数变成一个dict形式    

2、内置函数

三、递归函数

递归函数:函数在内部调用自身。

符合递归函数的条件:

1. 结束条件;

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;

3. 递归效率不高,递归层次过多会导致栈溢出

PS:python默认最大递归数为999,但可通过以下代码进行设置:

import sys
sys.setrecursionlimit(10000)     # 将递归数设置为10000

实例:

斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,...

版本一:

# -*- coding:utf-8 -*-
__Author__ = "Clint"
fibonaccis = []


def fibonacci(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)


for i in range(1, 10):
    fibonaccis.append(fibonacci(i))

print(fibonaccis)

版本二:

# -*- coding:utf-8 -*-
__Author__ = "Clint"


def fib(max):
    n = 0
    a = 0
    b = 1
    while n < max:
        print(b)
        a, b = b, a + b  # ===> 赋值语句相当于 t=(b,a+b) a=t[0],b=t[1]
        n += 1
    return 'done'


fib(10)

再来一个n的阶乘,求n!

#递归实现阶乘n! = (n-1)! × n
def fac(n):
    if n == 1:
        return 1
    else:
        return n * fac(n-1)
print(facl(10))

四、匿名函数lambda

# ###################### 普通函数 ######################
# 定义函数(普通方式)
def func(arg):
    return arg + 1
    
# 执行函数
result = func(123)
    
# ###################### lambda ######################
    
# 定义函数(lambda表达式)
my_lambda = lambda arg : arg + 1
    
# 执行函数
result = my_lambda(123)

五、map()、reduce()、filter()函数

map()是 Python 内置的高阶函数,它接收一个函数 func和一个list,并通过把函数 func依次作用在 list 的每个元素上,得到一个新的 list 并返回

def func(x):
    return x * x
a= map(func,range(1,10))
print(list(a))

# 输出为[1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce()函数接收的参数和 map()类似,接收一个函数 func和一个list,但reduce()传入的函数 func 必须接收两个参数,reduce()对list的每个元素反复调用函数func,并返回最终结果值

from functools import reduce
def func(x,y):
    return x + y
a = reduce(func,[1,3,5,7,9,10])
print(a)

# 输出为: 35

filter()函数也是接收一个函数 func和一个list,函数 func的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list

def is_odd(x):
    return x % 2 == 1
a = filter(is_odd,[1,2,3,4,5,6,7,8])
print(list(a))

# 输出为:[1, 3, 5, 7]

六、内嵌函数

在一个函数体内创建另外一个函数,这种函数就叫内嵌函数

def foo():
    print("in the foo")
    def bar():
        print("in the bar")
    bar()


foo()

# 输出为:
in the foo
in the bar   
posted @ 2019-05-16 20:28  Utopia-Clint  阅读(261)  评论(0编辑  收藏  举报