第八讲 函数(上)

本文详细介绍了Python中的函数概念,包括函数作为对象、形参和实参的区别、参数传递方式(位置参数、关键字参数、默认值及混合使用)、实参的类型以及不定长参数的使用。同时,还展示了参数拆包的实践,以及参数验证的示例,如姓名、电话号码和性别的输入检查。最后,通过示例展示了如何计算斐波那契数列和1-100的整数和。
摘要由CSDN通过智能技术生成

第八讲 函数(上)

1. 函数的简介

函数也是一个对象
函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用

语法
def 函数名([形参1,形参2,形参3....]):
    代码块

注意:
函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)
print是函数对象 print()是调用函数

def fn():
    print('这是我的第一个函数')

fn()

在这里插入图片描述

2.函数的参数

2.1 形参和实参

• 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
• 实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参

def fn(a, b):

    print(a + b)


fn(1, 2)# TypeError: fn() missing 2 required positional arguments: 'a' and 'b'
fn(123424, 34567)
fn('asd', 'ada')

在这里插入图片描述

2.2 参数的传递方式

• 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效

def fn(a, b, c=20):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)

fn(1, 2)

在这里插入图片描述

def fn(a, b, c=20):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)

fn(1, 2, 3)

在这里插入图片描述

• 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参

• 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去

def fn(a, b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)


fn(b=12, c=2, a=3)

在这里插入图片描述

def fn(a, b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)


fn(3, c=2, b=3)

在这里插入图片描述

2.3 实参的类型

实参可以传递任意类型的参数

def fn1():
    print('我是fn1')

def fn(a):
    print('a = ', a)

a = 1
a = [1, 2, 3]
a = True
a = {1: '1'}
a = fn1()
fn(a)

在这里插入图片描述

3.不定长参数

• 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中

def fn(*a):
    print('a = ', a)
fn(1, 2, 3)

在这里插入图片描述

• 带*号的形参只能有一个,可以和其他参数配合使用
• *形参只能接受位置参数,不能接受关键字参数

def fn(b, *a):
    print('a = ', a)
    print(b)
fn(1, 2, 3)

在这里插入图片描述

• **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值

def fn(**a):
    print('a = ', a)
fn(a=1, b=2, c=3)

在这里插入图片描述

• **形参只有一个,并且必须写在所有参数的后面

def fn(*args, **kwargs):
    print('a = ', kwargs)
    print('a = ', args)
fn(1, 2, 3, a=1, b=2, c=3)

在这里插入图片描述

4.参数的拆包

• 传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递
• 要求序列中的元素的个数必须和形参的个数一致

def fn(a, b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)

tuple1 = (1, 2, 3)
fn(*tuple1)

在这里插入图片描述

def fn(a, b, c):
    print('a = ', a)
    print('b = ', b)
    print('c = ', c)
d = {'a': 1, 'b': 2, 'c': 3}
fn(**d)

在这里插入图片描述

5. 拓展

可变对象(可变类型): list, dict, set value 改变了,id不会改变
不可变对象(不可变类型): str, tuple value改变了,id也会改变

list1 = [1, 2, 3]
print(id(list1))
list1[0] = 10
print(id(list1))

在这里插入图片描述

str1 = 'abcd'
print(id(str1))
print(id(str1.upper()))

在这里插入图片描述

6.作业

  1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
    • 控制姓名长度为6-20
    • 电话号码长度11
    • 性别只能允许输入男或女
    • 每一样信息不允许为空
def fn1(name, tel, sex):
    print('name:', name, 'tel:', tel, 'sex:', sex)
while True:
    name = input('请输入您的姓名(姓名长度为6-20,不允许为空):')
    if 6 <= len(name) <= 20:
        break
    else:
        print('您的输入有误,请重新输入:')
while True:
    tel = input('请输入您的电话号码(长度为11位):')
    if len(tel) == 11:
        break
    else:
        print('输入号码有误,请重新输入:')
while True:
    sex = input('请输入您的性别:')
    if sex == '男' or sex == '女':
        break
else:
    print('您的性别输入有误,请重新输入:')
fn1(name, tel, sex)

在这里插入图片描述
2.使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21…即: 起始两项均为1,此后的项分别为前两项之和

list1 = [1, 1]
while len(list1) < 20:
    list1.append(list1[-1]+list1[-2])

print("前二十的斐波那契数:", list1)
print(len(list1))

在这里插入图片描述

3.编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果

def num():
    i = 1
    a = i
    while i < 100:
        a = a + i + 1
        i += 1
    print('1-100的整数和是:', format(a))
num()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值