目录

一、函数上

1. 函数简介

2. 函数的参数

2.1 形参和实参

2.2 函数的传递方式

2.3 实参的类型

3. 不定长参数

4. 参数的拆包

二、小练习

1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片

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

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

一、函数上

1. 函数简介

  • 函数也是一个对象
  • 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
语法
def 函数名([形参1,形参2,形参3....]):
    代码块
# 函数也是一个对象
# 函数的特点
# 函数可以用来保存一些可执行的代码,在你需要的时候可以对这些代码重复的调用(使用)
# 函数中保存的代码不会立即执行,只当你调用函数的时候,代码才会执行
def fun():
# 名字做到见名知意
    print(1111)

# 调用函数:函数名称(函数对象)
fun()
fun()
# 运行结果:
1111
1111

注意:

函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)

print是函数对象  print()是调用函数

2. 函数的参数

2.1 形参和实参

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

fun(1, 2)  # 传实参: 实际的参数
# 运行结果:
3

2.2 函数的传递方式

  • 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
    # 位置传参
    def fun(a, b, c):
        print(a)
        print(b)
        print(c)
    fun(1, 2, 3)
    # 运行结果:
    1
    2
    3

     

  • 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效
    # 形参参数默认值
    def fun(a, b, c=20):  # c=20称呼为默认值
        print(a)
        print(b)
        print(c)
    
    fun(1, 2, 3)
    fun(1, 2)
    # 运行结果:
    1
    2
    3
    1
    2
    20

     

  • 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
    # 关键字传参  位置顺序可以随便写
    def fun(a, b, c):
        print(a)
        print(b)
        print(c)
    fun(b=1, a=2, c=3)
    # 运行结果:
    2
    1
    3

     

2.3 实参的类型

# 实参任何类型都可以
def fun1():
    print(11111)

def fun(a):
    print(a)

b = 123
c = 'abc'
d = True
e = [1, 2, 3]
f = {'1': 1}
g = fun1
fun(b)
fun(c)
fun(d)
fun(e)
fun(f)
fun(g)
# 运行结果
123
abc
True
[1, 2, 3]
{'1': 1}
<function fun1 at 0x00000225233FA950>
def fun2(a):  # a=b 赋值是单向的
    a = 20
    print(a)

b=10
fun2(b)
print(b)
# 值传递,不影响实参
# 运行结果:
20
10
def fun2(a):
    a[0] = 10
    print(a)
b=[1,2,3]
fun2(b)
print(b)
# 地址传递,会影响实参
# 运行结果:
[10, 2, 3]
[10, 2, 3]

3. 不定长参数

  • 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
    def fun(*a):
        print(a)
    fun(1, 2, 3, 4, 5, 6)
    # 运行结果:
    (1, 2, 3, 4, 5, 6)

     

  • 带*号的形参只能有一个,可以和其他参数配合使用
    # 不定长参数要放到后面, *只能有一个
    def fun(c, b, *a):
        print(a)
        print(b)
        print(c)
    fun(1, 2, 3, 4, 5, 6)
    # 运行结果:
    (3, 4, 5, 6)
    2
    1

     

  • *形参只能接受位置参数,不能接受关键字参数
  • **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
    def fun(**a):
        print(a)
    
    fun(f=1, e=2, d=3, c=4, b=5, a=6)
    #运行结果:
    {'f': 1, 'e': 2, 'd': 3, 'c': 4, 'b': 5, 'a': 6}

     

  • **形参只有一个,并且必须写在所有参数的后面
    def fun(*b,**a):
        print(a)
        print(b)
    
    fun(1,2,3,4,f=1, e=2, d=3, c=4, b=5, a=6)
    # 运行结果:
    {'f': 1, 'e': 2, 'd': 3, 'c': 4, 'b': 5, 'a': 6}
    (1, 2, 3, 4)

     

4. 参数的拆包

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

tuple1 = (1, 2, 3)
fun(*tuple1)
# 运行结果:
​1
2
3
def fun(a, b, c):
    print(a)
    print(b)
    print(c)

dict1 = {'a': 1, 'b': 2, 'c': 3}
fun(*dict1)
# 运行结果:
a
b
c
def fun(a, b, c):
    print(a)
    print(b)
    print(c)

dict1 = {'a': 1, 'b': 2, 'c': 3}
fun(**dict1)
# 运行结果:
1
2
3

二、小练习

1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片

  • 控制姓名长度为6-20
  • 电话号码长度11
  • 性别只能允许输入男或女
  • 每一样信息不允许为空
def callingcard():
    while True:
        name = input('请输入姓名,长度控制在6-20:')
        number = input('请输入11位电话号码:')
        gender = input('请输入性别:')
        flag = True
        if len(name) < 6 or len(name) > 20:
            print('姓名长度为6-20!')
            flag = False
        if not number.isdigit():
            print('电话号码只能是数字!')
            flag=False
            if (len(number) != 11):
                print('请输入正确长度的电话号码!')
                flag = False
        if gender != '男' and gender != '女':
            print('性别输入有误!')
            flag = False
        if flag:
            print('=' * 30)
            print(f'||\t姓名:{name}')
            print(f'||\t电话号码:{number}')
            print(f'||\t性别:{gender}')
            print('=' * 30)
            break
        else:
            print('请重新输入!')

callingcard()

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

def fib(n):
    f=[1 for x in range(0,n)] #表示长度为n、每个元素都为1的列表 [1,1,1,...,1] n个1
    i=2
    while i<n:
        f[i]=f[i-1]+f[i-2]
        i+=1
    print(f)
    
fib(20)

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

def sum1(n):
    i=1
    result=0
    while i<=n:
        result+=i
        i+=1
    print(result)

sum1(100)

 

本文地址:https://blog.csdn.net/weixin_48403688/article/details/110421315