函数基础和函数参数

一、函数基础

1.什么是函数

1)概念
函数就是对实现某一特定功能的代码段的封装(机器)

2)分类
系统函数 - 系统已将定义了,程序员可以直接使用的函数,比如:print, input, type, ord, chr, bin, len, id等(别人造好的机器)
自定义函数 - 程序员自己定义使用的函数(自己造机器)

2.函数的定义

语法:
def 函数名(形参列表):
函数说明文档
函数体

说明:
def - python定义函数的关键字,固定写法
函数名 - 程序员自己命名
标识符,不能是关键字(要求)
所有字母都小写,多个单词用下划线隔开
不能用系统提供的函数名,类名
见名知义(看到函数名大概知道函数的功能是什么)
(): - 固定写法
形参列表 - 格式:变量名1, 变量名2, 变量名3, …(变量可以是没有定义过的变量)
形参的作用是将函数外面的数据传递到函数里面
函数说明文档 - 和def保持一个缩进的三个双引号引起来的注释(说明书)
函数体 - 和def保持一个缩进的一条或者多条语句,实现函数功能的一条或者多条语句

注意:函数在定义的时候不会执行函数体

初学者定义函数的步骤

第一步:确定函数的功能
第二步:根据函数的功能确定函数名
第三步:确定函数的参数(看实现函数的功能需不需要额外的数据,需要几个)
第四步:实现函数功能
(第五步:确定函数返回值)
第六步:写函数说明文档

需求:定义一个函数实现求任意两个数的和的功能·

def num_sum(num1, num2):
    
    求两个数的和(功能说明部分)
    :param num1:第一个数
    :param num2:第二个数
    :return:None(返回值说明)
    
    print(num1 + num2)

练习1:定义一个函数,打印指定字符串中大写字母的个数

def str_count (string):
    
    统计指定字符串中大写字母的个数
    :param str1: 被统计的字符串
    :return: None
    
    count1 = 0
    for x in string:
        if 'A' <= x <= 'Z':
            count1 += 1
    print(f'{string}中大写字母的个数:{count1}')

3.函数的调用(使用机器)

语法:
函数名(实参列表)

说明:
函数名 - 需要调用的函数的名字(函数名必须是已经定义过的函数的函数名)
() - 固定写法
实参列表 - 格式:数据1, 数据2, 数据3, … (实参的个数和形参的个数保持一致)
作用:用来给形参赋值的(真正传递到函数中使用的数据)

调用函数会执行函数的函数体

str_count('asdFGHsdDf')     # asdFGHsdDf中大写字母的个数:4

二、函数参数

1.位置参数和关键字参数(实参分类)

1)位置参数
实参直接写(直接),让实参和形参从位置上一一对应

def func1(a, b, c):
    print(f'a:{a}, b:{b}, c:{c}')

2)关键字参数
以:形参名1=值1, 形参名2=值2, …的形式传参

注意:要保证每个参数都有值

单独使用关键字参数传参

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

3)位置参数和关键字参数混合使用
要求:位置参数必须在关键字参数的前面

func1(10, c=30, b=20)   # a:10, b:20, c:30
func1(10, 20, c=30)     # a:10, b:20, c:30
func1(a=10, 20, 30)     # SyntaxError: positional argument follows keyword argument

2.参数默认值(形参)

定义函数的时候可以以:形参名=值 的形式给参数赋默认值,调用函数的时候有默认值的可以不用传参

注意:没有默认值的参数必须放在有默认值参数的前面

所有的参数都有默认值

def func2 (x=10, y=20, z=30):
    print(f'x:{x}, y:{y}, z:{z}')


func2()     # x:10, y:20, x:30
func2(100)      # x:100, y:20, x:30
func2(y=200)        # x:10, y:200, z:30


def func2 (y, x=10, z=30):
    print(f'x:{x}, y:{y}, z:{z}')

3.不定长参数(定义)

定义函数的时候参数个数不确定就可以使用不定长参数

1)在形参前面加 *
带一个 * 的形参,本质就是一个元组,对应的实参会作为这个元组的元素
这种不定长参数的函数只能用位置参数传参

2)在形参前面加 **
带一个 ** 的形参,本质就是一个字典,对应的实参会作为这个字典的值
这种不定长参数的函数只能用关键字参数传参

def num_sum1(*num):
    print(num)

num_sum1(1, 2, 3, 4, 5)     # (1, 2, 3, 4, 5)

定义一个函数,可以求多个数的和
def num_sum(*num):
    sum1 = 0
    for x in num:
        sum1 += x
    print(sum1)


num_sum(1)
num_sum(10, 20)
num_sum(1, 2, 3, 4, 5)

def num_sum2(**num):
    print(num)

num_sum2(a=10, b=20)        # {'a': 10, 'b': 20}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值