Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python干货——函数(2)

Python干货——函数(2)

原创
作者头像
Java学术趴
发布于 2022-06-04 00:29:24
发布于 2022-06-04 00:29:24
86100
代码可运行
举报
文章被收录于专栏:Java全栈·Java全栈·
运行总次数:0
代码可运行

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。

👋大家好!我是你们的老朋友Java学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。

9.4 函数的返回值

  • 函数执行完之后会返回一个对象,如果函数中存在return就返回实际的值,否则就返回None
  • 返回值的类型可以是任意类型:返回值类型取决于return返回的类型
  • 一个函数中可以存在多个return,但是只会返回一个return后面的值
  • 如果执行了 return 语句,那么就代表这个函数已经结束了
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 函数的返回值
​
# 使用 return 返回函数的计算结果
def add(a, b):
    return a + b
​
print(add(1, 2))
复制代码

9.5 函数的嵌套使用

  • 在一个函数中可以调用另一个函数。和Java的使用方式一样
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 函数的嵌套调用
​
# 使用 return 返回函数的计算结果
def add(a, b):
    return a + b
​
def substruction(a, b):
    c: int = add(a, b)
    return c - b
​
# 函数的嵌套调用
result: int = substruction(1, 2)
print(result)
# 1
复制代码

列题:定义一个函数,将一个列表中奇数位的元素存储到一个新的列表中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def odd(char):
    # 定义一个列表存储奇数位的数据
    list_new: list = []
    # 定义一个变量来对应列表的下标值
    index: int = 0
    for data in char:
        if index % 2 == 1:
            list_new.append(data)
            # pass只是在书写代码跳出代码块的,并不会对代码的执行产生影响
            pass
        index += 1
        continue
        pass
    return list_new
​
print(odd(range(1, 11)))
复制代码

例题:将一个字典中的元素赋值到一个新的元素(对value的要求,长度必须是小于等于2的)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 只获取一个字典的value的前两位,把这个前两位作为value值传递给一个新的字典
​
def obtain(**kwargs):
    # 定义一个新字典
    wordbook: dict = {}
    for key, value in kwargs.items():
        # 将旧字典的key以及value值赋值给新的字典
        if len(value) > 2:
            # 关键代码。因为向字典中添加一个新元素的时候,如果在key存在会替换value值
            # 如果key不存在会添加一个新的元素
            # 所提在这里使用这种方式相当于直接在字典中添加 key--value
            wordbook[key] = value[:2]
            pass
        else:
            wordbook[key] = value
            pass
        pass
    return wordbook
​
# 调用函数
dictionary: dict = {'name': '张三','hobby': ['游泳', '健身', '打豆豆'], 'room': 'Python1105班'}
print(obtain(**dictionary))
# {'name': '张三', 'hobby': ['游泳', '健身'], 'room': 'Py'}
​
复制代码

9.4 全局变量和局部变量

  • 他的原理和Java中的使用方式是一样的。函数中优先使用局部变量,满足就近原则。

局部变量: 就是在函数内部定义的变量

全局变量: 定义在函数的外边,可以全部的函数使用

在函数中修改全局变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 如果使用全局变量的时候直接拿来使用即可。不需要使用 global 关键字声明
# 只有在修改变量值的时候需要使用 global 关键字声明
复制代码
  • Java中修改全局变量的值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Test {
    private static String name = "张三";
    public static void main(String[] args) {
        add(); // 周六
    }
    // Java中在一个函数中可以直接修改全局变量
    public static void add(){
        name = "李四";
        System.out.println(name);
    }
}
复制代码
  • Python中修改一个局部变量
  • 错误
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 全局变量和局部变量
# 定义一个全局变量
name: str = '张三'
# 定义一个函数修这个全局变量
def modify():
    """
    在一个函数中修改全局变量
    此时这种形式不能修改,这种形式县相当于在函数中创建了一个name的局部变量
    :return:
    """
    name = '李四'
    print(name)
    pass
modify()
# 李四
​
print(name)
# 张三。Python中修改全局变量和Java是不一样的
# Java中直接获取就可以修改,而Python不可以
复制代码
  • 正确
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 全局变量和局部变量
# 定义一个全局变量
name: str = '张三'
# 定义一个函数修这个全局变量
def modify():
    """
    在一个函数中修改全局变量,必须在变量名的前面加上 global 关键字
    此时的 变量name就不是函数中从新声明的一个局部变量name
    而是全局变量中的name变量
    :return:
    """
    # 如果使用全局变量的时候直接拿来使用即可。不需要使用 global 关键字声明
    # 只有在修改变量值的时候需要使用 global 关键字声明
    print(name)
    global name
    name = '李四'
    print(name)
    pass
modify()
# 李四 (函数中的name代表全局变量中的name)print(name)
# 李四 (全局变量的name)
复制代码
  • 不可变类型:使用 global 关键字针对的是不可变的类型修改变量的值。比如:数字、字符串、元组等
  • 可变类型:直接改变其中的数据的时候需要使用 global 关键字
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alobal char
char = [1, 2, 3, 4]
复制代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   	2. **使用类型中的方法修改数据直接修改即可。不需要 global 关键字**
复制代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char.append(5)
复制代码

