前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python干货——函数

python干货——函数

原创
作者头像
Java学术趴
发布2022-06-03 14:10:53
6880
发布2022-06-03 14:10:53
举报
文章被收录于专栏:Java全栈·Java全栈·

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。

👋大家好!我是你们的老朋友Java学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。

9.1 函数的基础

  • 函数就是一段含有特殊功能的代码块
  • 使用函数完成代码的复用
  • Python中函数名是不可以重复的。
  • Python中的函数名应该小写,函数的形参,函数中的变量名应该小写(建议)
  • Python中存在两个一个名字的变量,其实并不是定义了一个新的变量,而是对该变量进行了重新的赋值

函数定义

代码语言:javascript
复制
def + 关键字 + 小括号 + 冒号 + 换行缩进 + 代码块(定义一个函数)
def 函数名():
    代码块
复制代码

函数调用

代码语言:javascript
复制
函数名() # 直接调用
复制代码

函数说明文档

代码语言:javascript
复制
函数内容的第一行可以用字符串进行函数说明
复制代码

9.2 基本函数

  • 没有参数的函数
代码语言:javascript
复制
# Python中的函数
​
# 定义函数。不存在返回值的
# 形式参数可以不指定变量的类型,这样传递的时候可以传递任意的类型,但是主要 str + int  报错
def add(a: int, b: int):
    # 函数的第一行可以使用字符串来说明这个函数的功能。使用 """三个双引号包裹"""
    # 自动生成:点击三个双引号然后enter,自动生成函数的说明文档
    """
    这一个进行两个数字相加的函数
    :param a:
    :param b:
    :return: None
    """
    print(a + b)
​
# 调用函数
add(1, 2)
# 3
​
# 调用函数。存在返回值
# Python中的函数
# 定义函数
def add(a: int, b: int):
    """
    这一个进行两个数字相加的函数
    :param a:
    :param b:
    :return: a+b
    """
    return a + b
​
# 调用函数
print(add(1, 2))
复制代码
  • 存在参数的函数
代码语言:javascript
复制
# 定义含有不同类型以及个数的参数的函数
def export(string: str, height: float):
    print('%s的身高是%f' % (string, height))
    print('{}的身高是{}'.format(string, height))
​
​
# 调用函数
export('小明', 65.4)
export('小张', 45.7)
复制代码

当存在参数的时候,必须保证函数的参数和传递的参数类型以及数量都一致

9.3 参数的分类

9.3.1 必选参数

形式参数是一种虚拟的变量,不占用内存空间

  • 必选参数 : 在使用的时候必须给定数量一致的实参值。形参数量 == 实参数量
  • 语法格式:
代码语言:javascript
复制
# Python中的函数
# 定义函数
def add(a, b):
    """
    这一个进行两个数字相加的函数
    :param a:
    :param b:
    :return: a+b
    """
    return a + b
​
​
# 可以传递字符串
print(add('abc', 'bcd'))
# abcbcd
​
# 可以传递数字
print(add(1, 2))
# 3
​
# 必选参数中,必须保证实参和形参的数量是一致的。否则报错
# print(add(1))
# 报错
复制代码
9.3.2 默认参数
  • 默认参数(缺省参数): 可以在声明函数的时候给定参数的默认值。如果调用者没有给这个参数重新赋值,那么就使用默认值。
  • 语法格式: def add(a: int = 20, b: int = 30)
代码语言:javascript
复制
# 默认参数
def add(a: int = 20, b: int = 30):
    return a + b
​
# 调用函数
# 当不传递实参的时候,他会使用默认值
print(add())
# 50
​
# 当只传递一个值的时候,他会按照顺序进行赋值
print(add(10))
# 40
​
# 即使在定义形参的时候指定了参数是int类型,其实在调用的时候也可以传递其他类型的值
# 所有说在定义函数形参的时候不一定要指定参数的数据类型
print(add('abc', 'bcd'))
# abcbcd
​
​
# 可以在一个函数中给定必选参数和默认参数
"""
当存在必选参数和默认参数的时候,必须把默认参数放到最后。
def add(a: int = 30, b: int): 报错
​
因为在调用的时候,实参是按照顺序进行赋值的。
如果把默认参数放到前面,把必选参数放到前面的时候
在调用的时候只给定一个实参,那么这个实参会赋值给默认参数,
此时修改了默认参数的值,但是没有给必选参数赋值,就会报错
所以在使用的时候,将默认参数写在参数的最后
"""
​
def add(a: int, b: int = 30):
    return a + b
