ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

函数

2021-11-16 05:04:11  阅读:126  来源: 互联网

标签:函数 位置 关键字 参数 实参 def


目录

函数的作用

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

函数的语法结构

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.如果你在全局
    	全局 >>> 内置

标签:函数,位置,关键字,参数,实参,def
来源: https://www.cnblogs.com/alearnedu/p/15559320.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有