python学习-05【函数】

1、初始函数

函数的定义

Python 中使用 def 关键字开头定义函数

python 复制代码
def function_name(parameters):
    function body
    return value
  • function_name:函数的名称(函数名区分大小写)
  • parameters:函数的参数(参数可以可以有一个或多个,也可以没有参数,参数之间通过==逗号( , )==分隔)
  • function body:函数体(需要缩进四个空格或一个 Tab 键)
  • return value:函数的返回值(没有返回值时,可以省略)

在定义函数时,即使没有参数,函数名称后面也必须有一对空 ()。

函数体和函数的返回值相对于 def 关键字必须保持缩进。

python 复制代码
def helloFunction(name):
    print('Hello', name)
helloFunction('Python') #调用函数
函数的返回值

1、如果在函数中只有 return 关键字,后面没有返回值,返回 None。

如果不指定 return 关键字,结果同样会返回 None,即该函数没有返回值。

python 复制代码
def no_value():
    return
print(no_value())

2、Python 中的函数可以返回多个值,而且值的类型也可以不同,当有多个返回值时,默认返回的是一个元组

python 复制代码
def values():
    str1 = 'Python'
    num1 = 2222
    list1 = [1, 2, 3]
    return str1, num1, list1
print(values())

2、函数的参数

位置参数

即定义多少参数就要传入多少参数,并且顺序与类型要一致

关键字参数
python 复制代码
def area(height, width):
    total_area = height * width
    return total_arae
print(area(width = 11, height = 220))

如果传入的关键字参数在形参中没有定义,程序就会出错。

关键字参数的位置顺序对实际输出的结果没有影响,只要在函数调用时指定的是对应的参数即可。

默认参数
python 复制代码
def student(age, name = 'Spring'):
    print(age)
    print(name)
student(8)
  • 默认参数必须定义在所有形参之后
可变参数

1、基于元组可变参数

使用 *parameter 的形式定义函数中的参数,可以接受任意多个实参,并将其放入元组中。

python 复制代码
def print_name(*name):
    print(name)
print_name()
print_name('Spring')
print_name('A', "B")
print_name('Bob', 'Peter', 'Meg')

2、基于字典的可变参数

使用 **parameter 的形式定义函数中的参数。

使用这种方式在调用函数时,必须通过关键字参数的形式来传递参数。

python 复制代码
def student_info(**info):
    print(info)
student_info()
student_info(name = 'Mary')
student_info(name = 'Jack', age = 18)
student_info(name = 'Spring', age = 20, stu_id = 1123)

3、变量的作用域

局部变量
全局变量

通过关键字 global 在函数体内定义的变量也可以被称为全局变量

python 复制代码
str1 = 'ABC'
def var():
    global str1
    str1 = 'DEF'
    print(str1)
var()
print(str1)
# 两个str1输出结果相同

4、内置函数和匿名函数

内置函数

内置函数(BIF)是 Python 提供的函数

https://docs.python.org/zh-cn/3.8/library/functions.html

匿名函数

匿名函数也叫 Lambda 函数,指一种没有名字的函数

  • 程序只需要执行一次,不需要另外定义函数名
  • 需要以函数作为参数,但是函数本身十分简单,且只使用一次

参数可以有多个,使用逗号( , )分隔;

但是表达式只能有一个,即返回一个值。

python 复制代码
def sub(a, b):
    return a - b
print(sub(77, 7))

print(lambda x, y: x - y)

sub = lambda x, y: x- y
print(sub(88, 8))
函数文档

在实际开发中,个人的代码需要和其他人进行衔接,多数的时候需要先阅读文档,帮助理解代码功能和函数。(其意义与代码注释是相同的)

通过 """ """的形式,其中包括函数的功能、参数说明、返回值、日期等;

除了输出函数的返回值外,还可以通过函数调用 __doc__ 获取文档的字符串,即函数文档

python 复制代码
def score(a, b, c):
    """
    	A, B, C's scores
    """
    return a + b + c
print(socre.__doc__)

5、函数的递归

在函数内部可以调用自己。

简单的递归

1、求阶乘:

python 复制代码
def factorial_fun(n):
    if n == 1:
        return 1
   	return n * factorial_fun(n - 1)
num = int(input())
print(factorial_fun(num))

2、斐波那契数列

python 复制代码
def fibonacci_fun(n):
    if n <= 2:
        return 1
   	return fibonacci_fun(n - 1) + fibnacci_fun(n - 2)
num = int(input())
print(fibonacci_fun(num))

3、汉诺塔问题

python 复制代码
def hanoi(n, a, b, c):
    if n == 1:
        print(a, '--->', b)
    else:
        hanoi(n-1, a, c, b)
        print(a, '--->', c)
        hanoi(n-1, b, a, c)
num = int(input())
hanoi(num, 'A', 'B', 'C')
相关推荐
A懿轩A22 分钟前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
汪洪墩24 分钟前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
居居飒31 分钟前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
kkflash31 小时前
提升专业素养的实用指南
学习·职场和发展
1 9 J2 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
程序员shen1616112 小时前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
人人人人一样一样2 小时前
作业Python
python
四口鲸鱼爱吃盐2 小时前
Pytorch | 利用VMI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python
四口鲸鱼爱吃盐2 小时前
Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
人工智能·pytorch·python