函数

2021/11/16 6:09:41

本文主要是介绍函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 函数的作用
  • 函数的语法结构
  • 函数的分类
  • 函数的返回值
  • 参数的分类
  • 位置参数
  • 关键字参数
  • 默认参数
  • 可变长参数
  • 其他类型参数
  • 名称空间
    • 1.名称空间分类
    • 2.名称空间存活周期
    • 3.名字的查找顺序

函数的作用

函数就是将具备独立功能的代码块封装成一个小模块快,之后想使用直接调用

函数的语法结构

def 函数名(参数1,参数2,...):
    '''说明书'''
    函数体代码
    return 返回值

'''
函数必须先定义再调用
函数在定义阶段只检查语法不执行代码
	只有在调用过程中才会执行代码
'''

函数的分类

通过函数的定义方式分为两大类:

  • 内置函数
    py解释器自带的函数,例如print()、len()...
  • 自定义函数
    • 无参函数
    • 有参函数
    • 空函数
      作用蛮大的,尤其是架构一些项目的时候,可以先把框架搭起来,里面的具体功能后面可以慢慢补上

函数的返回值

1.函数体代码没有return关键字
	默认返回值None
2.函数体只有return,后面没有跟值
	默认返回None
3.函数体代码有关键字return并且后面跟了数据
	多个返回值,返回元组

参数的分类

1.形式参数
  在函数定义阶段所用的参数统称为形式参数,简称'形参'
  
2.实际参数
  在函数调用阶段,向函数名后括号传导的参数,简称'实参'
  
  
  形参与实参的关系可以看成变量名和变量值的关系
  两者只有在函数调用过程中才会暂时绑定在一起,调用结束后即断绑
  
  在表现形式上,实参形式更多,形参表现形式只有变量名

位置参数

定义:按照从左往右的顺序依次填入的参数叫位置参数

  • 位置形参
    函数定义阶段,括号内按照从左往右的顺序依次填入的变量名
  • 位置实参
    在函数调用阶段括号内按照从左往右的顺序依次传入的数据值

位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
位置参数在绑定时,多一个不行少一个也不行
image

关键字参数

定义:在函数调用阶段,用'形参名=数据值'的形式指名道姓进行传参

位置参数要打破yiyi对应的关系,借助关键字实参
def func(a, b):
    print(a, b)


func(b=1, a=2)

形参无法接受多个值,位置实参与关键字实参混用,容易报错
    # 位置参数必须在关键字参数前面
    '''越简单的越靠前,越复杂的越靠后'''

默认参数

定义:函数在定义阶段,就对形参尽心赋值

1.该参数如果在调用阶段不给值,使用默认给定的值
2.该参数如果在调用阶段给定了值,则使用给定的值

可变长参数

可变长形参
# 问题1引入:函数无论传入多少位置参数都可以正常运行

格式
def func(x,y,*a):
	print(x,y,a)
	
func(1,2,3,4,5,6)  # 1,2,(3,4,5,6)
			*号在形参中就是接受多余位置的位置参数,并组织成元组的形式赋值给*号后面的变量名

# 问题2引入:函数无论传入多少关键字参数都可以正常运行

格式
def index(x, y, **b):
	print(x, y, b)
index(y=2, x=1, u=222, k=111, l=444)  # 1 2 {'u': 222, 'k': 111, 'l': 444}
						**号用来接受多余的关键字参数,并组织成字典的模式赋值给**后的变量名

"""
墨守成规
    可变长形参 *与**后面的变量名其实是可以随便定义的
    但是python中推荐使用
        *args  
        **kwargs 
def index(*args, **kwargs):
    pass
"""

# 问题3引入:如果index形参是*args 列表里面有很多元素 如何实现按照位置一一传入
def index1(*args):
    print(args)
new_list1 = [11,22,33,44,55]
index1(*new_list1)  # index1(11,22,33,44,55)

''' *号在实参中会将变量名所对应的列表、元组打散,再yiyi传入函数中 '''

其他类型参数

命名关键字参数
def register(name,age,*,sex,height):
        pass

register('alan',18,'male',188)  # ERROR
register('alan',18,sex='male',height='1.88m')  # 正常运行

"""
sex height在传入实参的时候必须以关键字参数的形式

ps:该类型的参数几乎不用 也几乎很少能碰到
"""

名称空间

1.名称空间分类

  • 内置名称空间
  • 全局名称空间

在PY文件中顶格编写的代码运行之后就会存放在全局空间,但也不绝对,什么if、for都能造例外

  • 局部名称空间

函数体代码在运行之后产生的都是存放在局部名称空间

2.名称空间存活周期

  • 内置名称空间随python解释器启动与关闭而创建和销毁
  • 全局名称空间随py文件的运行与结束而创建和销毁
  • 局部名称空间随函数体代码的执行与结束而创建和销毁

3.名字的查找顺序

# 在查找名字的时候 要先确定自己当前在哪
    1.如果你在局部
    	局部 >>> 全局 >>> 内置
    2.如果你在全局
    	全局 >>> 内置


这篇关于函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程