函数基础和函数参数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
函数基础
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
演示:
我们打印几个列表
li = [1, 0, 5, 7, 9] |
输出结果:
1 |
有没有更简单的呢?
演示:
l1 = [1, 0, 5, 7, 9] |
输出结果
1 |
上述就是使用函数的形式来实现多个列表的打印,是不是比前面的更简单。
函数的定义
def 函数名(参数):
pass
return 表达式
函数名命名规则: 字母、数字和下划线组成,和变量命名规则一致
return 后面可以返回任意表达式,但不能是赋值语句
注意:函数名定义和变量名的定义是一样的,只能使用字母、数字和下划线定义,不能以数字开头。
关键字
关键字是不能拿来做变量定义的。
演示:
In [3]: a |
如果把关键字拿来定义,是会报语法错误的。
In [1]: import keyword |
上述就是整个Python编程语言的全部关键字,在基础阶段都会提到的。
函数调用
l1 = [1, 0, 'S', 7, 9] |
调用方式:函数名(参数)
函数返回
l1 = [1, 0, 'S', 7, 9] |
输出:
1 |
return:
注意 return 和 print 的区别,return是函数的返回值,返回值可以赋值给变量,而print只是打印出来
函数参数
那函数里面可以传入哪些对象呢?
def demo(x): |
输出
demo |
如果我们不传值呢?
def demo(x): |
输出
TypeError: demo() missing 1 required positional argument: 'x' |
TypeError:demo()缺少一个必需的位置参数:’x’。
传入几个参数呢?
必备参数
def func(x):
pass
def demo(x): |
输出
TypeError: demo() takes 1 positional argument but 2 were given |
一个参数对应一个数值
默认参数
def func(x, y=None):
pass
def demo(x, y=1): |
输出
1 2 |
y=1.就是默认参数,没有传入新参数的时候,就使用默认参数。
关键字参数
def demo(x, y=1): |
输出
1 2 |
关键字参数,调用的时候带上参数名。
不定长参数
def func(args, *kwargs):
pass
注意:*+参数名
def demo(*args): |
输出
(1, 2, 3, 4) |
参数名前面加
*号
是不定长参数,输出是一个元组。
def demo(*a): |
输出
1 2 3 4 |
加*:去除括号
def demo(**a): |
输出
{'x': 1, 'y': 2, 's': 2} |
参数名前面加
**号
是不定长参数,输出是一个字典。注意:传入的参数是键值对。
演示:
def demo(*args, **kwargs): |
输出
(1, 2, 3) |
传入的键值对,只能放在最后。
总结:
必备参数:在函数调用的时候,必备参数必须要传入
默认参数: 在函数调用的时候,默认参数可以不传入值,不传入值时,会使用默认参数
不定长参数:在函数调用的时候,不定长参数可以不传入,也可以传入任意长度。其中定义时,元组形式可以放到参数最前面,字典形式只能放到最后面
常见的内置函数
常见内置函数提供了一些处理的数据的方法,可以帮助我们提高开发速度
常见函数
len
求长度
li = [2,8,5] |
min
求最小值
li = [2,8,5] |
max
求最大值
li = [2,8,5] |
sorted
排序
li = [2,8,5] |
reversed
反向
li = [2,8,5] |
sum
求和
li = [2,8,5] |
进制转换函数
bin
二进制
In [13]: bin(12) |
oct
八进制
In [16]: oct(18) |
hex
十六进制
In [17]: hex(12) |
ord
字符转ASCII码
In [19]: ord('a') |
chr
ASCII码转字符
In [20]: chr(97) |
扩展
enumerate
返回一个可以枚举的对象
In [21]: li = ['a','b','c','d'] |
eval
取出字符串中内容
将字符串str当成有效的表达式来求值并返回计算结果
In [25]: a = "{'a':1}" |
exec
执行字符串或complie方法编译过的字符串,没有返回值
In [29]: s = ''' |
注意:eval 和 exec 是炸弹 能不能就不用,就好像你从不知道这东西一样,除非你足够的熟悉
filter
过滤器
In [38]: def test1(x): |
map
对于参数iterable中的每个元素都应用fuction函数,并将结果作为列表返回
In [41]: l2 = [1,2,3] |
zip
将对象逐一配对
In [44]: l3 = [1,2,3] |