测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 全局变量和局部变量
# 定义一个全局变量的list列表
char: list = []
​
# 定义一个函数修这个全局变量
def modify():
    """
    当在函数中修改一个可变类型的数据的时候如果直接赋值需要使用 global 关键字
    :return:
    """
    # 全局的变量名可以大写,函数中的变量名字、形参、函数名一般小写
    # 直接赋值需要关键字
    global char
    char = [1, 2, 3, 4]
    return char
    pass
​
def modify2():
    """
    如果使用列表对应的方法可以进行直接的添加数据和修改数据,不需要 global 关键字
    :return:
    """
    char.append(5)
    return char
    pass
​
# 直接修改需要关键字 global
print(modify())
# [1, 2, 3, 4]print(char)
# [1, 2, 3, 4]
​
# 使用列表中的方法修改不需要关键字
print(modify2())
# [1, 2, 3, 4, 5]print(char)
# [1, 2, 3, 4, 5]
​
复制代码

9.5 匿名函数

9.5.1 匿名函数的基本语法

在Python 中使用lambda关键字创建匿名函数,所谓匿名函数即这个函数没有名字,不用def关键字创建标准的函数。

匿名函数特点:

  • 使用lambda关键字去创建函数
  • 函数没有名字
  • 匿名函数冒号后面的表达式有且只有一个。注意:是表达式,而不是语句
  • 匿名函数自带 return,而这个return的结果就是表达式计算之后的结果

语法格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lambda 参数1,参数2,参数3:执行代码语句(这个代码语句必须是表达式)
复制代码

举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 这个test并不是函数名,而是变量名,相当于把这个匿名函数赋值给了一个变量
# 当在调用这个函数的时候使用这个变量名调用
test = lambda x,y:x+y
print(test(1,3))
# 4
print(test(4,5))
# 9
复制代码

换成普通函数的样子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 此时的test叫做函数名
def test(x,y):
    reuturn x+y
复制代码
9.5.2 lambda与三元运算符

语法格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if a:
    b
else:
    c
复制代码

能够由以下等效的表达式模拟:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b if a else c 
复制代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'可以参军' if age > 18 else '继续上学'
复制代码

这样的表达式(二元运算)能够在lombda中,他们能够在lambda函数中实现选择逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
greater = (lambda x, y: x if x > y else y)
print(greater(3, 5))
# 5
greater(6, 2)
# 6
复制代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 匿名函数可以参军
var = (lambda age: '可以参军' if age > 18 else '不可以参军')
​
# 调用匿名函数
print(var(20))
# 可以参军
复制代码

lambda表达式可以在声明的时候直接赋值,可以进行直接调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在定义lambda表达式的时候直接调用
rs = (lambda x, y: x if x > y else y)(3, 4)
print(rs)
# 4
复制代码

一个参数使用 lambda 表达式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 一个参数使用 lambda 表达式
parameter = lambda x: x*800+1
# 返回值是一个 int 类型,不能直接与字符串拼接,需要格式化操作
print('结果是:{}'.format(parameter(1)))
# 结果是:801
print('结果是:%d' % parameter(1))
# 结果是:801
复制代码

使用 lambda的缺点:

  • lambda只能写一个表达式,只能在简单的逻辑中进行使用。复杂的逻辑还是需要使用 def 进行定义函数

9.6 递归函数

递归函数:如果一个函数的内部不调用其他函数,而是自己本身的话,这个函数就是递归函数。

