day10 function

1.什么是函数

  • 函数就是对实现某一特定功能的代码段的封装

2函数的分类

  • 内置函数(系统函数):python已经实现的函数,程序员直接用(例如print()/input()/max()/len()....)相当于系统造好的机器
  • 自定义函数:程序员自己定义的函数,相当于自己造机器

3函数的定义(声明)

a.语法:
def 函数名(参数列表):
    函数体

b.说明:
def      -- 定义函数的关键字,固定写法
函数名    -- 要求: 标识符,非关键字
         -- 规范: 见名知义(看到函数名,知道函数的功能);命名格式:所有字母小写,多个单词用下划线(_)隔开;同时不能与系统函数名或类名重复
()       -- 固定写法

参数列表  -- 形参1,形参2,形参3,...(参数叫做形参,形参可以没有或者有多个)
         == 变量名1,变量名2,变量名3,...
         -- 形参的功能是将函数外部的数据传递到函数内
:        -- 固定写法
函数体    -- 与def保持一个缩进的代码段;
            函数体分为函数说明文档(函数体第一行)和实现函数功能的代码段两部分
初学者声明函数的步骤:
第一步:确定函数的功能
第二步:根据功能确定函数名
第三步:确定参数:确定需要几个参数(可以是0)看实现函数的功能需不需要从函数外部给函数传值,如果需要,确定需要几个参数
第四步:实现函数的功能(根据函数体重的代码段)
第五步:确定函数的返回值(暂时不需要)

写一个函数,功能是计算两个数的和

def sum_2(num1,num2):
    """
    函数功能的说明:求两个数的和
    :param num1: 参数说明,int
    :param num2: int
    :return:返回值说明,None
    """
    print(num1+num2)
写一个函数,功能是求123*n积
def product(n):
    """
    求n!
    :param n: int
    :return: n!
    """
    product1 = 1
    for a in range(1,n+1):
        product1 *= a
    print(product1)

product(10)
写一个函数,功能是打印10个*:
def print_star():
    """
    打印10个*
    :return:
    """
    print('*'*10)

4.函数体在定义函数时,不执行;在调用函数时,才会执行函数体(重点)

5.函数调用 -- 使用机器

a.语法
函数名(参数列表)
b.说明:
函数名   -- 函数名对应的函数必须是已经定义过的函数
()       -- 固定写法
参数列表  -- 参数叫做实参,实参是用来给形参赋值的.
          -- 值1,值2,值3,...
