python---第11天---函数

python—第11天—函数

函数

世界级的编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”。

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也

可以自己创建函数,这被叫做用户自定义函数。

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号**()**。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

函数调用

定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

return 语句

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

全局变量和局部变量

全局变量(没有写在任何函数里面的变量)

举报变量(定义在函数内部的变量)

Python程序中搜索一个变量是按照LEGB顺序进行搜索

Local(局部作用域) —> Embeded(嵌套作用域) —> Global(全局作用域)----> Built-in(内置作用域) —> NameError: name … not defined

global —> 声明使用全局变量或者定义一个局部变量将其放到全局作用域

nonlocal —> 声明使用嵌套作用域的变量(不使用局部变量)

x = 100


def foo():
    x = 200

    def bar():
        x = 300
        print(x)

    bar()
    print(x)


foo()
print(x)

结果:

300 200 100

x = 100


def foo():
    global x
    x = 200

    def bar():
        x = 300
        print(x)

    bar()
    print(x)


foo()
print(x)

结果:

300 200 200

x = 100


def foo():
    x = 200

    def bar():
        nonlocal x
        x = 300
        print(x)

    bar()
    print(x)


foo()
print(x)

结果:

300 300 200

定义和使用函数

计算组合数:C(M, N) = M! / N! / (M - N)! (M >= N)

将来我们使用函数的时候,要么是Python标准库中或三方库中的函数(别人写好可以直接用的),要么是自定义的函数(需要自己编写,将来可以由自己或他人重复使用)

def fac(num):
    """求阶乘"""
    result = 1
    for i in range(2, num + 1):
        result *= i
    return result