​
# 调用函数
# 这里至少需要传递一个实参,因为函数的第一个形参是必选参数
print(add(10))
# 40
​
# 当传递两个的时候,他会进行顺序赋值,此时也修改了默认参数的值
print(add(10, 50))
# 60
复制代码
9.3.3 可选参数
  • 可选参数(不定长参数): 一个函数在调用的有时候传递的实参比当初声明的函数参数要多。这个就是不定长函数。定义函数时不用声明参数名字,加了星号(*)的变量args会存放所有未命名的变量参数。args为元组; 而加( ** )的变量kwargs会存放命名参数,即形如key=value的参数,kwargs为字典;
  • 语法格式: def show(*args)。其中这个args不是固定的,可以是任意的变量名,一般用args接收。是一个元组类型
代码语言:javascript
复制
# 可选参数
# Python中的函数名应该小写
def show(*args):
    """
    *ages代表的是一个可选参数,在调用这个函数的时候可以传递任意多个实参
    args是一个元组,所有传递的实参会合成一个元组
    :param args:
    :return:
    """
    # 判断可选参数的类型以及其中的数据
    print(type(args))
    # <class 'tuple'>
    print(args)
    # (1, 2, 3, 4)
​
    # 既然是元组据可以使用下标来获取其中的某个元素
    print(args[0])
    # 1
​
    # 定义一个数组接收元组中的数据。函数中的变量名小写
    char: list = []
    for data in args:
        char.append(data)
        pass
    return char
    pass
# 调用函数传递不同的实参。可以传递任意类型的数据
print(show(1, 2, 3, 4))
# [1, 2, 3, 4]
​
# 可以传递任意类型的数据
print(show([1, 2], 'abc', True))
# [[1, 2], 'abc', True]
复制代码
9.3.4 关键字参数
  • 关键字可变参数: ( ** )的变量kwargs会存放命名参数,即形如key=value的参数,kwargs为字典
  • 语法格式: def show(**kwargs)。其中这个kwargs不是固定的,可以是任意的变量名,一般用kwargs接收。是一个字典类型
代码语言:javascript
复制
# 可选参数
# Python中的函数名应该小写
def show(**kwargs):
    """
    **kwargs 代表的是一个可选参数,在调用这个函数的时候可以传递任意多个实参
    args是一个字典,所以说传递的参数需要是一个字典才可以
    :param kwargs:
    :return:
    """
    # 判断可选参数的类型以及其中的数据
    print(type(kwargs))
    # <class 'dict'>
    print(kwargs)
    # {'name': '张三', 'age': 20}
​
    # 既然是元组据可以使用下标来获取其中的某个元素
    print(kwargs['name'])
    # 张三
​
    # 定义一个数组接收元组中的数据。函数中的变量名小写
    char: list = []
    for key in kwargs:
        char.append(key)
        pass
    return char
    pass
​
# 第一种:传递一个字典
dictionary: dict = {'name': '张三', 'age': 20}
# 直接传递一个字典会报错。需要加 **
print(show(**dictionary))
​
# 第二种:直接传递
# 因为 **kwargs 获取到的是一个字典形式的数据
# 所以这里传递的参数比较严格,如果是直接传递的必须是 变量名=数值 形式。
# 其中 变量名代表字典中的key值,数值代表字典中的value值
print(show(name='张三', age=20))
# ['name', 'age']
复制代码

重点:在实际开发中,一般都是可选参数、关键字参数混合使用的

代码语言:javascript
复制
# 可选参数、关键字参数混合使用
def mixing(*args, **kwargs):
    """
     可选参数必须放在关键字参数之前
    :param args: 元组
    :param kwargs: 字典
    :return:
    """
    print(args)
    print(kwargs)
    pass
​
# 他会自己匹配类型,将单个的数据存储到 args 中,把键值对的数据存储到 kwargs 中
mixing(1, True, 'abc', 3.14, name='张三')
# (1, True, 'abc', 3.14)
# {'name': '张三'}
​
# 这种赋值方式会报错,必须把普通的类型写在前面,键值对的参数写到最后
# mixing(name='张三', 1, True, 3.14, 'abc')
​
# 这种写法会报错,必须把 可选参数写到关键字参数的前面
# def mix(**kwargs, *args):

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.1 函数的基础
  • 9.2 基本函数
  • 9.3 参数的分类
    • 9.3.1 必选参数
      • 9.3.2 默认参数
        • 9.3.3 可选参数
          • 9.3.4 关键字参数
          相关产品与服务
          数据保险箱
          数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档