这只乌龟,当然离不开函数了!

news2025/1/8 7:07:21

什么是函数?

  • 函数就是执行特定任务和以完成特定功能的一段代码

为什么需要函数?

  • 复用代码

  • 隐藏实现细节

  • 提高可维护性

  • 提高可读性便于调试

函数的创建

  • def 函数名 ([输入参数]) :

函数体

[return xxx]

  • 函数名需要遵循字母、数字、下划线

# 这里的a,b是形式参数-形参,形参的位置是在函数的定义处
def calc(a,b):
    c = a+b
    return c
print(calc(10,50)) # 60    这里的10,50称为实际参数的值,简称实参
print(calc(b=50,a=10)) #=左侧的变量名称为关键字参数,自动找a和b

定义函数取奇偶数

def fun(num):
    odd = [] # 存奇数
    even = [] # 存偶数
    for i in num:
        if i%2:
            odd.append(i)
        else:
            even.append(i)
    return odd,even
lst=fun([10,21,33,66,88,99])
print(lst) # ([21, 33, 99], [10, 66, 88])

  • 如果函数没有返回值【函数执行完毕之后,不需要给调

  • 用处提供数据,return是可以省略不写的~

  • 函数的返回值,如果是1个,直接返回类型

  • 函数的返回值,如果是多个,返回的结果为元组

函数的参数定义

  • 函数定义默认值参数

  • 函数定义时,给形式参数设置默认值,只有与默认值不符的时候才需要传递实参

def fun(a,b=10)
    print(a,b)
fun(100)   #只传一个参数,b采用默认值
fun(20,30) #30将默认值10替换

个数可变的位置参数

  • 定义参数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数

  • 使用*定义个数可变的位置形参

  • 只能定义一个,def fun(* args,*a):这样报错

  • 结果为一个元组

def fun(*args): # 函数定义时的 可变的位置参数
    print(args) 
fun(10)
fun(10,30)
fun(30,405,50)
"""
结果
(10,) 注意元组有, 逗号,否则为字符串了
(10, 30)
(30, 405, 50)
"""

个数可变的关键字形参

  • 定义函数时,无法事先先确定传递的关键字实参的个数时,使用可变的关键字形参

  • 使用**定义个数可变的关键字形参

  • 只能定义一个,def fun(** args, **a):这样报错

  • 结果为一个字典

def fun1(**args):
    print(args)
fun1(a=10) # {'a': 10}
fun1(a=20,b=30,c=40) # {'a': 20, 'b': 30, 'c': 40}

print源码

  • 它是一个形式可变的位置参数,所以print('这里写几个都没问题')

defprint(self, *args, sep=' ', end='\n', file=None):

注意

  • 在一个函数定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求,个数可变的位置形参,放在个数可变的关键字形参之前

def fun(**args1,*arg2):

  • 在函数调用时的参数传递,称为位置传参

def fun(a,b,c):
    print(a,end='\t')
    print(b,end='\t')
    print(c,end='\t')
fun(10,20,30) #  10    20    30 函数调用时的参数传递,称为位置传参
lst = [11,22,33]
# fun(lst) #报错
fun(*lst)  # 11    22 33 在函数调用时,将列表中的每个元素都转换为位置实参传入
dic = {'a':111,'b':222,'c':333}
# fun(dic) #报错
fun(**dic) # 111  222    333 在函数调用时,将字段的键值对都转换为关键字实参传入
# 个数可变的关键字传参
def fun4(**args): 
    print(args)
fun4(a=666,b=888) #  {'a': 666, 'b': 888}

函数传参其它类型

def fun5(a,b,*,c,d):
    print(a)
    print(b)
    print(c)
    print(d)
fun5(a=10,b=20,c=30,d=40) # 10 20 30 40
# fun5(10,20,30,d=40) # 错误 前两个参数采用的是位置实参传递,c,d只能采用关键字传递
fun5(10,20,c=30,d=40) #  10 20 30 40
# 这些也都是可以的
def fun5(a,b,*,c,d,**args):
    print(args)
fun5(1,3,c=3,d=4,e=4) # {'e': 4}
def fun(*args,**args2):
    pass
def fun(*args,**args2):
    pass
def fun(a,b=10,*args,**args2):
    pass

变量的作用域

  • 程序代码能访问该变量的区域

  • 根据变量的有效范围可分为

局部变量和全局变量

局部变量

  • 在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会成为全局变量

全局变量

  • 在函数体外定义的变量,可作用函数内外

def fun():    global age # 声明global在外部也可以使用了    age=20    print(age) # 20fun()print(age+1) # 21

递归函数

什么是递归函数?

  • 在函数体内调用了函数本身

递归的组成部分

  • 递归调用与递归终止条件

递归的调用过程

  • 每递归调用一次函数,都会在栈内存分配每一个栈帧

  • 每执行完一次函数,都会释放相应的空间

递归的优缺点

  • 优点:占用内存多,效率低下

  • 缺点:思路和代码简单

练习:斐波那契数列

(形如1 1 2 3 5 8..每一项都前两项之和的数列)