"""
sum_2(10,30)
product(10)
print_star()

1.函数的调用过程(非常重要)

  • 函数在定义时不执行函数体,调用函数时才会执行函数体

函数的调用过程:函数名(实参列表)

第一步:回到函数定义的位置

第二步:用实参给形参赋值(传参:要保证每个参数都有值)

第三步:执行函数体

第四步:执行完函数体,再回到函数调用的位置,接着往后执行

2.函数的参数

  • a.根据实参的写法将参数分为位置参数和关键字参数

  • 位置参数(常用):调用函数的时候,实参的位置和形参一一对应,保证每个形参都有值

  • 关键字参数:实参列表以 形参名1 = 值1,形参名2=值2,...的方式来调用函数。

  • 注意:形参的顺序可以与定义的时候形参的顺序不同

  • 注意:位置参数和关键字参数可混合使用(但位置参数必须在关键字参数的前面)

关键字参数(可打乱顺序)
def func1(a,b,c):
    print(a,b,c)

func1(a=10,c=30,b=20)

参数默认值

  • 定义函数时,函数的形参可以设置默认值。
  • 注意:a.在设置默认值时,一部分参数有默认值,一部分参数没有默认值.没有默认值的必须在有默认值的参数前面.
  • b.有默认值的参数,调用的时候可以不用传参;没有默认值的参数必须传参; 传参时,想跳过有默认值的参数时,必须使用关键字参数传参: 关键字参数= 新值
def func2(a,b=20,c=30):
    print(a,b,c)
func2(10,c=200)
  • 参数类型说明:除了给参数设置默认值外,还可以指定参数类型
  • 方式1:给参数设置默认值,默认值是什么类型,参数就是什么类型;
  • 方式2:直接说明类型 参数名:类型名
def func3(a,b,nums:list):
    nums.append('aaa')
    print(a,b,nums)

func3(22,22,[12])
写一个函数,函数的功能是统计一个列表中指定元素的个数,类似于count的功能
def func4(list1:list,item):
    sum1 = 0
    for a in list1:
        if a == item:
            sum1+=1
    print(sum1)

func4([1,2,3,4,5,6,1,2,1],1)

不定长函数:在调用函数时,可以传多个参数值(不定)

  • a. 定义函数的时候,在形参前加一个*,可以将形参变成元祖,同时储存多个位置参数的值
  • 一个函数中可以同时存在不定长和定长参数,不定长参数要放在定长参数都后面.
    • 不定长参数后面,跟赋有默认值的参数或者使用关键字传参
  • b. 定义函数的时候,在形参前加**,可以将形参变成字典,同时储存多个关键字参数的值;关键字可以随便命名
  • 注意:原则上一个函数的参数既可以有 定长参数,也可以有不定长参数(带的,和带*的)
  • 注意:两种不定长参数同时存在,既可以用位置参数传参,也可以用关键字参数传参,也可以都用;
  • 不能存在两个带 * 的,和两个带 ** 的
    print(args,kwargs)

func_(1,2,3,4,a=1,b=2)
写一个函数,功能是求多个数的和
假设实现的函数是sum1 , sum1(10) == 10;sum1(1,2) ==3
def sum2(*num):
    print(sum(num))

sum2(1,2,3,4,5)

def fun2(a,*num,c):
    print(num,a,c)

fun2(12,5,12,0,c=9)
练习,写一个函数,求多个数的和,要求调用函数时,既可以使用位置函数传参,也可以用关键字传参
def sum_2(*args,**kwargs):
    sum2 = 0
    for item1 in args:
        sum2 += item1
    for key in kwargs:
        sum2 += kwargs[key]
    print(sum2)

sum_2(1,2,a=100,b=200)

=================================================

1.什么是函数返回值

  • 返回值的作用是将函数体中产生的数据 传递到函数外面

  • 返回值就是函数调用表达式的值,return关键字后面的值

  • 注意:函数调用表达式 - 调用函数的语句:它的结果就是函数的返回值;
    • 通过调用函数表达式,获取函数的返回值

2.return关键字

  • return只能出现在函数体中:
  • 当执行函数体的时候,遇到return,函数直接结束.并且将return后面的值作为函数值返回
  • 如果没有遇到return,函数的返回值是None

3.函数的调用过程(完整版) 非常重要

1.先回到函数定义的位置
2.用实参给形参赋值--- 传参(保证每个参数都有值)
3.执行函数体
4.执行完函数体,确定返回值
--执行完函数体中所有语句,没有遇到return,确定返回值为None;
--执行过程中遇到return,返回值为return后面的值,如果return后面没有值,也为None
5.回到函数调用的位置,接着往后执行.(此时函数调用表达式的值才是函数的返回值)
def func1(n):
    print(n)
a = func1(10)
print(a)

4.什么时候函数需要返回值

  • 初学者的建议:只要实现函数的功能,产生了新的数据,就可以把数据用返回值返回.

python中一个函数可以有多个返回值:return后给多个值,用逗号隔开

写一个函数,求两个数的和:
def yt_sum(n1, n2):
    return n1+n2
"""
score1 = 10
score2 = 20
print(yt_sum(score1, score2))
total = yt_sum(score1, score2)
person = {'name': '小明', 'scores': total}
"""
print([1, 2, 3].count(1))
list1 = [1, 2, 3]
print('===:', list1.append(4))   
python中一个函数可以有多个返回值;return后给多个值,用逗号隔开
def func2():
    return 10, 20

x, y = func2()     # x, y = 10, 20
print(x)

你可能感兴趣的:(day10 function)