python 基础知识(五)——函数

一. 函数的基础知识。
1.定义:具有独立功能的代码块组织为一个小模块,称作是函数。在开放程序时,某块代码需要调用多次,为了提高编写的效率,因此我们会调用函数来解决问题。
2. 函数的创建和调用。
(1)函数的创建。
用 def 来创建,定义一个函数。
(ps :pass 的作用:
1) 可以用来定义一个空函数,什么都不做的函数,用pass语句来写。
2) 用作占位。在编写程序时,某块代码过于复杂,不知怎么写,或者想先空过去时,可以用pass语句,这样在运行时也不会报错。)
”返回值“ :在程序中的函数调用结束后,返回给调用者的结果,return +返回值。(当没有返回值时,默认返回None 。
格式:def(参数1,参数2,参数3,…):
函数体(语句块)
函数体在书写时,按照习惯,需要缩进四格。
(2)函数的调用。
定义好函数了之后,直接在需要的时候直接使用函数名来调用即可。
eg :
在这里插入图片描述
运行结果为:
在这里插入图片描述
pass的作用:
在这里插入图片描述
运行结果:
在这里插入图片描述

3.函数中的变量
(1)局部变量。
1)局部变量时在定义的函数内部的变量。
2)不同的函数,可以定义相同名字的局部变量,但在各自使用的时候不会相互产生影响。
3)局部变量的作用:为了临时保存数据需要在函数中定义变量来进行存储。
eg .
在这里插入图片描述
在这里插入图片描述运行结果为:
在这里插入图片描述

(2)全局变量。
定义在函数外面的变量。可以在代码中的所用函数中使用。(注: 在定义函数中使用全局变量时,要先用 global 声明。
eg.
在这里插入图片描述

在这里插入图片描述

运行结果:
在这里插入图片描述
global声明的本质是可以修改全局变量的指向,即变量可以指向新的数据。
不可变类型的全局变量:指向的数据不能修改,因此不使用global无法修改全局变量。
可变全局变量: 指向的数据可以修改,不使用global时可以修改全局变量。(强龙不压墙头蛇——就近原则)

4.函数中的参数。
1) 形参和实参
形参:在定义函数时,小括号中的参数,用来被定义的时形参。eg. def numbers(a,b):
a,b是形参,形参不规定表示的方法。
实参: 在调用函数时,用来传递给函数用的,成为”实参”。

2)必选参数.
在函数定义或者调用时,必须存在的参数。
参数的类型可以是任意的。

3) 默认参数.
调用函数时,在没有给参数规定所需要的值时,可以在定义函数时,给参数设定一个默认值。(默认参数一定要用不可变对象)
eg. 定义一函数,计算x 的n 次方。
代码如下:在这里插入图片描述
实验结果如下:
在这里插入图片描述

4) 可变参数。
传入的参数个数是可变的。可以没有,也可以一个,两个,甚至多个。一般用*args 表示。args一般接收的是一个tuple .
eg:求n个数的平方
代码如下:
在这里插入图片描述
实验结果如下:
在这里插入图片描述
5)关键字参数。
关键字参数允许传入0个或者人一个含参数名的参数。这些关键字参数在函数内部自动组装成为一个dict. 关键字参数通常使用 **kwargs kwargs 一般接收的是dict

eg:学生信息录入;
代码如下:
在这里插入图片描述
实验结果如下:
在这里插入图片描述

参数的组合:

  • 组合:必选参数,默认参数,可变参数和关键字参数。
  • 定义的顺序: 必选参数—>默认参数—>可变参数—>关键字参数。

对于任意函数,都可通过func(*args,*kw)的形式调用。

二.匿名函数

1 定义。
指一类无需定义标识符的函数或子程序。python中用lambda语法来定义匿名函数。只需要表达式即可,不需要用def来声明。
eg.
在这里插入图片描述

实验结果如下:
在这里插入图片描述

(注: lambda函数能接收任何数量的参数,但只能返回一个表达式的值。)

2.匿名函数的应用

1) 匿名函数作为参数传递。
eg.

在这里插入图片描述
运行结果为:
在这里插入图片描述

2)匿名函数作为内置函数的参数
eg.有一个整数列表(10个元素,)要求调整元素顺序,把所有的奇数放在前面,所有偶数放在后面。
代码如图所示:

在这里插入图片描述
实验结果如下:
在这里插入图片描述

三. 递归函数。
1.定义: 一个函数在定义时会在内部调用自己本身,这个函数就是递归函数。
eg.计算阶乘。n! = 1*2 *3 *…*n
实验代码如下:
在这里插入图片描述
实验结果如下:
在这里插入图片描述

斐波那契数列:
f(n) = f(n-1) +f(n-2)
实验代码如下:
在这里插入图片描述
运行结果为:
在这里插入图片描述

汉诺塔问题:有三个柱子,一次只能移动一个,并且黄色的塔 大的必须在小的下面。问n个塔时,应该怎么移动。
在这里插入图片描述
实验代码如下:

movecount = 0  #定义一个全局变量来存放移动的次数
def hannuo(n,a='A',b = 'B',c='C'):
    """
    汉诺塔问题
    :param n: 柱子的个数
    :param a: 起始柱子
    :param b: 缓冲柱子
    :param c: 目标柱子
    :return: 移动次数
    """
    if n ==1:
        global  movecount  #调用全局变量
        movecount += 1
        print(a,"-->",c)

    else:
    #先将前n-1个黄色的塔放在B 柱,C柱作为缓冲
        hannuo(n-1,a,c,b)
    #再将第n个盘从A柱放到C柱上,B柱 作为缓冲盘
        hannuo(1,a,b,c)
     #最后将n-1个盘从B柱放到C柱上,A柱作为缓冲盘
        hannuo(n-1,b,a,c)
hannuo(3)
print("移动次数:",movecount)

#此处演示的是3个黄色盘的情况

实验结果如下:
在这里插入图片描述

实例一:编程实现简单9*9乘法表
代码如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实例二:用函数查看100,200之间的所有素数。
实验代码:

"""
判断是否为素数----只能被1或自己整除的数
"""

def sushu(x,y):
    """
     :param x: 输入需要查看素数的下限
    :param y:输入查看需要查看素数的上限
    :return:
    """
    li = []
    li2 = []
    for a in range(x, y):
        for i in range(2, int(a - 1)):
            li.append(int(a % i))
        if li.count(0) != 0:
            del li[:]
        else:
            li2.append(a)
    print("100-200之间的素数有:", li2)

sushu(100,200)

实验结果如下:
在这里插入图片描述

实例三:用函数实现输入某年某月某日,判断这一天是一年中的第几天(考虑闰年情况)

实例四:对于一个十进制数,定义f(n)为,其各位数字的平方和,如: f(13) = 1**2 +3*2=1
实验代码:

在这里插入图片描述
运行结果为:
在这里插入图片描述
实例五:给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000.如,输入为10 , 程序输出为2(共有两个质数对,分别为(5,5)和(3,7))
实验代码如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值