六、Python函数

目录

前言

6.1 函数概述

定义

函数式编程优点

6.2 函数的定义与调用

6.2.1定义函数

语法格式

 6.2.2调用函数

定义:

6.3函数参数的传递

分类

位置参数传递

关键字参数传递、默认参数传递

参数的打包与解包

混合传递

6.4函数的返回值

6.4.1 定义

6.5 变量作用域

6.5.1 局部变量和全局变量

定义

局部变量

全局变量

在函数内部

关键字(global)

 6.6 特殊形式的函数

6.6.1 递归函数

定义

条件

阶段

6.6.2 匿名函数

区别

总结



前言

了解 函数的概念及优势

掌握 函数的定义和使用、函数参数的传递

掌握 局部变量和全局变量、递归函数和匿名函数

理解 变量作用域


6.1 函数概述

定义

        函数是组织好的、实现单一功能或相关联功能的代码段。(我们可以将函数视为一段有名字的代码,这类代码可以在需要的地方以“函数名()”的形式调用。)

函数式编程优点

  1. 降程序模块化,既减少了冗余代码,又让程序结构更为清晰

  2. 提高开发人员的编程效率

  3. 方便后期的维护与扩展

例子:打印正方形

def print_triangle(lenth):

      for i in range(lenth):

                for i in range(lenth):

                        print(" * ",end=" ")

                print()

print_triangle(2) #使用函数,打印边长为2个星号的正放心

6.2 函数的定义与调用

6.2.1定义函数

语法格式

前面使用的print()函数和input()都是Python的内置函数,这些函数由Python定义。开发人员也可以根据自己的需求定义函数,Python中使用关键字def来定义函数

 6.2.2调用函数

定义:

        函数的参数传递是指将实际参数传递给形式参数的过程。

  • 函数在定义完成后不会立刻执行,直到被程序调用时才会执行。
def a(c,b):
    i = c+b
    print(i)
a(10,20)

#30
  • 函数内部也可以调用其他函数,这被称为函数的嵌套调用。

6.3函数参数的传递

分类

  • 位置参数传递

将实参按照相应的位置依次传递给形参

def i(a,b):

        if a>b:

                print(a,'是较大值')

        else:

                print(b,'是较大值')

i(5,2)

  • 关键字参数传递、默认参数传递

将实参按照相应的关键字传递给形参。

定义时可以指定形参的默认值

#关键字传参
def info(name,age):
    print("My Name is:%s"%name)
    print("Age:%d"%age)
info(age=19,name="AAA")

#默认传参
def infos(name,age,sex="男"):
    print("My Name is:%s"%name)
    print("Age:%d"%age)
    print("Sex:%d"%sex)
info(age=19,name="AAA",sex="男")

参数的打包与解包

  • 接收以字典或元组形式打包的多个值
  • 实参是元组   →   可以使用“*”拆分成多个值  →  按位置参数传给形参 实参是字典   →    可以使用“**” 拆分成多个键值对    →    按关键字参数传给形参
#打包
def f(*args):
    print(args)
f()    #()
f(1,2,3,4)  #(1,2,3,4)

def f(**kwargs):
    print(kwargs)
f()   #()
f(a=1,b=2)   #('a':1,'b':2)

#解包
def func(a,b,c):
    print(a,b,c)
argc=(1,2,3)
func(*argc)   #1 2 3

kwargs = {'a':1,'b':2,'c':3}

func(**kwargs)   #1 2 3

混合传递

  • 混合传参规则

1.优先按位置参数传递的方式。

2.然后按关键字参数传递的方式。

3.之后按默认参数传递的方式。

4.最后按打包传递的方式。 

  • 带有默认值的参数必须位于普通参数之后。 带有“*”标识的参数必须位于带有默认值的参数之后。 带有“**”标识的参数必须位于带有“*”标识的参数之后。

6.4函数的返回值

6.4.1 定义

  • 函数中的return语句会在函数结束时将数据返回给程序,同时让程序回到函数被调用的位置继续执行
def filter_sensitive_word(words):
    if"山寨" in words:
        new_words = words.replace("山寨","**")
        return new_words
result = filter_sensitive_words("这手机是山寨的")
print(result)

#这个手机是**版的
  • 函数使用return语句返回了多个值,那么这些值将被保存到元组中
def a(x,y):
    i=1
    y=2
    z=3
    return i,y,z
print('返回类型:',type(a()))
print('返回值:',a())

#返回类型:<class 'tuple'>
#返回值:(1,2,3)
    

        注:函数是可以返回执行结果值;函数的返回值有三类:返回单个值、返回None、返回多个值;函数返回多个值是,是需要通过变通的方式实现,即需要借助列表、元组、字典等序列对象。

6.5 变量作用域

  1. 变量并非在程序的任意位置都可以被访问,其访问权限取决于变量定义的位置,其所处的有效范围称为变量的作用域。
  2. 根据作用域的不同,变量可以划分为局部变量和全局变量。

6.5.1 局部变量和全局变量

  • 定义

        全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用。

  • 局部变量

        不同函数内部可以包含同名的局部变量,这些局部变量的关系类似于不同目录下同名文件的关系,它们相互独立,互不影响。

name="a"
def a1():
    name="b"
    def b1():
        global name
        name="c"
    b1()
    print(name)
print(name)
a1()
print(name)

#"a","b","c" 
  • 全局变量

        全局变量可以在整个程序的范围内起作用,它不会受到函数范围的影响。

a = "ZZZ"
def return_website():
    return website
print(f'My name is {return_website}')

# My name is ZZZ
  • 在函数内部

函数内部只能访问全局变量,而无法直接修改全局变量。如果局部变量与全局变量变量名一样,则优先调用局部变量。

  • 关键字(global)

        如果想在函数内部改变全局变量,在前面加上global关键字。

a=10
def i():
    global a
    a = 100

print(a)  # 打印全部变量
i()       # 局部变量
print(a)  # 改变后的全局变量

 6.6 特殊形式的函数

6.6.1 递归函数

  • 定义

        若函数内部调用了自身,则这个函数被称为递归函数。

  • 条件

  1. 递归公式是求解原问题或相似的子问题的结构。
  2. 边界条件是最小化的子问题,也是递归终止的条件。
  • 阶段

  1. 递推:递归本次的执行都基于上一次的运算结果。

  2. 回溯:遇到终止条件时,则沿着递推往回一级一级地把值返回来。

6.6.2 匿名函数

  • 区别

普通函数在定义时有名称,而匿名函数没有名称;

普通函数的函数体中包含有多条语句,而匿名函数的函数体只能是一个表达式;

普通函数可以实现比较复杂的功能,而匿名函数可实现的功能比较简单;

普通函数能被其他程序使用,而匿名函数不能被其他程序使用。

定义好的匿名函数不能直接使用,用一个变量保存它,以便后期可以随时使用这个函数




总结

        主要讲解了函数的相关知识,包括函数概述、函数的定义和调用、函数参数的传递、函数的返回值、变量作用域、特殊形式的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值