当前位置: 首页 > news >正文

[Python入门学习记录(小甲鱼)]第6章 函数

函数就是把代码整理打包的东西

6.1 Python的函数基操

函数的基本操作

6.1.1 创建和调用函数

def myfunc():print(1)print(2)print(3)
myfunc()  # 输出 1 2 3 带换行  调用时会自动找函数定义

6.1.2 函数的参数

def add(num1, num2):print(num1 + num2)
add(1, 2)  # 输出 3

6.1.3 函数的返回值

def add(num1, num2):return num1 + num2
print(add(1, 2))  # 输出 3def sub(num1, num2):print(num1 - num2)
print(sub(2, 1))  # 输出 1 和 None 没有返回值默认Nonedef test():return 1, 2, 3
print(test())  # 输出 (1, 2, 3) 多个返回值默认按元组返回def test2():return [1, 2, 3]
print(test2())  # 输出 [1, 2, 3] 多个返回值可以设置按列表返回

6.2 Python函数的灵活参数

6.2.1 形参和实参

def say(name):print("i am %s" % name)
say('lin')  # 输出 i am lin   name 形参  'lin'实参

6.2.2 函数文档

def exchangeRate(dollar):"""功能:汇率转换,美元->人民币汇率:6.54日期:2018-06-24"""return dollar * 6.54
print(exchangeRate(10))  # 输出 65.4  文档字符串正常不打印print(exchangeRate.__doc__)  # 查看文档字符串

6.2.3 关键字参数

def eat(somebody, something):print(somebody + '+' + something)
eat('wo', 'ni')  # 输出 wo+ni
eat('ni', 'wo')  # 输出 ni+wo
eat(something='wo', somebody='ni')  # 输出 ni+wo
eat('wo', somebody='ni')  # 输出 ni+wo

6.2.4 默认参数

def test(name="123", word="456"):print(name + '+' + word)
test()  # 输出 123+456
test('lin', 'wei')  # 输出 lin+wei

6.2.5 收集参数

def test(*params):print("有 %d 个参数" % len(params))print("第二个参数是", params[1])
test(1, 2, 3, 4, 5) 

6.3 Python变量的作用域

6.3.1 局部变量

函数的形参和函数内部定义的变量都是局部变量,只能在函数内调用

6.3.2 全局变量

定义在外部的变量能作用于任何地方,但如果要在函数内修改全局变量的值,需要使用 global 关键字

6.3.3 global关键字

def test():count = 10print(count)
test()
count = 5
print(count)  # 输出 10 和 5 无法改变全局变量的值count = 5
def test():global countcount = 10print(count)
test()print(count)  # 输出 10 和 10 可以改变全局变量的值

6.3.4 内嵌函数

Python允许在函数内部定义另一个函数,内嵌函数只能在包含它的函数内部调用

6.3.5 LEGB原则

变量查找顺序:Local -> Enclosing function locals -> Global -> Builtin

6.3.6 闭包

在内部函数中对一个在外部作用域但不在全局作用域的变量引用,这个内部函数就认为是闭包

6.3.7 装饰器

将函数作为参数传递进另一个函数加工后再返回,这个过程就是装饰

def log(func):def func2():print("lin")func()print("wei")return func2@log
def test():print("jun")
test()  # 输出 lin jun wei

6.4 函数式编程

6.4.1 lambda

lambda关键字用来创建匿名函数

g = lambda x, y: x + y
print(g(23, 3))  # 输出 26

6.4.2 filter

过滤器,filter函数用来过滤可迭代对象中符合条件的元素

print(list(filter(lambda x: x % 2, range(10))) # 过滤得到奇数

6.4.3 map

映射,map函数对每个元素进行操作

print(list(map(lambda x: x * 2, range(10)))  # 输出 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

6.5 递归

6.5.1 写一个阶乘函数

def func(n):if n == 1:return 1else:return n * func(n - 1)print(func(5))  # 输出 120

6.5.2 斐波那契数列

def func(n):if n == 1 or n == 2:return 1else:return func(n - 1) + func(n - 2)print(func(12))  # 输出 144

6.5.3 汉诺塔

def hanoi(n, x, y, z):if n == 1:print(x + '->' + z)else:hanoi(n - 1, x, z, y)print(x + '->' + z)hanoi(n - 1, y, x, z)n = int(input('输出层数:'))
hanoi(n, 'X', 'Y', 'Z')
http://www.xdnf.cn/news/23221.html

相关文章:

  • text-decoration: underline;不生效
  • SS25001-多路复用开关板
  • Google澄清:元描述标签不会直接提升网站排名
  • RESTful API简介
  • RAII资源管理理解
  • z-library电子图书馆最新地址的查询方法
  • vs2019配置点云库PCL1.12.1
  • leetcode222 完全二叉树的节点个数
  • shiro使用
  • Linux 系统编程 day5 进程管道
  • 4.5 发送响应消息
  • 【单倍型理解及计算系列之一】单倍型基本概念以及检测原理
  • 关于网站被注入病毒
  • day1-小白学习JAVA---JDK安装和环境变量配置(mac版)
  • 大模型转换为 GGUF 以及使 用 ollama 运行
  • 初识 Firebase 与 FPM
  • STL常用算法
  • vue3中使用拖拽组件vuedragable@next
  • C++指针与内存管理深度解析
  • 天梯赛树学合集
  • nuxt3路由切换页面出不来,刷新可以
  • Windows suwellofd 阅读器-v5.0.25.0320
  • C++保存和读取txt格式的点云数据文件
  • strings.SplitAfterN 使用详解
  • 国产三维CAD皇冠CAD(CrownCAD)在「轨道交通行业」建模教程:轨道列车
  • 初始图像学(6)
  • C++ 贪吃蛇 Greedy Snake
  • 影楼精修-高低频磨皮算法解析
  • 第 7 期:DDPM 采样提速方案:从 DDPM 到 DDIM
  • NOIP2013提高组.货车运输