# 斐波那契数列
def fib(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib(n-1)+fib(n-2)
print(fib(3)) # 2
# 输出前四项数组
for i in range(1,5):
    print(fib(i)) # 1 1 2 3

为了应付期末考试,我又学习了一门语言

1760字,让你拿捏['列表']

●这个字典能做什么

强大的内置数据结构_元组(6,)

太强了!带你轻松玩转Python集合

让你轻松搞定_字符串和驻留机制!

微信公众号:索奇之家

索奇之家:探索各类互联网技术~ 优先发放java技术、其它编程语言技术、源代码、软件资料、数码迷惑、以及一些网络小技巧……Welcome home~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03 流程控制

3.1 条件判断3.2 循环控制3.3 中断循环 3.1 条件判断 if 条件判断 :单分支(if)、双分支(if…else…)、多分支(if … else if … else)Switch(Scala并没有 switch,用的是…

2023年鞋服配饰行业如何玩转全域经营?

2023年,鞋服配饰行业私域已进入深水区,这就对私域运营提出了更高的挑战和目标,企业纷纷发力以私域为基石、以消费者为核心的全域经营。 不过,虽然鞋服配饰行业私域起步早,玩法多。但在迈向全域经营的过程中&#xff0…

全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。

文章目录1. 文章引言2. 何谓反向代理3. 解析nginx的配置文件3.1 全局块(global block)3.2 events块(events block)3.3 http块(http block)4. 如何配置反向代理4.1 反向代理示例14.2 反向代理示例25. 补充说明5.1 location指令说明5.2 nginx完整配置文件1. 文章引言 如果你的服务…

聚合效度全流程

聚合效度分析流程如下: 一、聚合效度定义 聚合效度(convergent validity),又称收敛效度,是指测量同一变量的测量项会落在同一因子上,强调本应该在同一因子下的测量项,确实在同一因子下。即一个…

基于nodejs+vue地方特色的风景文化宣传网站vscode

管理员可以根据系统给定的账号进行登录,登录后可以进入木里风景文化管理平台对木里风景文化所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。 该系统为每一个用户都分配了一个用户账号,用户通过账号的登录可以在系统中查看木里风景文化信息…

怎么依靠网络赚钱,网上可以做什么副业

如今,网上赚钱已经成为许多人职业生涯的选择之一。网上有很多可靠的兼职,让你在家里轻松赚钱。今天给大家推荐五份可靠的网上兼职。一、怎样选择可靠的网络兼职可靠的网络兼职一般是指在家通过网络平台完成兼职任务,完成任务后即可获得报酬。…

JVM中TLAB(Thread Local Allocation Buffer)+逃逸分析

1、为什么有TLAB(Thread Local Allocation Buffer)堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据 由于对象实例的创建在JVM中非常频繁,因此在并发环境下从堆区中划分内存空间是线程不安全的 为避免多个线程操作同一地…

java地图导出——添加经纬线

概述 前面的文章Node实现切片的拼接和地图的导出和Java实现地图的导出分别讲述可如何在node和java中实现切片的拼接以及地图的导出。本文,书接前文,实现java导出时经纬度的添加。 实现后效果 实现 完整的实现思路流程如下图: 1. 根据切片…

什么是Makefile?如何编写Makefile?

🥇今日学习目标:什么是Makefile?如何编写Makefile? 🤵‍♂️ 创作者:JamesBin ⏰预计时间:10分钟 🎉个人主页:嵌入式悦翔园个人主页 🍁专栏介绍:L…

RabbitMQ实现死信队列

目录死信队列是什么怎样实现一个死信队列说明实现过程导入依赖添加配置编写mq配置类添加业务队列的消费者添加死信队列的消费者添加消息发送者添加消息测试类测试死信队列的应用场景总结死信队列是什么 “死信”是RabbitMQ中的一种消息机制,当你在消费消息时&#…

单调栈(C/C++)

目录 1. 单调栈的定义 2. 单调栈的常见用途 3. 案例分析 3.1 暴力解法 3.2 单调栈 4. 单调栈总结 1. 单调栈的定义 单调栈顾名思义,就是栈内的元素是单调的。根据栈内元素的单调性的不同,可以分为: 单调递增栈:栈内元素是单…

LeetCode 105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树

为什么前序和中序或者中序和后序,两两组合能构建一个二叉树? 因为前序和后序可以确定根,而中序可以划分出左右区间。 文章目录从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树从前序与中序遍历序列构造二叉树 难度 中等 题目链…

基于java的进销库存管理系统(Vue+Springboot+Mysql)前后端分离项目,附万字课设论文

1.3 系统实现的功能 本次设计任务是要设计一个超市进销存系统,通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括:首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、 …

TS泛型,原来就这?

一、泛型是什么?有什么作用? 当我们定义一个变量不确定类型的时候有两种解决方式: 使用any 使用any定义时存在的问题:虽然知道传入值的类型但是无法获取函数返回值的类型;另外也失去了ts类型保护的优势 使用泛型 泛型…

记一次线上es慢查询导致的服务不可用

现象 某日线上业务同学反馈订单列表查询页面一直loding,然后提示请求超时,几分钟之后恢复正常 接到报障之后,马上根据接口URL,定位到了请求链路,发现是es查询超时,这里我们的业务订单表数据是由几百万的&a…

【数据结构】时间复杂度和空间复杂度以及相关OJ题的详解分析

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1.算法效率1.1 如何衡…

独家 | Gen-1——可以改变视频风格的AI模型

翻译:吴振东校对:张睿毅本文约1000字,建议阅读3分钟 本文简单介绍了Runway公司的发展史,以及他们新推出的生成式AI模型Gen-1,可用于通过应用文本提示或者参考图像所指定的任意风格,将现有视频转换为新视频。…

php mysql高校教材管理系统

我的目标就是在于开发一个功能实用、操作方便,简单明了的管理系统;其能够录入教师个人的信息,教导主任信息,在操作上能够完成诸如添加、修改、删除、按各种条件进行查询、等方面的工作,基本满足学校的日常业务的需求. …

System V|共享内存基本通信框架搭建|【超详细的代码解释和注释】

前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支…

string和自动推断类型

欢迎来观看温柔了岁月.c的博客目前设有C学习专栏C语言项目专栏数据结构与算法专栏目前主要更新C学习专栏,C语言项目专栏不定时更新待C专栏完毕,会陆续更新C项目专栏和数据结构与算法专栏一周主要三更,星期三,星期五,星…