Python函数知识总结

小白如何成为python数据分析师

第 十三天 ---->函数知识点总结

​ 几天没有更新啦!因为没人催更,主要是时间来不及,今天就将这几天所学关于函数知识做个梳理,总结。如有不足,还请指出,谢谢!

世界级的编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”。要写出高质量的代码首先要解决的就是重复代码的问题。如何去掉重复代码呢?那我们就可以使用函数来解决问题了。我们可以将重复代码封装到一个“函数”的代码块中,在需要的地方,我们只需要“调用函数”就可以了。

函数的定义

函数是功能相对独立且会重复使用的代码的封装

函数能提高应用的模块性,和代码的重复利用率。Python标准库中提供了大量的模块和函数来简化我们的开发工作。你也可以自己创建函数,这被叫做用户自定义函数

我们以前在数学课上学过函数:函数一般由函数名,自变量和因变量组成。例如:y = f(x), f 函数名, x 自变量 , y 因变量。

在Python中的函数跟这个结构是一致的,每个函数都有自己的名字、自变量和因变量。我们通常把Python中函数的自变量称为函数的参数,而因变量称为函数的返回值。

定义函数

在Python中可以使用def关键字来定义函数,和变量一样每个函数也应该有一个漂亮的名字,命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,就是我们刚才说到的函数的自变量,而函数执行完成后我们会通过return关键字来返回函数的执行结果,就是我们刚才说的函数的因变量。

定义函数的规则

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

注意:函数要执行的代码保持同一缩进形成代码块,定义def记得加“:”,英文输入法状态下输入的冒号。

计算组合数:C(M, N) = M! / N! / (M - N)! (M >= N), 可以看出求n!的过程是重复的,我们只需要改变自变量n就可以求不同数值的阶乘了。我们可以利用函数来实现求 n!,比起以前我们写的代码将会更加简洁。代码可读性更好。

# 之前的代码
m = int(input('m='))
n = int(input('n='))
a = 1
b = 1
d = 1
c = m - n
if m >= n:
    for i in range(1, m + 1):
        a *= i  # a=m!
    for j in range(1, n + 1):
        b *= j  # b=n!
    for f in range(1, c + 1):
        d *= f  # d=c!
print(a / (b * d))


# 使用函数

# 定义函数:def是定义函数的关键字、fac是函数名,num是参数(自变量)
def fac(num):
    """求阶乘"""
    result = 1
    for n in range(1, num + 1):
        result *= n
    # 返回num的阶乘(因变量)
    return result


m = int(input('m = '))
n = int(input('n = '))
# 当需要计算阶乘的时候不用再写重复的代码而是直接调用函数fac
# 调用函数的语法是在函数名后面跟上圆括号并传入参数
print(fac(m) // fac(n) // fac(m - n))

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

函数的参数
位置参数:

当我们知道定义函数需要的参数个数时,在没有特殊处理的情况下,函数的参数都是位置参数,也就意味着传入参数的时候对号入座即可。也就是说:传入参数时需要一一对应位置。

如下面代码所示:一个判断传入的三条边长能否构成三角形的函数,在调用函数传入参数时,我们可以指定参数名,也可以不指定参数名。

传入的参数值123会依次赋值给参数abc。也可以通过参数名=参数值的方式传入函数所需的参数,因为指定了参数名,传入参数的顺序可以进行调整,



def can_form_triangle(a, b, c):
    """判断传入的三条边长能否构成三角形,"""
    print(f'a = {
     a}, b = {
     b}, c = {
     c}')
    return a + b > c and b + c > a and a + c > b


# 调用函数传入参数不指定参数名按位置对号入座
print(can_form_triangle(1, 2, 3))
# 调用函数通过“参数名=参数值”的形式按顺序传入参数
print(can_form_triangle(a=1, b=2, c=3))
# 调用函数通过“参数名=参数值”的形式不按顺序传入参数
print(can_form_triangle(c=3, a=1, b=2))
命名关键字参数:

调用函数时,如果希望函数的调用者必须以参数名=参数值的方式传参,可以用命名关键字参数取代位置参数。所谓命名关键字参数,是在函数的参数列表中,写在*之后的参数.

def can_form_triangle(*, a, b, c):
    print(f'a = {
     a}, b = {
     b}, c = {
     c}')
    return a + b > c and b + c > a and a + c > b
# 传参时必须使用“参数名=参数值”的方式,不然就变成,位置不重要,可以随意。
print(can_form_triangle(a=3, b=4, c=5))
print(can_form_triangle(c=5, b=4, a=3))

注意:参数列表中的*是一个分隔符,*前面的参数都是位置参数,而*后面的参数就是命名关键字参数。

默认参数:

你可能感兴趣的:(小白的python升级打怪,python,函数式编程)