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')
相关推荐
代码游侠31 分钟前
学习笔记——数据结构学习
linux·开发语言·数据结构·笔记·学习
vvoennvv33 分钟前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
自学互联网1 小时前
使用Python构建钢铁行业生产监控系统:从理论到实践
开发语言·python
无心水1 小时前
【Python实战进阶】7、Python条件与循环实战详解:从基础语法到高级技巧
android·java·python·python列表推导式·python条件语句·python循环语句·python实战案例
xwill*1 小时前
RDT-1B: A DIFFUSION FOUNDATION MODEL FOR BIMANUAL MANIPULATION
人工智能·pytorch·python·深度学习
陈奕昆2 小时前
n8n实战营Day2课时2:Loop+Merge节点进阶·Excel批量校验实操
人工智能·python·excel·n8n
程序猿追2 小时前
PyTorch算子模板库技术解读:无缝衔接PyTorch模型与Ascend硬件的桥梁
人工智能·pytorch·python·深度学习·机器学习
雍凉明月夜2 小时前
视觉opencv学习笔记Ⅲ
笔记·opencv·学习
秋邱2 小时前
高等教育 AI 智能体的 “导学诊践” 闭环
开发语言·网络·数据库·人工智能·python·docker
组合缺一2 小时前
Solon AI 开发学习6 - chat - 两种 http 流式输入输出
python·学习·http