使用递归函数的要求:

  • 递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,当到达最大递归的时候会报错
  • 递归函数的内部自己调用自己,不调用其他的函数

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Python从入门到精通】(十二)Python函数的高级知识点,更深入的吸收知识【收藏下来保证有用!!!】
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。本文将介绍Python函数的高级知识点:重点介绍函数参数传递机制以及函数式编程。 干货满满,建议收藏,需要用到时常看看。小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。
码农飞哥
2021/08/18
7180
python的这四大函数类型得牢记(变量,引用,匿名,递归)
关注 公众号 神的孩子都在歌唱 可领取 几十G的 python ,java, 计算机基础,算法等学习资料
神的孩子都在歌唱
2025/03/10
830
python的这四大函数类型得牢记(变量,引用,匿名,递归)
Python升级之路( Lv5 ) 函数
第一章 Python 入门 第二章 Python基本概念 第三章 序列 第四章 控制语句 第五章 函数
时间静止不是简史
2022/12/02
1.3K0
Python升级之路( Lv5 ) 函数
7-函数
当存在多个默认参数的时候,调用的时候,既可以按顺序提供默认参数,比如调用enroll('Bob', 'M', 7),意思是,除了name,gender这两个参数外,最后1个参数应用在参数age上,city参数由于没有提供,仍然使用默认值。
用户3106371
2019/03/11
7710
7-函数
Python 编程 | 连载 14 - Python 的函数
函数分为内置函数和自定义函数,在前面提到的各个数据类型能调用的方法都是内置函数,当内置函数无法满足我们的需求时,就需要进行自定义函数。
RiemannHypothesis
2022/09/26
3360
Python 编程 | 连载 14 - Python 的函数
【python篇】关于函数当中的那些事,轻松拿捏
函数的定义:使用 def 关键字定义一个函数,以及函数的基本结构,包括函数名、参数列表、函数体和返回值。
用户11286421
2024/09/23
1210
Python升级之路(五) 函数
第一章 Python 入门 第二章 Python基本概念 第三章 序列 第四章 控制语句 第五章 函数
时间静止不是简史
2022/06/02
5840
Python升级之路(五) 函数
3 Python 基础: Python函数及递归函数知识点梳理
函数的英文是function,所以,通俗地来讲,函数就是功能的意思。函数是用来封装特定功能的,比如,在Python里面,len()是一个函数,len()这个函数实现的功能是返回一个字符串的长度,所以说len()这个函数他的特定功能就是返回长度,再比如,我们可以自己定义一个函数,然后编写这个函数的功能,之后要使用的时候再调用这个函数。所以函数分为两种类型,一种是系统自带的不用我们编写其功能系统自己就有的,比如len()这种函数,另一种函数是我们自定义的,需要我们编写其功能的,这种函数自由度高,叫做自定义函数,需要使用的时候直接调用该函数。
野原测试开发
2019/09/10
7160
3 Python 基础: Python函数及递归函数知识点梳理
Python3 | 练气期,函数创建、参数传递、作用域!
描述:上一章,我们学习了Python3编程中最基本而得流程控制语句,相信大家在作者的实践下也已经掌握了相关关键字了吧,这一章我们一起学习Python3编程入门中函数定义、函数调用、函数参数(传递、类型),匿名函数、递归函数。内嵌函数和闭包、装饰器函数,以及命名空间作用域的讲解,它也是Python编程中最基础且常用的部分,所以说也是需要我们掌握的。
全栈工程师修炼指南
2024/07/29
1320
Python3 | 练气期,函数创建、参数传递、作用域!
Python学习之旅(十一)
这时函数内部只调用局部变量,如果要调用全局变量需要在函数内加一句“global 同名变量”
py3study
2020/01/20
3480
Python 函数(二)
1、python 3 使用 lambda 来创建匿名函数,; 2、lambda 只是一个表达式,函数体比 def 简单; 3、lambda的主体是一个表达式,而不是一个代码块,仅能封装有限的逻辑进去; 4、lambda 函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间里的参数; 5、lambda 函数的语法只包含一个语句,如下: lambda [arg1 [,arg2,.....argn]]:expression
AiDBA宝典
2022/02/23
1880
python中的函数
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
六小登登
2019/08/14
1.7K0
python中的函数
初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数。自变量x的取值范围叫做这个函数的定义域
超蛋lhy
2018/08/31
2.1K0
python中的函数
[Python零基础入门篇③⓪] - 函数的定义与使用
什么是函数? --- > 函数是具有某种特定功能的代码块,可以重复使用(在前面数据类型相关章节,其实已经出现了很多 Python 内置函数了)。它使得我们的程序更加模块化,不需要编写大量重复的代码。
哈哥撩编程
2024/07/10
2340
[Python零基础入门篇③⓪] - 函数的定义与使用
python中的函数
如下代码,定义两个函数,每个函数都有两个形参,第一个add函数调用,直接赋值,打印出信息。add1函数使用print调用,但是在代码中有一个return内置的BIF函数来返回给add1,所以使用print可以打印出信息。
嘻哈记
2020/11/24
2K0
Python 变量作用域与函数
一个程序的所有的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的,变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称,两种最基本的变量作用域,第一种是局部变量,第二种是全局变量.定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域,而局部变量只能在其被声明的函数内部访问,全局变量则可以在整个程序范围内访问.
王 瑞
2022/12/28
2.5K0
Python之函数【参数,返回值,嵌套调用,作用域,匿名函数】
参数就是在声明函数时,在函数名后面的小括号内部填写参数,多个参数之间使用 , 分隔 。
叫我阿杰好了
2022/11/07
1.2K0
Python之函数【参数,返回值,嵌套调用,作用域,匿名函数】
Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业
1. 在Python中,定义一个函数时使用的关键字是? A. def B. function C. func D. create
小白的大数据之旅
2024/11/20
4400
Python基础语法(三)——函数
抽象 抽象 抽象是数学中非常常见的概念。举个例子: 计算数列的和,比如:1 + 2 + 3 + ... + 100,写起来十分不方便,于是数学家发明了求和符号∑,可以把1 + 2 + 3 + ... + 100记作:
zeruns
2020/03/23
1.3K0
Python3 与 C# 基础语法对比(Function专栏)
汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai
逸鹏
2018/07/23
4740
Python3 与 C# 基础语法对比(Function专栏)
推荐阅读
相关推荐
【Python从入门到精通】(十二)Python函数的高级知识点,更深入的吸收知识【收藏下来保证有用!!!】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验