ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【Python从入门到精通】(十一)Python的函数的方方面面【收藏下来保证有用!!!】

2021-07-21 08:00:26  阅读:153  来源: 互联网

标签:入门 Python age 参数 print 方方面面 实参 函数


您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
本文主要介绍Python的函数,函数的定义,使用,可变参数等等都有详细介绍。
干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。

目录

前言

前面几个章节提及了好多Python函数,比如:print(),range(),len()函数等等。这些都是Python的内置函数,可以直接使用。当然,除了直接使用内置函数外,Python也支持自定义函数,即将一段有规律的,可重复使用的代码定义成函数。从而达到一次编写,多次调用的目的。

函数定义

函数是按照固定格式封装组织的可以重复使用的代码段。它能提高应用的模块性和代码的重复利用率。
函数定义的语法格式是:

def  函数名(参数列表):
	 代码块
	[return [返回值]]

函数名:其实就是一个符合Python语法的标识符,函数名最好能体现该函数的功能,比如: save_user。
形参列表:设置该函数可以接收多少个参数,多个参数之间用逗号(,)分割。需要注意的是没有参数的话,也需要留一对空的()
[return[返回值]]:整体作为函数的可选参数,用于设置该函数的返回值。也就是说,一个函数,
可以有返回值,也可以没有返回值。

函数调用

调用函数的语法格式是:

[返回值]=函数名([形参值])

函数名即指的是要调用的函数的名称,形参值指的是当初创建函数时要求传入的各个形参的值。
如果该函数有返回值,我们可以通过一个变量来接收该值,当然也可以不接收。需要注意的是,函数有多少个形参,那么调用的时候就需要传入多少个值
且顺序必须和创建函数时一致。即便该函数没有参数,函数名后的小括号也不能省略。
举个栗子吧:

def my_abs(x):
    """
    返回绝对值
    :param x:
    :return:
    """
    if not isinstance(x, (int, float)):
        raise TypeError('传入的数据类型不对')
    if x >= 0:
        return x
    else:
        return -x

调用代码是:

    x = my_abs(-3)
    print(x)
    print(my_abs.__doc__)

运行结果是:

3

    返回绝对值
    :param x:
    :return:

这是一个获取绝对值的函数,其函数名是my_abs,通过函数名可以让人大致明白函数的作用。形式参数是x。通过__doc__可以查看函数的说明文档。其返回值是处理后的值。
今天依然是码农飞哥学习的一天。
在这里插入图片描述

函数值传递和引用传递(形参和实参的介绍)

介绍函数值传递和引用传递之前首先需要了解两个概念。

  1. 形式参数(简称形参):在定义函数时,函数名后面括号中的参数就是形式参数,可以将形参想象成剧本中的角色。
  2. 实际参数(简称实参):在调用函数时,函数名后面括号中的参数称为实际参数,也就是函数的调用者给函数的参数,可以将实参想象成演角色的演员。
    函数参数传递方式分为两种:分别是值传递和引用传递:
  3. 值传递:适用于实参类型为不可变类型(字符串,数字,元组)
  4. 引用(地址)传递:适用于实参类型为可变类型(列表,字典)
    值传递和引用传递的区别是:函数参数进行值传递时,若形参发生改变,不会影响实参的值。而应用传递的话,改变形参的值,实参的值也会一同改变。依然是举例说明:
    函数param_test会将形参obj变成 obj+obj。如果是值传递则调用函数param_test之后,实参的值不变。如果是引用传递的话则调用param_test之后,实参的值也会变成 obj+obj。
def param_test(obj):
    obj += obj
    print('形参值为:', obj)


print('*******值传递*****')
a = '码农飞哥'
print('a的值为:', a)
param_test(a)
print('实参的值为:', a)

print("*******引用传递*****")
b = [1, 2, 3]
print('b的值为:', b)
param_test(b)
print('实参的值为:', b)

运行结果是:

*******值传递*****
a的值为: 码农飞哥
形参值为: 码农飞哥码农飞哥
实参的值为: 码农飞哥
*******引用传递*****
b的值为: [1, 2, 3]
形参值为: [1, 2, 3, 1, 2, 3]
实参的值为: [1, 2, 3, 1, 2, 3]

Python位置参数

位置参数,有时也被称为必备参数,指的是必须按照正确的顺序将实参传到函数中,换句话说,调用函数时传入实参的数量和位置必须和定义函数时保持一致。如果不一致的话,则在程序运行时Python解释器会报TypeError异常。举个例子,下面演示调用函数事参数传入的数量不对的情况。

def girth(width , height):
    return 2 * width+height
#调用函数时,必须传递 2 个参数,否则会引发错误
print(girth(3))

运行之后直接报Traceback错误。

Traceback (most recent call last):
  File "/Volumes/Develop/Python_learn/PycharmProjects/python_demo_1/demo/function/locate_fun.py", line 6, in <module>
    print(girth(3))
TypeError: girth() missing 1 required positional argument: 'height'

传入参数的位置不对的情况,本例中本想传入name的值为码农飞哥,age的值为18。结果入参顺序不对导致得到的结果不对。

def print_info(name, age):
    print('姓名=' + name + " 年龄=" + str(age))
    
print_info(18,'码农飞哥')

那么怎么处理这种情况呢?有两种方式:

  1. 严格按照形参的数量和位置入参。
  2. 按照关键字参数入参,所谓的关键字参数就是指使用形参的名字来确定输入的参数值。通过此方式制定函数实参时,不再需要与形参的位置完全一致,只要将参数名写正确即可。还是以上面的函数为例:
    利用关键字参数来调用函数的话则是这样写:
def print_info(name, age):
    print('姓名=' + name + " 年龄=" + str(age))
print_info(age=18,name='码农飞哥')

运行结果是:

姓名=码农飞哥 年龄=18

可以看出关键字参数入参时,不需要保证入参的顺序跟形参的顺序保持一致。
在这里插入图片描述

默认参数设置

前面介绍的位置参数,就是说调用函数时必须要传入该参数。但是有些场景下我们并不想传入所有的参数。这种情况下就可以使用默认参数了。不过需要注意的是:指定有默认值的形式参数必须在所有没默认值的参数的最后,否则会产生语法错误。其语法格式是:

def 函数名(...,形参名,形参名=默认值):
    代码块

下面给出一个示例,该函数是记录学生的信息,有两个有默认值的参数,分别是age和city。它们都被置于函数的形参列表最后处。

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print("gender:", gender)
    print("age:", age)
    print("city:", city)

print(enroll('张三', '一年级'))
print('************************** ')
print(enroll('李四', '二年级', 7))

运行结果是:

name: 张三
gender: 一年级
age: 6
city: Beijing
None
************************** 
name: 李四
gender: 二年级
age: 7
city: Beijing
None

从上面代码可以看出:1. 可以不用传入有默认值的参数。2. 如果传入默认的参数,则会覆盖掉默认值。

可变参数

Python函数可变参数(*args,**kwargs),又称为不定长参数,即传入函数中的实际参数可以是任意多个,Python定义可以变参数,主要有以下两种形式:

  1. 在形参前添加一个*,格式是*args。表示创建一个名为args的空元组,该元组可以接受任意多个外界传入的非关键字实参。必须以非关键字参数的形式给普通参数传值,否则Python解释器会把所有参数都优先传给可变参数。
  2. **kwargs表示创建一个名为kwargs的空字典,该字典可以接受任意多个以关键字参数赋值的实参。举个

    标签:入门,Python,age,参数,print,方方面面,实参,函数
    来源: https://www.cnblogs.com/Fly-Bob/p/15037898.html

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

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

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

ICode9版权所有