019 函数:确认过参数,返回对的值

简介

  • 它是代码的一种组织形式
  • 一个函数一般完成一项特定的功能

定义

def func():
    """
    def 是定义函数的关键字,后要跟一个空格
    func 为函数名,可自定义,起名最好遵循约定俗的成命名规则,如小驼峰
    func 后面的括号和冒号都不能省,括号内可以有参数,也可以没有
    """
    
    print("我是一个函数。")  # 需要注意缩进
    print("我可以完成一定的功能。")
    print("调用才能执行。")
    
    return None  # 只写 return 或不写,默认均返回 None

print("我不属于 func 函数。")

参数

说明

  • 负责给函数传递一些必要的数据或者信息
  • 形参(形式参数):在函数定义的时候用到的参数,也许有个默认值,也许有个具体值,也许只是占个位
  • 实参(实际参数):在调用函数的时候输入的数据
  • 个人觉得,Python 中更适合谈“可变参数”与“不可变参数”

例1

def hello(name):  # 形参
    print("Hello, {}!".format(name))

  
name = "YorkFish"  # 实参
hello(name)

>>>

Hello, YorkFish!

例2

def hello(name):  # 形参
    print("Hello, {}!".format(name))

    return "See you next time~"

  
name = "YorkFish"  # 实参
rst = hello(name)
print("函数返回的是:", rst)

>>>

Hello, YorkFish!
函数返回的是: See you next time~

分类

  • 普通参数
    • 定义时,直接定义变量名
    • 调用时,直接把变量或者值放入指定位置
  • 默认参数
    • 形参带有默认值
    • 调用时,若没有给相应的形参赋值,则使用默认值
  • 关键字参数
    • 对调用时而言
    • 可以不考虑参数位置
    • 不容易混淆
  • 收集参数
    • 相当于预留一些位置给以后可能会用的参数,可以看成是一个特定的数据结构
    • args 是约定俗成,虽然可以写成别的,但推荐写成 args
    • 参数名 args 前的星号不能省略
    • 收集参数可以和其他参数共存

普通参数

# 定义
def func_name(param1, param2, ...):
    func_body

# 调用
func_name(value1, value2, ...)  # 按位置依次传递数据

默认参数

# 定义
def  func_name(param1=val1, param2=val2, ...):
    func_body

# 调用1
func_name()

# 调用2
value1 = 100
value2 = 200
func_name(value1, value2)

关键字参数

# 定义
def func(param1=val1, param2=val2, ...):
    func_body

# 调用1
func(para1=value1, param2=value2, ...)

# 调用2
func(param2=value2, param1=value1, ...)

收集参数

# 定义
def introduce(*args):  # 按照 tuple 使用方式访问 args 得到传入的参数
    print(type(args))
    for item in args:
        print(item)


# 调用
introduce()  # 不传参,args 为空元组
introduce("YorkFish", 18, "reading", "running", "music")

>>>

<class 'tuple'>
YorkFish
18
reading
running
music

关键字收集参数

  • 把关键字参数按字典格式存入收集参数
    • kwargs 为约定俗成
    • 调用时,把多余的关键字参数放入 kwargs
    • 访问 kwargs 需要按字典格式访问
# 定义
def introduce(**kwargs):
    print(type(kwargs))  # 在函数体内使用 kwargs 不用带星号
    for k, v in kwargs.items():
        print(k, v)


# 调用
introduce()  # 不传参,kwargs 为空字典
introduce(name="YorkFish", age=18, hobby1="reading", hobby2="running", hobby3="music")

>>>

<class 'dict'>
name YorkFish
age 18
hobby1 reading
hobby2 running
hobby3 music

关键字参数,收集参数,关键字收集参数

  • 收集参数,关键字参数,普通参数可以混合使用
  • 使用规则:普通参数和关键字参数优先
# 定义
def stu(name, age, *args, hobby="None", **kwargs):
    print("My name is {0}, and I am {1} years old.".format(name, age))
    
    if hobby == "None":
        print("I don't have a hobby.")
    else:
        print("I like {}".format(hobby))

    for i in args:
        print(i)

    for k, v in kwargs.items():
        print(k, v) 


name = "YorkFish"
age = 18

# 调用
# stu(name, age)
# stu(name, age, hobby="reading")
stu(name, age, "Howard", "Raj", hobby="comic", hobby2="kites")

>>>

My name is YorkFish, and I am 18 years old.
I like comic
Howard
Raj
hobby2 kites

解包

  • list/dict 解包后,可以传给收集参数
  • 列表、元组使用 * 即可解包
  • 字典需要用 ** 解包
def test(*args):
    for i in args:
        print(i)
        print(type(i))


a = [123, "YorkFish"]
test(*a)

>>>

123
<class 'int'>
YorkFish
<class 'str'>

返回值

说明

  • 函数的执行结果
  • 使用 return 关键字
  • 如果没有写 return 语句,默认返回一个 None
  • 函数一旦执行 return 语句,则无条件返回需返回的值,然后退出函数
  • 推荐最后以 return 结束的写法

举例

def test1():
    print("有返回值!")
    return 1


def test2():
    print("没有返回值?")


rst1 = test1()
print(rst1)

rst2 = test2()
print(rst2)

>>>

有返回值!
1
没有返回值?
None

函数文档

说明

  • 作用:对当前函数提供使用相关的参考信息
  • 写法:在函数内部开始的第一行使用三引号字符串定义符
  • 文档查看
    • 使用 help(),形如 help(func)
    • 使用 __doc__,形如 introduce.__doc__

例1

def introduce(name, age, *args):
    '''介绍人物
    name: 
    age: 
    return: None
    '''
    print("name: {}, age: {}".format(name, age))
    for i in args:
        print(i)


help(introduce)  # 查看 introduce 的说明文档

>>>

Help on function introduce in module __main__:

introduce(name, age, *args)
    介绍人物
    name: 
    age: 
    return: None

例2

def introduce(name, age, *args):
    '''介绍人物
    name: 
    age: 
    return: None
    '''
    print("name: {}, age: {}".format(name, age))
    for i in args:
        print(i)


print(introduce.__doc__)

>>>

介绍人物
    name: 
    age: 
    return: None
原文地址:https://www.cnblogs.com/yorkyu/p/10297761.html