Python 中关于函数的那点事
👨🎓作者:Java 学术趴
💌公众号:Java 学术趴
🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。
🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号 Java 学术趴联系小编。
☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的!
👋大家好!我是你们的老朋友 Java 学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。
1. Python 中的函数
1.1 函数的基础
函数就是一段含有特殊功能的代码块
使用函数完成代码的复用
Python 中函数名是不可以重复的。
Python 中的函数名应该小写,函数的形参,函数中的变量名应该小写(建议)
Python 中存在两个一个名字的变量,其实并不是定义了一个新的变量,而是对该变量进行了重新的赋值
函数定义
函数调用
函数说明文档
1.2 基本函数
没有参数的函数
存在参数的函数
当存在参数的时候,必须保证函数的参数和传递的参数类型以及数量都一致
1.3 参数的分类
1.3.1 必选参数
形式参数是一种虚拟的变量,不占用内存空间
必选参数 : 在使用的时候必须给定数量一致的实参值。形参数量 == 实参数量
语法格式:
1.3.2 默认参数
默认参数(缺省参数): 可以在声明函数的时候给定参数的默认值。如果调用者没有给这个参数重新赋值,那么就使用默认值。
语法格式: def add(a: int = 20, b: int = 30)
1.3.3 可选参数
可选参数(不定长参数): 一个函数在调用的有时候传递的实参比当初声明的函数参数要多。这个就是不定长函数。定义函数时不用声明参数名字,加了星号(*)的变量 args 会存放所有未命名的变量参数。args 为元组; 而加( ** )的变量 kwargs 会存放命名参数,即形如 key=value 的参数,kwargs 为字典;
语法格式: def show(*args)。其中这个 args 不是固定的,可以是任意的变量名,一般用 args 接收。是一个元组类型
1.3.4 关键字参数
关键字可变参数: ( ** )的变量 kwargs 会存放命名参数,即形如 key=value 的参数,kwargs 为字典
语法格式: def show(**kwargs)。其中这个 kwargs 不是固定的,可以是任意的变量名,一般用 kwargs 接收。是一个字典类型
重点:在实际开发中,一般都是可选参数、关键字参数混合使用的
1.4 函数的返回值
函数执行完之后会返回一个对象,如果函数中存在 return 就返回实际的值,否则就返回 None
返回值的类型可以是任意类型:返回值类型取决于 return 返回的类型
一个函数中可以存在多个 return,但是只会返回一个 return 后面的值
如果执行了 return 语句,那么就代表这个函数已经结束了
1.5 函数的嵌套使用
在一个函数中可以调用另一个函数。和 Java 的使用方式一样
列题:定义一个函数,将一个列表中奇数位的元素存储到一个新的列表中
例题:将一个字典中的元素赋值到一个新的元素(对 value 的要求,长度必须是小于等于 2 的)
1.6 全局变量和局部变量
他的原理和 Java 中的使用方式是一样的。函数中优先使用局部变量,满足就近原则。
局部变量: 就是在函数内部定义的变量
全局变量: 定义在函数的外边,可以全部的函数使用
在函数中修改全局变量
Java 中修改全局变量的值
Python 中修改一个局部变量
错误
正确
不可变类型:使用 global 关键字针对的是不可变的类型修改变量的值。比如:数字、字符串、元组等
可变类型:
直接改变其中的数据的时候需要使用 global 关键字
测试代码:
1.7 匿名函数
1.7.1 匿名函数的基本语法
在 Python 中使用 lambda 关键字创建匿名函数,所谓匿名函数即这个函数没有名字,不用 def 关键字创建标准的函数。
匿名函数特点:
使用 lambda 关键字去创建函数
函数没有名字
匿名函数冒号后面的表达式有且只有一个。注意:是表达式,而不是语句
匿名函数自带 return,而这个 return 的结果就是表达式计算之后的结果
语法格式:
举例:
换成普通函数的样子
1.7.2 lambda 与三元运算符
语法格式:
能够由以下等效的表达式模拟:
这样的表达式(二元运算)能够在 lombda 中,他们能够在 lambda 函数中实现选择逻辑:
lambda 表达式可以在声明的时候直接赋值,可以进行直接调用
一个参数使用 lambda 表达式
使用 lambda 的缺点:
lambda 只能写一个表达式,只能在简单的逻辑中进行使用。复杂的逻辑还是需要使用 def 进行定义函数
1.8 递归函数
递归函数:如果一个函数的内部不调用其他函数,而是自己本身的话,这个函数就是递归函数。
使用递归函数的要求:
递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,当到达最大递归的时候会报错
递归函数的内部自己调用自己,不调用其他的函数
版权声明: 本文为 InfoQ 作者【Java学术趴】的原创文章。
原文链接:【http://xie.infoq.cn/article/b069abf3e5c1245ebb997f7eb】。文章转载请联系作者。
评论