python中的函数

一,函数的定义

  • 函数的目的是为了提高代码的使用
  • 减少代码的重复编写
  • 函数拥有一定的功能
  • 对功能实现进行封装
    函数的格式 函数的命名规则等同与变量名

代码如下(示例):

# def 函数名():
#     语句块
# 将要执行的语句进行封装
def num():
    print(123)
    print(456)
    print(678)


# 函数的调用
num()

这样我们就定义好了一个函数
那么如何重复的输出我们想要输出的数字

代码如下(示例):

def weekday():
    print("周一")
    print("周二")
    print("周三")
    print("周四")
    print("周五")
    print("周六")
    print("周日")


# 调用多次 就输入多次命名的函数
weekday()
weekday()

二,函数的形参和实参

  • 形参 出现在函数命名的括号里
  • 实参 出现在函数调用的括号里

代码如下(示例):

def year(month, num):
    """
    这是一个月份函数
    :param month:几月
    :param num: 输出多少次
    """
    # print(f"一年有{month}")
    for i in range(num):
        print(f"这是{month},输出第{i + 1}次,一共{num}")


year("一月", 10)
print("------------")
year("二月", 5)
  • 这里(month,num)就是形参
  • (一月,5)就是实参

2.1,函数里面使用循环

例题:使用函数编写一个程序完成以下要求

  • 起止数为 start
  • 结束值为stop
  • 步长为step
    输出相差为step的质数对

代码如下(示例)

# 定义一个函数
def prime_number(start, stop, step):
# 使用循环来查看是否为质数
    for i in range(start, stop + 1 - step):
        for j in range(2, i):
            if i % j == 0:
                break
        else:
# 运算相差为step的质数对
            for k in range(2, i + step):
                if (i + step) % k == 0:
                    break
            else:
                print(i, i + step)


prime_number(2, 100, 6)

这里我们会发现我们使用函数来编写代码并没有实现函数的目的也就是提高代码的使用和重复编写
只是利用了代码的灵活性
下面我们来简化一个这个代码

2.2,函数的返回值return

代码如下(示例):

# 定义一个函数判断这个数字是否为质数
def is_prime(n):
    """
    判断一个数是不是质数
    :param n: 形参  数字
    :return: 返回True或者Flase
    """
    for i in range(2, n):
        if n % i == 0:
            return False
    else:
        return True


def prime_num(start, stop, step):
    """
    判断质数对
    :param start:开始
    :param stop: 结束
    :param step: 步长
    :return: 返回一个元组 里面为相差为步长的质数对
    """
    retult = []
    for i in range(start, stop - 1 - step):
        if is_prime(i) and is_prime(i + 6):
            retult.append((i, i + 6))
    return retult


print(prime_num(2, 1000, 6))

我们先是定义一个函数来判断一个数是否为质数
在第二次定义函数的时候我们把第一次定义的函数来调用
判断质数对
最后使用一个元组来接收所返回的值

  • 函数是没有返回值的,需要return来接受

代码如下(示例):

def max_num(first, second):
    """
    这是一个比较大小的函数
    :param first: 第一个形参
    :param second: 第二个形参
    :return: 结果返回比较后的最大值
    """
    max_value = first if first > second else second
    return max_value


# r = max_num(13, 43)
# print(r)
print(max_num(13,45))

这里我们使用 max_num这个变量来接收返回值

三,变量的作用域

循环的作用域
不推荐在循环外部使用循环内部定义的变量

代码如下(示例):

for i in range(10):
    print(i)
print(i)

虽然这里不会报错,但是不推荐使用
函数标量的作用域
函数内部定义的变量在函数外部是不可以直接使用的
会报错

代码如下(示例):


def f1(m):  # m 就是实参传入的一个变量
    i = 10
    print(i, m)


f1(12)
# print(i,m) # 在函数外部使用函数里的变量会报错
a = 10
  • 第一种情况认为a是外部变量可以直接使用
  • 第二种情况后续有a的赋值 所以就认为a未定义就直接使用
  • a不是修改外部变量卫视在内部有一个新的变量a 的赋值为20 函数结束 此变量消失
  • 修改外部变量使用glabal

代码如下(示例):

def f1():
    # 第一种情况认为a是外部变量可以直接使用
    # print(a)
    # 二 因为后续有a的赋值 所以就认为a未定义就直接使用
    # print(a)
    # a = 20
    #     a不是修改外部变量卫视在内部有一个新的变量a 的赋值为20 函数结束  此变量消失
    #     a = 20
    #     print(a)
    #     修改外部变量使用glabal
    global a
    a = 20
    print(a)


f1()
print(a)
  • 函数的参数就是实参赋值给形参
  • 默认参数 形参会有一个默认的值
  • 形参有默认值时,当实参赋值给形参 这是形参的值依旧是实参赋予他的值
  • 形参要定义默认值必须定义最后一个换句话说形参的默认值 最后一个形参必须有默认值

代码如下(示例):

def f1(a, b, c=100, d=10):
    print(a, b, c, d)


f1(1, 2, 3)
f1(1, 2, 3, 4)
  • 关键字参数
  • 将值直接赋予形参,与顺序无关
  • 每个形参都必须有值

代码如下(示例):

def f2(a, b, c, d):
    print(a, b, c, d)


f2(b=20, d=23, c=23, a=23)
  • 可变(元组)参数
  • 当有多个实参赋值

代码如下(示例):

def f3(a, b, *args):
    print(a, b, args)


f3(1, 2, 3, 4, 5, 6, 71, 32, 3, 4, 5, 6)

这里所返回的是一个元组
可以使用关键字参数来赋值

  • 可变字典参数
  • 关键字不能是真实的形参

代码如下(示例):

def f1(a, b, c, *args, **kwargs):
    print(a, b, c, args, kwargs)


f1(1, 2, 3, 4, 5, 6, 7, 8, f=9, e=12)

四,递归函数

使用递归函数求1-100 的和

代码如下(示例):

def f(n):
    # 递归出口
    if n == 1:
        return 1
    else:
        # 自己调用自己
        return n + f(n-1)


r = f(10)
print(r)

使用递归函数求 5的阶乘

代码如下(示例):

def f(n):
    # 递归出口
    if n == 1:
        return 1
    else:
        # 自己调用自己
        return n * f(n-1)

r = f(1500)
print(r)

使用递归函数求斐波那契数列的第n个数

代码如下(示例):

def f(n):
    if n == 1 or n == 2:
        return 1
    else:
        return f(n - 1) + f(n - 2)


r = f(int(imput("输入一个数字"))
print(r)

你可能感兴趣的:(python,开发语言,windows)