08函数基础和实参形参

一.函数

1.函数的定义

1.实现某一特点的功能的封装。
2.函数的分类:
(1)系统函数:--系统自己已经实现了。程序员可以直接使用的函数。(别人封装好的函数)
(2)自定义函数:--程序员自己申明的函数,(自己去封装函数)
2.函数的声明
(1)语法:

def  函数名(参数列表):
    函数的说明文档
    函数体

(2)说明:
def---- 关键字,固定写法
函数名:要求和变量名的一样。看见名字知道功能。
(3): 固定的写法
函数说明文档---,一段注释,说明函数的功能。必须在第一行有效代码的前面。
必须是使用三个双引号引起来的注释。相当于说明书,说明其函数的功能。
函数体 -- 和 def保持缩进的一条或者多条的语句。实现函数功能的代码。
(4)参数列表:--这儿叫形参,格式 参数名1,参数名2,参数民3,参数名4
作用:是将函数外部的数据传递到函数里面。

2.初学者声明函数的步骤。

1.确认函数的功能。
2.根据功能确定函数的名。
3.确定参数(形参)---实现函数的功能需不需要额外的数据。需要几个就设计几个参数。
4.实现函数的功能。
5.最后才写说明的文档。

3.函数的调用

函数(实参)--有几个形参就传入几个实参。
函数必须是已经声明过的函数。
()是固定的写法
实参的列表:多个数据用逗号隔开。需要传递到函数中具体使用的数据。
而且他是给形参赋值的。

def sum2(num1, num2):
    """
    函数功能就是求和
    :param num1:传入的数字1 ,数字
    :param num2: 传入的数字2,数字
    :return: 无返回值
    """
    sum3 = num1 + num2
    print(sum3)


sum2(12, 34)
# 声明一个,求阶层
def class_1(n):
    """
    求阶层
    :param n: 数字
    :return: 无
    """
    sum = 1
    for i in range(1, n + 1):
        sum *= i
        print(sum)

注意声明函数的时候,不会执行函数体。

3函数的调用的过程。

"""
1.回到函数声明的位置,
2.传入参数,用实参给形参赋值
3.执行函数体
4.确定返回值
5.回到函数调用的位置,接着往后执行。

二.实参形参的传入的方式。

1.根据实参的传入的方式分为:位置参数,关键值参数。

def pr(a, b, c):
    """

    :param a: 传入
    :param b: 传入
    :param c: 传入
    :return: 无
    """
    print(a, b, c)

(1)(位置参数)--让实参的值和形参一一对应。
pr(1, 2, 3) # ####这个传入方式是位置参数
(2)关键值参数
pr(a=10, c=113, b=2) #### 这个传入的方式就是关键字参数
(3)混合传入的时候:
混合用的时候,位置参数必须在关键值前面。#pr(10,23,c=10)

2调用的时候形参。

根据形参的使用的情况,想要跳过前面有默认值的,直接给后面的赋值。必须使用关键值。

声明函数的时候可以通过参数名等于值得形式,给参数默认值。 “参数名=值”,有默认值的参数在调用的时候可以不用传入参数。
一部分赋值的时候,不赋值的必须写在前面,赋值的必须写在后面。

def pr2(c: list, a=0, b=0) -> str:  # def pr2(c,b,a=2)。
    """

    :param a: 传入
    :param b: 传入
    :param c: 传入
    :return: 无
    """
    print(a, b, c)


pr2(10, 12, 23)

3

1.可以在说明文档在说明传入值的类型
2.可以给参数赋值说明其类型。
3.还有 def pr2(c:int, a=0, b=0),这种也是可以提示的(按住 ctrl 鼠标点击到函数就可以看到提示)
4.说明参数还有一个好处 def pr2(c:list , a=0, b=0): 比如这个 我们提示了 c 是列表 。那么你用c的时候就会出现c属于列表的功能的提示
5.def pr2(c:list , a=0, b=0)->str 后面的 箭头str 说明返回值是字符串。

4不定长参数-声明函数的时候参数的个数不确定。

(1)声明函数的时候在参数名前加* 号
本质就是将多个实参变成元组。调用的时候只能用位置参数。
带*的不定长参数后面如果有其他定长参数,后面必须用关键词传参数。
*是里面可以传大于等于0的任何参数。

def yt_sum(*x):
    for num in x:
        sum1=0
        sum1+=num
    print(x)

yt_sum(1, 2, 3, 4)

def yt_sum2(name,*x,score):
    print(name)
    for num in x:
        sum1=0
        sum1+=num
    print(x)

yt_sum2("xiaomage", 2, 3, score=4)

(2)声明函数的时候在参数前加 ** 号
带**的必须用关键字传参数
本质就是字典。字典中的元素是关键字和实参值。

注意:调用的时候只能使用关键字参数。

def yt_sum9(**x):
    print(x)
yt_sum9(a=1,b=2,c=3)


打印的结果:
{'a': 1, 'b': 2, 'c': 3}

(3)def 函数名(args,kwargs):
同时使用时,函数还是不定长参数,可以同时使用位置参数和关键字参数,写的时候要放在
*前面。

def hanshu(*args,**kwargs):
    print(args,kwargs)
hanshu(1)
hanshu(2)
hanshu(1,2,a=1,b=3,c=3)
hanshu(1,2,4,a=5,b=23)


打印的结果:
(1,) {}
(2,) {}
(1, 2) {'a': 1, 'b': 3, 'c': 3}
(1, 2, 4) {'a': 5, 'b': 23}

注意:给形参赋值默认值和,给实参赋值的时候,关键字赋值都是放在位置参数和位置赋值的后面。 def exp(a,b,c=0,d=1) exp(10,b=10,c=23,d=48)

你可能感兴趣的:(08函数基础和实参形参)