一、基本介绍
- 没有使用函数式编程之前带来的问题
- 代码的组织结构不清晰,可读性差
- 实现重复的功能时,你只能重复编写实现功能的代码,导致代码冗余,白白耗费精力。假如某一部分功能需要扩展或更新时,需要找出所有实现此功能的地方,一一修改,无法统一管理,加大了维护难度。
函数是什么
1、函数是对实现某一功能的代码的封装
2、函数可以实现代码的复用,从而减少代码的重复编写
二、定义函数
1、函数分类
函数分为 内置函数 和 自定义 函数
1、置函数是自带的,直接可以调用。比如 : id() type() list()
2、自定义函数 是我们自己在代码中编写定义的
2、定义函数语法
def 函数名(参数1.参数2,......)
'''注释'''
函数体
return 返回值
- def 是定义函数的关键字
- 函数名和变量名的定义规则一样,要能体现出函数的功能含有:
1、()小括号时必须的
2、:小括号后面的英文冒号是必须的- 参数不是必须的,多个参数使用英文逗号,隔开,
- 函数体可以写任意合法的python代码,需要缩进4个空格。
- return 是用于返回数据的,这个是可选的。
- 返回值也是可选的。
定义函数
def foo():
print("hello jack")
foo() #调用函数
****注意:函数必须先定义,才能调用****
三、函数的参数
函数的参数可以是python 中的任意数据类型,并且参数的数量可以是零个或多个。
函数参数分为:
- 形参:形式上的参数,在定义函数时使用,其实就是一个变量名
- 实参:实际的数据,实在调用函数时使用。
1、形参中位置参数和默认参数
def sys(msg) --sys就是位置参数--
print(msg)
s = "hello,jack"
#调用
sys(s)
1、函数调用
def func(x,y)
n = x -y
print(n)
func(3,2)
2、传递参数
位置参数有几个,调用函数时就要传递几个。并且有位置顺序的区分
1.默认参数,直接传递实参
def conn_L(ip="192.168.142.99"):
print(ip)
conn_L()
2.也可以传递实参
conn_L("192.168.142.1")
2、实参中的位置参数和关键字参数
- 实参:在函数使用的时候,给函数传递的参数。
- 位置参数:一个个数据对象,传递的时候是有位置顺序区分的。如:(18,'jack')
- 关键字参数:变量名和变量名的组合,传递的时候没有位置顺序之分。如:(name=jack,age=18)
1.位置参数
def say_me(name,age):
print("昵称:",name)
print("年龄:",age)
say_me("jack",18)
2.关键字参数
def say_me(name,age):
print("昵称:",name)
print("年龄:",age)
say_me(age=18,name="jack")
**关键字参数的变量名必须 和定义函数时的参数名称一致**
3、实现接受任意参数
* 可以接收所有的位置参数
** 可以接收所有的关键字参数。
In [7]: def aa(*args,**kwargs):
...: print(args)
...: print(kwargs)
...: aa(1,3,a=10)
(1, 3)
{'a': 10}
4、返回值强大之处
函数也可以通过关键字 return 返回任何数量的 Python 中的任意数据类型,作为结果
调用函数并且接收返回值
In [9]: def foo():
...: s = 'lenv'
...: li = [1,2,3]
...: return s,li
...: name,l3 = foo()
In [10]: name
Out[10]: 'lenv'
In [11]: l3
Out[11]: [1, 2, 3]
四、函数的高级用法
1、作为参数传递
def f1():
n = 1 + 1
return n
def foo():
ret = arg()
print(ret)
foo(f1)
输出2
----------------------------------------------
注意这里传递的是 函数名,后面不要加小括号。
本质上是传递了函数对象本身
2、作为返回值返回
def f2():
print("hello")
def func():
return f2
f = func()
print(id(f))
print(id(f2))
# f 和 f2 都指向了同一个函数对象
网友评论