Python-函数

#基本介绍
###没有使用函数式编程之前带来的问题

  • 代码的组织结构不清晰,可读性差
  • 实现重复的功能时,你只能重复编写实现功能的代码,导致代码冗余,白白耗费精力
  • 假如某一部分功能需要扩展或更新时,需要找出所有实现此功能的地方,一一修改,无法统一管理,加大了维护难度

###函数是什么

  • 函数是对实现某一功能的代码的封装
  • 函数可以实现代码的复用,从而减少代码的重复编写

#一、定义函数
###1. 函数的分类
#####函数分为内置函数和自定义函数

  • 内置函数 是自带的,直接可以调用。比如 : id() ``````type()``````list()
  • 自定义函数 是我们自己在代码中编写定义的

###2. 定义函数的语法

def 函数名(参数1,参数2,参数3,...):
    '''注释'''
    函数体
    return 返回值
  • def是定义函数的关键字
  • 函数名和变量名的定义规则一样,要能体现出函数的功能含有:
  • ()小括号是必须的
  • :小括号后面的英文的冒号 :也是必须的
  • 参数 不是必须的,多个参数使用英文逗号 ,隔开
  • 函数体 可以写任意合法的 Python 代码,需要缩进 4个空格
  • retrurn是用于返回数据的,这个是可选的。
  • 返回值 也是可选的

#####定义函数

>>> def cc():
...     print("chenchao")
... 
>>>

#####调用函数

>>> cc()
chenchao
>>>

#####注意:函数必须先定义,才能调用

#二、感受返回值的强大

函数也可以通过关键字 return返回任何数量的 Python 中的任意数据类型,作为结果

>>> def foo():
...     c = 'chen'
...     li = [1, 2, 3]
...     return c, li
... 

>>> foo()
('chen', [1, 2, 3])

# 调用函数并且接收返回值
>>> name, num = foo()
>>> name
'chen'
>>> num
[1, 2, 3]

# 只调用一个函数并且接收返回值
>>> _, num = foo()
>>> num
[1, 2, 3]

#三、函数的参数
函数的参数可以是python 中的任意数据类型,并且参数的数量可以是零个或多个。
#####函数的参数分为:

  • 形参
    形参就是形式上的参数,是在定义函数时使用的概念,其实就是一个变量名
def 函数名(形参1, 形参2):
  • 实参
    实参就是实际的数据,是在调用(使用)函数时的概念。

###1. 形参中位置参数和默认参数
#####1.1 位置参数

# 定义参数
>>> def say(msg):     # say 就是位置参数
...     print(msg)
... 

# 调用参数
>>> say(1)
1

>>> say([1, 2, 3])
[1, 2, 3]

# 调用函数
>>> s = "abc"
>>> say(s)
abc


# 定义多个参数
>>> def fuc(x, y):
...     n = x-y
...     print(n)
... 

# 调用参数
>>> fuc(9, 5)
4

>>> fuc(2, 5)
-3

位置参数有几个,调用函数时就要传递几个。并且有位置顺序的区分

#####1.2 默认参数

# 定义参数
>>> def func(y=5):     # y 就是默认参数
...     print(y)
... 

# 调用参数
>>> func()
5

>>> func(3)
3


# 定义多个参数
>>> def func(x, y=5):
...     n = x-y
...     print(n)
... 

# 调用参数
>>> func(9)
4

>>> func(9, 8)
1

y=5定义了一个默认参数 y,这个参数在定义函数的时候就有了一个值 5
默认参数在调用函数时可以不用传递实参,就是使用默认值。
也可以传递实参,传递时,就是用所传递的参数

###2. 实参中的位置参数和关键字参数
在函数调用的时候,给函数传递的参数,称为实参。

实参可以简单分为 位置参数 和 关键字参数

  • 位置参数就是 一个一个的数据对象,传递的时候是有位置顺序区分的。如: (‘chen’, 18)
  • 关键字参数是变量名和变量值的组合,传递的时候没有位置顺序之分。如:(age=18, name=‘chen’)
>>> def say_me(name, age=20):
...     print("昵称:", name)
...     print("年龄:", age)
... 

>>> say_me('chen', 18)     # 位置参数在传值
昵称: chen
年龄: 18

>>> say_me(age=18, name='chen')     # 关键字参数的变量名必须 和定义函数时的参数名称一致。
昵称: chen
年龄: 18

###3. * 和 ** 实现接收任意参数
*可以接收所有的位置参数, **只可以接收所有的关键字参数。

def some_arg(*args,  **kwargs):
      print(args)
      print(kwargs)

# 调用
>>> some_arg(1, 2, 3, a=10, b=20)
(1, 2, 3)
{'a': 10, 'b': 20}

#四、函数的高级用法
###1. 作为其他函数的参数传递

>>> def f1():     # 定义函数 f1
...     n = 1 + 1
...     return n
... 
>>> f1()
2

>>> def f2():     # 定义函数 f2
...     n = 2 + 2
...     return n
...
>>> f2()
4

>>> def foo(arg):     # 定义函数 foo
...     ret = arg()
...     print(ret)
...

>>> foo(f1)     # 函数 foo 调用函数 f1
2

>>> foo(f2)     # 函数 foo 调用函数 f2
4

>注意这里传递的是 函数名,后面不要加小括号。
本质上是传递了 函数对象本身

###2. 作为其他函数的返回值返回

>>> def f1():     # 定义函数 f1
...     print('hello')
... 

>>> def f2():     # 定义函数 f2 调用 f1
...     return f1
... 

>>> f3 = f2()     # 定义变量 f3 等于函数 f2

# f1 和 f3 都指向同一个函数对象
>>> print(id(f1))
139936415612224

>>> print(id(f3))
139936415612224
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值