函数定义和使用(1)

目录

❤  定义函数

1.  什么是函数

2.  函数的优点

3.  函数的定义

4.  函数的分类

1.  内置函数

2.  标准库函数

3.  第三方函数

4.  自定义函数

5.  函数的创建方法

1.  无参无返回值函数

2.  有参无返回值函数(重点)

3.  无参有返回值函数

4.  有参有返回值函数(重点)

6.  调用函数

7.  return 与 print 的区别

8.  函数的参数

1.  必传参数

2.  默认参数

3.  不确定参数(可变参数)

9.  参数规则


python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm=1001.2014.3001.5502

❤  定义函数

1.  什么是函数

函数就是在大程序中,分离不同的任务,函数是模块化程序设计的基本组成单位,函数定义好后,可以反复使用,避免编写重复的代码。

2.  函数的优点

  • 实现模块化程序设计
  • 实现代码的复用
  • 减少程序的复杂度

3.  函数的定义

  • 将一件事情的步骤封装在一起并得到最终结果
  • 函数名代表了这个函数要做的事情
  • 函数体是实现函数功能的流程
  • 函数可以帮助我们重复使用功能,通过函数名我们可以知道函数的作用

4.  函数的分类

1.  内置函数

内置函数就是Python中自带的函数,在程序中可以直接使用

例如: input() print()  type() abs()等

2.  标准库函数

标准库函数是Python中自带的标准库函数,通过import导入后使用

例如: random()  math()  os()  datetime()等

3.  第三方函数

Python社区提供的函数,需要下载,通过import导入后使用

例如: pymysql等

4.  自定义函数

根据用户需求,编写自己的函数

5.  函数的创建方法

通过关键字def来创建函数,def的作用是实现python中函数的创建

def 函数名(形参列表):

函数体

return 返回值

格式说明:

  1. def 表示定义函数的关键词
  2. 函数名遵循标识符规范
  3. 形参列表可以有0个或者多个参数,多个参数之间逗号分隔
  4. return表示返回的意思,将计算(处理)的结果返回,可以省略return

1.  无参无返回值函数

def add():
    print('add()...')

2.  有参无返回值函数(重点)

def sub(a, b):
    c = a + b
    print('sub()...', c)

3.  无参有返回值函数

def mul():
    x = 500
    return x

4.  有参有返回值函数(重点)

def div(a, b):
    c = a / b
    return c

6.  调用函数

函数名(参列表)

说明:调用无返回值函数,和参数无关

变量名 = 函数名(参列表)

说明:调用有返回值函数,和参数无关

规则:哪里调用函数,结果返回哪里

add()
# def add()     无返回值函数
m1 = mul()
print(m1)
# def mul()     有返回值函数
sub(10, 20)
# def sub(a,b)  无返回值函数
d1 = div(100, 200)
print(d1)
# def div(a,b)  有返回值函数

输出:

add()...
500
sub()... 30
0.5

案列:

定义一个函数yuan,调用yuan函数,计算圆的面积

# 定义函数
def yuan(r):
    ymj = 3.14 * r * r
    return ymj
# 获取键盘输入的数据(R)
r = int(input('请输入圆的半径(R):'))
# 调用函数
ymj = yuan(r)
print('圆的面积是:', ymj)

 输出:

请输入圆的半径(R):20
圆的面积是: 1256.0

7.  return 与 print 的区别

概念上一个是 返回值   一个是打印输出  

return 和 print的区别:

在执行函数的时候return无法打印出值,return返回的结果只能用于给变量赋值。而pirnt则可以直接打印。
return还有一个重要特性:在函数中,凡是遇到return,这个函数就会结束,这里要特别注意。针对无限循环的函数,可以使用return 

8.  函数的参数

1.  必传参数

什么是必传参数? 

在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数;且顺序与参数顺序相同,这就是必传参数。

  • 函数中定义的参数没有默认值,在调用函数时如果不传入则会报错
  • 在定义函数的时候,参数后边没有等号与默认值
  • 在定义函数的时候,没有默认值且必须在函数执行的时候传递进去的参数,且顺序与参数的顺序相同,就是必传参数
    # coding:utf-8
    
    def add(a,b):
        c=a+b
        return c
    result=add(1,2)
    print(result)
    # 输出结果:3

    2.  默认参数

  • 在定义函数的时候,定义的参数含有默认值,通过赋值语句给他是一个默认值
  • 如果默认参数在调用函数的时候传递了新的值,函数将会优先使用后传入的值进行工作
    # coding:utf-8
    
    def add(a,b=1):
        c=a+b
        return c
    
    print(add(1))
    # 输出结果:2
    
    print(add(1,3))
    # 输出结果:4

    3.  不确定参数(可变参数)

  • 没有固定的参数名和数量(不知道要传的参数名具体是什么)
    def add(*args,**kwargs):
        ...
    add(1,2,3,name='dewei',age=23)
    #      ↓          ↓
    #    对应*args    对应**kwargs
  • *args代表:将无参数的值合并成元组
  • **kwargs代表:将有参数与默认值的赋值语句合并成字典
def test_args(*args,**kwargs):
    print(args,type(args))
    print(kwargs,type(kwargs))
test_args(1,2,3,4,5,6,name="zhangsan",age=22,top=175)

输出:

(1, 2, 3, 4, 5, 6) <class 'tuple'>
{'name': 'zhangsan', 'age': 22, 'top': 175} <class 'dict'>

#参数是变量传递时,需要在变量前面加上*和**来区分传递的是元组还是字典,否则一律按元组*args处理
def test_args(*args,**kwargs):
    print(args,type(args))
    print(kwargs,type(kwargs))

a=('python','java')
b={"name":"zhangsan","age":22,"top":175}

test_args(a,b)
# 输出结果:
# (('python', 'java'), {'name': 'zhangsan', 'age': 22, 'top': 175}) <class 'tuple'>
# {} <class 'dict'>

test_args(*a,**b)
# 输出结果:
# ('python', 'java') <class 'tuple'>
# {'name': 'zhangsan', 'age': 22, 'top': 175} <class 'dict'>

9.  参数规则

def add(a, b=1, *args, **kwargs)

  • 参数的定义从左到右依次是 a - 必传参数 、b - 默认参数 、可变的 *args 参数 、可变的 **kwargs 参数

  • 函数的参数传递非常有灵活性

  • 必传参数与默认参数的传参也非常具有多样化

 传递的参数与函数定义时的参数顺序不一致时,使用赋值语句的方式传参

def test(a,b=1,*args):
    print(a,b,args)

s=(1,2)
test(1,2,*s)  #1 2 (1, 2)

# test(a=1,b=2,*s)
'''
Traceback (most recent call last):
  File "D:/WorkSpace/Python_Study/test01.py", line 8, in <module>
    test(a=1,b=2,*s)
TypeError: test() got multiple values for argument 'a'
'''
# 报错原因:当我们必选参数、默认参数与可选的元组类型参数在一起的时候,如果需要采取赋值的形式传参,则在定义函数的时候需要将可变的元组参数放在第一位,之后是必传、默认参数;这是一个特例!!!
def test2(*args,a,b=1):
    print(a,b,args)
test2(a=1,b=2,*s)   #1 2 (1, 2)
def test(a,b=1,**kwargs):
    print(a,b,kwargs)
test(1,2,name="zhangsan")   # 1 2 {'name': 'zhangsan'}
test(a=1,b=2,name="zhangsan")   # 1 2 {'name': 'zhangsan'}
test(name="zhangsan",age=33,b=2,a=1)    # 1 2 {'name': 'zhangsan', 'age': 33}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值