m = int(input('m = '))
n = int(input('n = '))
print(fac(m)//fac(n)//fac(m - n))

练习1:

写一个实现生成指定长度的随机验证码(有数字和英文字母构成)的函数。

写好了之后,通过调用该函数,生成10组随机验证码。

import string
import random


def captcha(length=4):
    """
    随机生成验证码

    :param length: 验证码的长度
    :return: 随机验证码
    """
    selected_chars = random.choices(string.ascii_letters + string.digits, k=length)
    return ''.join(selected_chars)


for _ in range(10):
    print(captcha(6))

string.ascii_letters包含所有大小写的字母

string.digits包含0-9的数字

练习2:

写一个函数判断一个正整数是不是质数。(自变量:正整数,因变量:True / False)写好之后,

通过这个调用这个函数,输出2-100范围内的质数。

import math


def prime(num):
    """
    判断一个正整数是不是质数

    :param num: 正整数的值
    :return: 如果是质数返回True,否则返回False
    """
    for i in range(2, int(math.sqrt(num) + 1)):
        if num % i == 0:
            return False
    return num != 1 and True


for x in range(2, 100):
    if prime(x):
        print(x, end=' ')

练习3:

用函数实现求两个数的最大公约数和最小公倍数。

def gcd(x, y):
    """求最大公约数"""
    while y % x != 0:
        x, y = y % x, x
    return x


def lcm(x, y):
    """求最小公倍数"""
    return x * y // gcd(x, y)


m = int(input('m = '))
n = int(input('n = '))
print(f'最大公约数为:{gcd(m, n)}, 最小公倍数为:{lcm(m, n)}')

练习4:

设计一个函数,传入一个列表(列表中是一组样本数据),计算样本数据的极差(最大值和最小值

的差)。

def ptp(nums):
    """求极差"""
    return max(nums) - min(nums)


list1 = [90, 50, 95, 42, 32, 15]
print(ptp(list1))

练习5:

传入一个列表(列表中是一组样本数据),设计计算方差和标准差的函数。

def average(data):
    """求均值"""
    return sum(data) / len(data)


def var(nums):
    """求方差"""
    x_bar = average(nums)
    temp = [(num - x_bar) ** 2 for num in nums]
    return sum(temp) / (len(temp) - 1)


def std(data):
    """求标准差"""
    return var(data) ** 0.5


list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(f'方差为: {var(list1)},标准差为: {std(list1)}')

练习6:

设计一个函数,传入一个列表(列表中是一组样本数据),找出样本数据的中位数。

def median(data):
    """求中位数"""
    temp = sorted(data)
    a = len(temp)
    if a % 2 == 0:
        return (temp[a // 2] + temp[a // 2 - 1]) / 2
    else:
        return temp[a // 2]


list1 = [1, 5, 9, 2, 6, 4, 8, 7, 3, 10]
print(f'中位数为: {median(list1)}')

写程序的终极原则:

高类聚,低耦合 —> high cohesion low coupling

设计函数最为重要的原则:单一职责原则(一个函数只做一件事情) —> 高度内聚

可直接使用的函数:
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Python ,双重 for 循环多变量可以通过使用 `zip` 函数实现。`zip` 函数可以将多个可迭代对象(如列表、元组等)对应位置的元素打包成一个元组,然后返回一个可迭代的 zip 对象。 下面是一个例子: ```python list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] for num, char in zip(list1, list2): print(num, char) ``` 输出: ``` 1 a 2 b 3 c ``` 在上述例子,我们使用了 `zip` 函数将 `list1` 和 `list2` 对应位置的元素打包成一个元组。在 `for` 循环,我们使用了两个变量 `num` 和 `char`,分别接收每个元组的第一个和第二个元素,然后进行打印。 如果需要使用更多的变量,可以继续在 `for` 循环添加变量。例如: ```python list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] list3 = [True, False, True] for num, char, boolean in zip(list1, list2, list3): print(num, char, boolean) ``` 输出: ``` 1 a True 2 b False 3 c True ``` 在这个例子,我们使用了三个变量 `num`、`char` 和 `boolean`,分别接收每个元组的前三个元素。 ### 回答2: Python的双重for循环多变量是指在for循环语句使用多个变量来迭代遍历一个二维数组或多维数组的元素。 在Python,我们可以使用双重for循环来遍历一个二维数组。例如,我们有一个3x3的二维数组arr,可以使用以下代码来遍历它的元素: ```python arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for row in arr: for element in row: print(element) ``` 在上面的代码,外层的for循环用于遍历arr的每一行,内层的for循环用于遍历每一行的元素。通过这种方式,我们可以依次访问arr的每一个元素,并进行相应的操作。 除了二维数组,双重for循环多变量也可以用于遍历多维数组的元素。我们只需要使用相应数量的嵌套for循环即可。例如,对于一个3x3x3的三维数组arr,我们可以使用三重for循环来遍历它的元素: ```python arr = [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]], [[19, 20, 21], [22, 23, 24], [25, 26, 27]]] for layer in arr: for row in layer: for element in row: print(element) ``` 在上面的代码,我们使用三重for循环来依次遍历arr的每一层、每一行和每一个元素,并输出它们的值。 总之,通过使用双重for循环多变量,我们可以方便地遍历二维数组或多维数组的元素,并对它们进行相应的操作。无论是二维数组还是多维数组,我们只需要根据数组的维度适当增加for循环的嵌套层数,就可以访问到所需的元素。 ### 回答3: Python的双重for循环多变量是一种嵌套循环的结构,可以用来遍历多个可迭代对象的所有元素组合。 在双重for循环,外层循环控制的是第一个可迭代对象的遍历,内层循环控制的是第二个可迭代对象的遍历。每当外层循环执行一次,内层循环会完整地遍历一遍第二个可迭代对象。 例如,我们有两个列表A和B,想要找出它们所有的组合,可以使用双重for循环来实现: ``` A = [1, 2, 3] B = ['a', 'b', 'c'] for a in A: for b in B: print(a, b) ``` 上述代码会输出以下结果: ``` 1 a 1 b 1 c 2 a 2 b 2 c 3 a 3 b 3 c ``` 在每次迭代,变量a会依次遍历列表A的元素,变量b会依次遍历列表B的元素,然后将它们打印出来。这样就能得到所有A和B元素的组合。 双重for循环多变量还可以用于处理更多的可迭代对象,只需根据需要添加更多的嵌套循环即可。然而,需要注意的是,嵌套循环的层数过多可能会导致代码复杂度增加,执行效率下降。因此,在使用双重for循环时,需要根据实际需求和数据规模进行适当的折。 总结而言,Python的双重for循环多变量是一种用于遍历多个可迭代对象的结构,可以简洁地获取它们的所有元素组合。当需要处理多个可迭代对象时,双重for循环是一种常用且强大的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值